为全球中文用户,精选值得用的数字资源独立编辑 · 透明推荐
RANGKA JOURNAL · 2026.10.28

黑五买了 VPS 先别急着装面板:Caddy vs Nginx 反向代理怎么选

让卡优选编辑 · 依据公开资料整理

黑五买了 VPS 先别急着装面板:Caddy vs Nginx 反向代理怎么选(AI 概念图)

黑五、双十一前后是买 VPS 最多的日子。服务器到手、系统装好,接下来最先遇到的问题往往不是“跑什么应用”,而是“怎么让域名安全地指向它”。这一步就叫反向代理:访问者先到反向代理,再由它把请求转发给本机上真正跑应用的端口,比如 3000、8000 或者 8080。对外只暴露 80 和 443 端口,应用本身不用直接暴露在公网上。

新手最常纠结的两个选择是 Caddy 和 Nginx。它们都能做这件事,但设计哲学完全不同:Caddy 追求“写得少、自动办证书”,Nginx 追求“什么都能配、控制得细”。这篇文章不争谁更好,只讲清楚各自适合谁、配置长什么样、以及各自最容易踩的坑。

先说结论:按你的情况对号入座

如果你只想尽快把一两个网站跑起来、不想研究证书,选 Caddy。它的默认行为就是自动申请和续期 HTTPS 证书,配置文件通常只有几行。

如果你要跑多个站点、做复杂的路径转发、缓存、限流,或者团队已经有一套现成的 Nginx 配置和运维习惯,选 Nginx。它的资料最多、模块最全,出了问题也最容易搜到现成答案。

一张表看清两者的区别

对比项 Caddy Nginx
HTTPS 证书 默认自动申请、自动续期,域名解析正确就能用 需要自己装 Certbot 或手动配置证书并处理续期
配置文件长度 一个站点通常两三行 一个站点通常十几到几十行
配置风格 Caddyfile,接近自然语言 server 和 location 块,结构严谨但啰嗦
复杂场景 常见场景够用,非常规需求要查插件或文档 路径改写、缓存、限流、负载均衡都是一线能力
学习资料 官方文档清晰,但中文社区案例相对少 中文教程、现成配置、排错文章非常多
适合人群 个人站长、想省事的开发者 多站点、团队协作、已有运维规范的场景

动手之前:两边都必须先做好的 3 件事

不管选哪一个,下面三件事没做对,都会表现为“打不开”或者“证书报错”,而且跟反向代理本身无关。

第一,域名的 A 记录要指向 VPS 的公网 IP,并且已经生效。可以用 ping 你的域名 或者在线 DNS 查询工具核对,解析没生效之前不要急着排错证书。

第二,服务器防火墙要放行 80 和 443 端口。云厂商的安全组和服务器内的防火墙是两层,都要检查,只放一层照样不通。

第三,应用本身要先在本机跑起来,并且确认监听的是本地端口。先用 curl http://127.0.0.1:3000 在本机测通,再去配反向代理,这样出问题时能立刻分清是应用没跑起来,还是代理没配对。这里的 3000 只是举例,换成你应用实际的端口即可。

方案一:Caddy,几行配置就上线

按官方安装文档装好 Caddy 后,核心就是一个 Caddyfile。假设你的域名是 example.com,应用跑在 3000 端口,配置可以简单到这样:

example.com {
    reverse_proxy 127.0.0.1:3000
}

把 example.com 换成你自己的域名,保存后校验并重载配置:

sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

第一次访问时,Caddy 会自动向证书机构申请证书并开启 HTTPS,你不需要再跑一遍申请证书的命令,也不需要写定时任务去续期。想同时跑多个域名,就在同一个文件里再加一段同样的块,每个域名一段。

WebSocket 和真实访客 IP 这类需求,Caddy 的 reverse_proxy 默认已处理常见转发头,多数场景不用额外配置。

方案二:Nginx,手写配置但控制得细

