896 字
4 分钟
Caddy服务器:现代化Web服务的极简解决方案
Caddy服务器:现代化Web服务的极简解决方案
简介
Caddy是一个由Go语言开发的开源Web服务器,于2015年首次发布。它以自动HTTPS、极简配置和现代化特性,成为越来越多开发者的选择。
核心特点:
- 自动HTTPS:内置Let’s Encrypt和ZeroSSL支持,自动获取和续期证书
- 极简配置:Caddyfile语法简洁直观
- 现代协议:原生支持HTTP/3、HTTP/2
- 单一二进制:无依赖,部署简单
- 零停机重载:配置更新无需重启
核心特性
自动HTTPS
Caddy是2015年首个实现自动HTTPS的Web服务器。只需配置域名,即可自动完成证书申请、配置、续期和HTTP到HTTPS重定向。
example.com {
reverse_proxy localhost:3000
}极简配置语法
Caddyfile采用声明式语法,易读易写。配置静态网站只需几行:
myapp.com {
root * /var/www/html
file_server
encode gzip
}HTTP/3原生支持
Caddy 2.6+默认启用HTTP/3(QUIC),无需额外配置,提供更低延迟和更好的弱网性能。
内置功能
- 反向代理和负载均衡
- 静态文件服务
- 自动压缩(Gzip、Zstd)
- WebSocket支持
- 基本认证
- 热重载配置(
caddy reload)
快速开始
安装
# Ubuntu/Debian
sudo apt install caddy
# macOS
brew install caddy
# 或下载二进制文件
https://caddyserver.com/download常用配置示例
静态网站托管
example.com {
root * /var/www/html
file_server
}反向代理
api.example.com {
reverse_proxy localhost:8080
}负载均衡
app.example.com {
reverse_proxy localhost:8081 localhost:8082 localhost:8083
}基本认证(使用caddy hash-password生成密码)
admin.example.com {
basicauth {
alice $2a$14$...
}
reverse_proxy localhost:8080
}常用命令
caddy start # 启动服务
caddy reload # 重载配置
caddy stop # 停止服务Caddy vs Nginx
配置对比
实现相同的反向代理+HTTPS功能:
Nginx配置(需手动管理证书):
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
}
}Caddy配置(自动HTTPS):
example.com {
reverse_proxy localhost:3000
}选择建议
选择Caddy:
- 快速部署,自动HTTPS
- 中小型应用(<10k并发)
- 容器化环境
- 开发/测试环境
选择Nginx:
- 超大规模高并发(>100k连接)
- 需要复杂的自定义模块
- 团队已有Nginx经验
- 对性能有极致要求
典型使用场景
1. 个人网站/博客
快速部署HTTPS网站,无需手动管理证书:
myblog.com {
root * /var/www/myblog
file_server
encode gzip
}2. 开发环境
本地HTTPS支持,方便测试PWA、OAuth等功能:
localhost {
reverse_proxy localhost:3000
tls internal # 使用内部CA
}3. 微服务API网关
轻量级路由到不同后端服务:
api.example.com {
route /users/* {
reverse_proxy user-service:8001
}
route /orders/* {
reverse_proxy order-service:8002
}
}4. 容器化部署
Docker部署简单,镜像小(~15MB):
FROM caddy:2-alpine
COPY Caddyfile /etc/caddy/Caddyfile
COPY ./site /srv最佳实践
生产环境配置
使用环境变量
{$DOMAIN} {
reverse_proxy {$BACKEND_HOST}:{$BACKEND_PORT}
}启用日志
example.com {
log {
output file /var/log/caddy/access.log
}
reverse_proxy localhost:3000
}安全头部
example.com {
header {
Strict-Transport-Security "max-age=31536000"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
}
reverse_proxy localhost:3000
}总结
Caddy通过自动HTTPS、极简配置和现代协议支持,为中小型应用和快速部署场景提供了优秀的解决方案。
核心优势:
- 自动HTTPS,零配置证书管理
- 极简配置语法,学习成本低
- HTTP/3原生支持
- 单一二进制,部署简单
适合场景:个人项目、开发环境、中小型应用、容器化部署
不适合场景:超大规模高并发、复杂自定义需求
如果你正在启动新项目或需要快速部署HTTPS服务,Caddy是值得尝试的现代化选择。
参考资源
Caddy服务器:现代化Web服务的极简解决方案
https://wsafight.github.io/personBlog/posts/caddy/