Caddy:安装、使用和配置指南
Caddy 是一个用 Go 语言编写的现代化开源 Web 服务器,以其自动 HTTPS 功能著称——它能自动获取和续期 Let’s Encrypt 证书,无需手动配置。Caddy 采用简洁的 Caddyfile 配置格式,默认启用 HTTP/2,并内置了反向代理、负载均衡、静态文件服务、日志管理等功能,非常适合作为微服务网关或静态站点托管服务器。
一、部署Caddy(Ubuntu/Debian)
参考官方安装文档:Install — Caddy Documentation
1.安装
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curlcurl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpgcurl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.listsudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpgsudo chmod o+r /etc/apt/sources.list.d/caddy-stable.listsudo apt updatesudo apt install caddy
2.验证版本
caddy -v#返回版本号:v2.11.3 h1:/vFbdjcs2DtzcWTIxHybf5R5TspYFFThlZffChyBFHg=
二、使用Caddy
1.静态网站
(1)新建网站目录+测试页面
mkdir -p /www/webecho "<h1>Hello Caddy</h1>" > /www/web/index.html
(2)写配置Caddyfile
vim /etc/caddy/Caddyfile(3)内容改成以下配置
:80 {root * /www/web #指定网站文件放在 /www/webfile_server browse #browse 允许浏览目录encode gzip zstd #开启网页压缩,加速访问}
(4)重载配置
caddy reload --config /etc/caddy/Caddyfile(5)访问网页
浏览器中访问 http://你的服务器IP/ ,成功打开测试页面

2.反向代理
我们利用反向代理,把/api/路径请求转发到8090端口(用docker部署的nginx)
(1)修改配置文件/etc/caddy/Caddyfile
:80 {root * /www/webfile_server browseencode gzip zstd@api path /api /api/*handle @api {uri strip_prefix /apireverse_proxy localhost:8090}}
(2)重载配置
caddy reload --config /etc/caddy/Caddyfile(3)浏览器访问
浏览器访问 http://你的服务器IP/api/ ,成功通过反向代理访问到了NGINX欢迎页面
3.域名 + 自动 HTTPS
前提条件:
域名已经解析到 Caddy 服务器IP
安全组放行 80、443 端口
(1)修改配置
修改配置文件/etc/caddy/Caddyfile,增加域名配置与邮箱
caddy.XXXX.com { #填你的域名tls XXXXX@XXXX.com #填写邮箱root * /www/webfile_server browseencode gzip zstd@api path /api /api/*handle @api {uri strip_prefix /apireverse_proxy localhost:8090}}# http 跳转 https:80 {redir https://{host}{uri} permanent}
(2)重载配置
caddy reload --config /etc/caddy/Caddyfile(3)域名访问
浏览器访问 [你的域名] 可以看到已经有https证书!

三、进阶实用配置
1.隐藏服务器标识、开启 HSTS 强制 HTTPS
在 root * /www/web 下面添加:
# 隐藏 Caddy 版本,防止被扫描攻击header -Server# 浏览器强制HTTPS,一年有效期,子域名也生效header Strict-Transport-Security "max-age=31536000; includeSubDomains"# 禁止iframe嵌套,防钓鱼header X-Frame-Options DENY# 开启跨域安全header X-Content-Type-Options nosniff
2.自定义404/500错误页(可选)
# 错误页处理,网页路径/www/webhandle_errors {rewrite * /{http.error.status_code}.htmlfile_server}
3.开启访问日志
log {output file /var/log/caddy/caddy.log}

夜雨聆风