服务在 VPS 上多起来之后,下一个问题是:怎么访问它们。每个服务一个端口?记不住,也不体面。我想要的是每个服务一个子域名,全部走 HTTPS,而且配置这事最好一劳永逸。
试了 Caddy 之后就没再换过。
一条配置一个服务
整个反向代理的配置文件,核心就是几行:
ghostfolio.example.com {
reverse_proxy localhost:3333
}
alist.example.com {
reverse_proxy localhost:5244
}
域名、证书、HTTP/3、到后端的转发,全在这两行里。没有 server block 套 server block,没有 80 和 443 写两遍。第一次从 Nginx 迁过来的时候,我反复检查是不是漏了配置——真的没漏。
自动 HTTPS 是杀手锏
Caddy 默认给所有站点申请并续期 Let’s Encrypt 证书。上线那天我什么都没做,证书就在那儿了;九十天后我大概还是什么都没做,它自己续了。
以前管理证书的心智负担:算过期时间、配续期 cron、改完配置 reload。现在这些统统不存在。不是「变简单了」,是「这个问题从清单上划掉了」。
我摸出来的几个习惯
子域名按服务功能起名,不按端口起。 rss. 是聚合,pan. 是网盘,blog. 是写字。三个月后还能一眼看懂的命名,才是好命名。
内网服务别裸奔。 有账号体系的服务靠自己的登录页;没账号体系的面板类服务,加一层 Basic Auth。Caddy 里五行配置的事,换来扫描器抓不到后台的安心。
改配置先 caddy validate。 一行命令验证语法,比 reload 之后整站 502 再回滚体面得多。
门房哲学
反向代理是整个自托管体系里最没存在感的组件——没出事的时候你完全意识不到它。这恰恰是对它的最高评价。Caddy 把「HTTPS、续期、转发」这三件事做成了默认值,让我可以把注意力留给真正有意思的东西:跑在后面的那些服务本身。
据说 Nginx 性能更强。等我的博客日流量能和 Nginx 掰手腕的那天,我再考虑这个问题。
最后更新:30 Aug 2026