Nginx 的思路是先写一个 server 块,监听 80 端口,把请求转发给应用。假设域名同样是 example.com,应用同样在 3000 端口,配置大体是这样:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

把这个文件放到 Nginx 的站点配置目录,检查语法并重载:

sudo nginx -t
sudo systemctl reload nginx

HTTP 通了之后再上 HTTPS。最常用的办法是装 Certbot 并用它的 Nginx 插件:

sudo certbot --nginx -d example.com

Certbot 会自动改写配置、申请证书,并帮你设置续期任务。续期是否真的生效,值得单独验证一次,不要等到证书过期、网站打不开才发现续期任务没跑起来。

Nginx 的优势在写细之后才显现:/api/ 转后端、其余交给前端静态文件,可以用两个 location 块分别处理;上传大小、缓存、限流也有现成指令和大量案例。

6 个常见坑,两个方案都会遇到

第一,两个反向代理不要同时抢 80 和 443 端口。一台服务器上同一时间只能有一个程序监听同一个端口,Caddy 和 Nginx 同时跑,第二个启动的会直接报错。先停掉不用的那一个,再启动要用的。

第二,proxy_pass 末尾的斜杠会改变转发路径,改路径规则时要对照着测,不要凭感觉加斜杠。

第三,WebSocket 连不上时,先查 Upgrade 相关转发头有没有配齐。普通 HTTP 能通不代表长连接能通,聊天、实时通知这类应用尤其容易在这里卡住。

第四,上传大文件失败时,先看反向代理的请求体大小限制,而不是先怀疑应用。Nginx 默认限制比较小,需要按需调大;Caddy 也有对应的处理方式,具体数值以官方文档为准。

第五,证书申请失败时,先查域名解析和 80 端口通不通。证书机构要通过 HTTP 验证你确实控制这个域名,解析没生效或者 80 端口被墙挡住,证书就不可能发下来。

第六,不要把管理端口和管理后台直接暴露到公网。Caddy 的管理接口默认只监听本地,保持默认就好;应用后台先用密码或 IP 限制挡一层。

怎么选:一句话决策

个人博客、单页工具、两三个小服务,选 Caddy,省下的时间拿去写内容、做产品更划算。多站点、复杂转发、团队已有 Nginx 规范,或者你明确知道后面要上缓存和限流,选 Nginx,一次配好、长期受益。

已经用其中一个跑起来了,就没必要为了追新而迁移。反向代理是基础设施,稳定比时髦重要;真要迁移时,先在新配置上跑通、再切域名解析,留好回滚的余地。

FAQ

问:买了面板还需要学 Caddy 或 Nginx 吗?
面板能省配置,但出问题或要做面板不支持的规则时,还是得看懂底层配置。

问:Caddy 和 Nginx 能装在同一台服务器上吗?
可以装,但不能同时监听同一个端口。常见做法是只用一个对外服务,另一个停掉;或者让它们监听不同端口、只把其中一个暴露给公网。

问:静态网站还需要反向代理吗?
不一定。纯静态站可以直接用对象存储加 CDN,或者直接用 Nginx 提供静态文件;反向代理的价值主要在“域名后面是动态应用、多个服务共用一个域名”的时候。

问:证书续期失败最常见的原因是什么?
域名解析变了、80 端口被关了、或者续期任务根本没跑起来。先核对这三项,再去看证书工具的日志。

问:以后想从 Caddy 换到 Nginx,麻烦吗?
不麻烦,核心就三样:域名、应用端口、特殊转发规则,逐项测通再切换,旧配置先留着。

参考资料

📢 订阅让卡优选 Telegram 频道,第一时间获取 VPS 优惠、免费资源与注册福利推送。

资料核查:2026年10月28日。本文根据公开资料独立整理撰写;封面为 AI 生成的概念插画。

内容仅供信息参考,具体条件以官方最新说明为准。编辑与商业说明 →