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/
作者
wsafight
发布于
2025-11-14
许可协议
CC BY-NC-SA 4.0