一、为什么选 Caddy?
相比 Nginx 复杂的配置语法、Apache 厚重的模块依赖,Caddy 从设计之初就围绕 “简单、安全、高效” 展开,以下是它最核心的 5 个优势:
1. 自动 HTTPS:零配置搞定证书,告别 “证书过期焦虑”
这是 Caddy 最亮眼的功能 ——默认开启 HTTPS,自动申请、续期 Let's Encrypt 证书,无需手动执行 certbot 命令,也不用配置证书路径、定时任务。无论是单域名、多域名还是泛域名,Caddy 都会自动完成验证(HTTP-01 或 DNS-01 挑战),甚至支持自定义证书机构,彻底解决 “HTTPS 配置门槛高” 的痛点。
反观 Nginx,需要手动申请证书、配置 ssl_certificate/ssl_certificate_key 字段,还得写定时任务续期,步骤繁琐且容易出错。
2. 配置语法极简:自然语言风格,上手成本极低
Caddy 的配置文件(Caddyfile)采用 “类自然语言” 语法,结构清晰,无需记忆复杂的指令。比如实现 “将 example.com 反代到 http://127.0.0.1:8080”,Caddyfile 只需 1 行代码,而 Nginx 需要至少 5-8 行配置(包括 server、location、proxy_pass 等块)。
即使是多站点、多规则的复杂场景,Caddyfile 的可读性也远超 Nginx,新手花 10 分钟就能理解核心语法。
3. 跨平台无缝兼容:Windows/macOS/Linux 全支持,部署零障碍
Caddy 是用 Go 语言开发的静态编译程序,无需依赖任何系统库(如 Nginx 依赖的 pcre、zlib),下载后直接运行。无论是本地 macOS 开发、Windows 测试,还是 Linux 服务器部署,都能使用相同的 Caddyfile 配置,无需修改适配,极大降低了跨环境部署的成本。
此外,Caddy 还支持 ARM 架构(如树莓派),适合边缘设备场景。
4. 内置丰富功能:无需额外装模块,满足 90% 场景
Caddy 内置了反向代理、静态文件服务、缓存、压缩、防盗链、WebSocket 代理等常用功能,无需像 Nginx 那样手动编译模块(如 ngx_http_proxy_module、ngx_http_gzip_module)。比如要开启 Gzip 压缩,只需在 Caddyfile 中加 1 行 encode gzip;要支持 WebSocket 反代,Caddy 会自动识别 Upgrade/Connection 头,无需额外配置。
对于需要扩展的场景,Caddy 也支持插件机制,且插件安装简单(编译时指定插件即可)。
5. 低资源占用:轻量高效,适合小服务器 / 容器
Caddy 二进制文件体积小(仅十几 MB),运行时内存占用低(通常几十 MB),相比 Nginx(虽也轻量,但配置复杂时易有冗余)更适合资源有限的场景,比如个人博客服务器、Docker 容器内的反代服务。
同时,Caddy 支持自动 reload 配置(修改 Caddyfile 后无需重启服务,执行 caddy reload 即可),减少服务中断时间。
二、Caddy 快速反代实战:3 步实现基础反代
接下来以 “将域名 example.com 反代到本地 http://127.0.0.1:3000 的服务” 为例
前置准备
- 1 台服务器(或本地电脑),已开放 80/443 端口(HTTPS 依赖这两个端口,Caddy 自动占用);
- 1 个已解析到服务器 IP 的域名(如
myapp.com); - 服务器已安装
curl(用于下载 Caddy)。
第一步:安装 Caddy
Caddy 提供官方一键安装脚本,执行以下命令即可完成安装(Linux 系统):
# 下载并安装 Caddy(官方脚本,安全可靠)
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/cfg/setup/bash.deb.sh' | sudo -E bash
# 安装 Caddy 软件包
sudo apt install caddy
# 验证安装:查看 Caddy 版本,出现版本号即安装成功
caddy version第二步:编写 Caddyfile 配置反代
Caddy 的核心配置文件是 Caddyfile,默认路径为 /etc/caddy/Caddyfile(Linux 系统),我们只需修改这个文件即可实现反代。
1. 打开 Caddyfile
/etc/caddy/Caddyfile #路径2. 写入反代配置
# 第一个站点:myapp.com -> 3000 端口
myapp.com {
reverse_proxy http://127.0.0.1:3000
encode gzip
}
# 第二个站点:blog.com -> 4000 端口
blog.com {
reverse_proxy http://127.0.0.1:4000
encode gzip
}第三步:启动 Caddy 并验证反代
1. 启动 Caddy 服务
# 启动 Caddy 并设置开机自启
sudo systemctl start caddy
sudo systemctl enable caddy
# 查看 Caddy 运行状态:出现 "active (running)" 即启动成功
sudo systemctl status caddy2. 验证反代效果
打开浏览器,输入 https://myapp.com(注意是 HTTPS),若能看到 http://127.0.0.1:3000 服务的页面,说明反代成功!
此时,Caddy 已自动完成:
- 为
myapp.com申请 Let's Encrypt 证书; - 将
https://myapp.com 的所有请求转发到http://127.0.0.1:3000; - 自动处理 HTTPS 握手、证书续期。
三、Alpine实现一行代码快速简单反代
安装Caddy+反代,一键完成
sudo sh -c "apk add --no-cache caddy libcap-utils && printf 'example.com {\n reverse_proxy 127.0.0.1:3002\n}\n' > /etc/caddy/Caddyfile && caddy_bin=\$(command -v caddy) && setcap cap_net_bind_service=+ep \"\$caddy_bin\" && pkill -x caddy 2>/dev/null || true; rc-service caddy restart && rc-update add caddy default"如需后续需要添加新的反代站点,可以输入
sudo sh -c "printf '\nexample.com {\n reverse_proxy http://127.0.0.1:5230\n}\n' >> /etc/caddy/Caddyfile && rc-service caddy reload || rc-service caddy restart"
四、Debian系统实现一行代码快速简单反代
sudo sh -c "apt update && apt install -y caddy && echo 'example.com { reverse_proxy 127.0.0.1:3000 }' > /etc/caddy/Caddyfile && systemctl restart caddy && systemctl enable caddy"