跳转到内容

Caddy服务器:现代化Web服务的极简解决方案

Caddy是一个由Go语言开发的开源Web服务器,于2015年首次发布。它以自动HTTPS、极简配置和现代化特性,成为越来越多开发者的选择。

核心特点

  • 自动HTTPS:内置Let’s Encrypt和ZeroSSL支持,自动获取和续期证书
  • 极简配置:Caddyfile语法简洁直观
  • 现代协议:原生支持HTTP/3、HTTP/2
  • 单一二进制:无依赖,部署简单
  • 零停机重载:配置更新无需重启

Caddy是2015年首个实现自动HTTPS的Web服务器。只需配置域名,即可自动完成证书申请、配置、续期和HTTP到HTTPS重定向。

example.com {
reverse_proxy localhost:3000
}

Caddyfile采用声明式语法,易读易写。配置静态网站只需几行:

myapp.com {
root * /var/www/html
file_server
encode gzip
}

Caddy 2.6+默认启用HTTP/3(QUIC),无需额外配置,提供更低延迟和更好的弱网性能。

  • 反向代理和负载均衡
  • 静态文件服务
  • 自动压缩(Gzip、Zstd)
  • WebSocket支持
  • 基本认证
  • 热重载配置(caddy reload
Terminal window
# 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
}
Terminal window
caddy start # 启动服务
caddy reload # 重载配置
caddy stop # 停止服务

实现相同的反向代理+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经验
  • 对性能有极致要求

快速部署HTTPS网站,无需手动管理证书:

myblog.com {
root * /var/www/myblog
file_server
encode gzip
}

本地HTTPS支持,方便测试PWA、OAuth等功能:

localhost {
reverse_proxy localhost:3000
tls internal # 使用内部CA
}

轻量级路由到不同后端服务:

api.example.com {
route /users/* {
reverse_proxy user-service:8001
}
route /orders/* {
reverse_proxy order-service:8002
}
}

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是值得尝试的现代化选择。