你是否曾为 Nginx 或 Apache 的复杂配置而头疼?是否曾为了配置一个 SSL 证书、处理 HTTPS 跳转而耗费数小时?如果你对这些问题感同身受,那么是时候了解一下 Caddy 了——一个为现代互联网而生的 Web 服务器。

Caddy 是一个用 Go 语言编写的开源 Web 服务器,它的设计哲学与传统服务器截然不同:默认安全、配置简单、自动高效。它不仅仅是一个工具,更是一种全新的运维体验。

为何选择 Caddy?核心优势一览

在众多 Web 服务器中,Caddy 凭借其独特的优势脱颖而出,尤其适合开发者、运维人员和技术爱好者。

  1. 全自动 HTTPS (Automatic HTTPS) 这是 Caddy 最具革命性的功能。你无需了解 Certbot、acme.sh 或手动申请证书的任何繁琐流程。只要在 Caddyfile 中提供一个域名,Caddy 就会:
    • 自动从 Let’s Encrypt 或 ZeroSSL 申请 SSL 证书。
    • 自动续签证书,让你一劳永逸。
    • 自动将所有 HTTP 请求重定向到 HTTPS。 这一切都是开箱即用的,无需任何额外配置。
  2. 极致简洁的 Caddyfile 配置 告别 Nginx 中层层嵌套、语法复杂的 .conf 文件。Caddy 的配置文件(Caddyfile)设计得极其人性化,易于读写。一个常见的 PHP 网站配置,在 Nginx 中可能需要几十行,而在 Caddy 中可能只需要几行。
  3. 默认即安全 (Secure by Default) Caddy 遵循“明智的默认值 (Sane Defaults)”原则。它默认启用最新的 TLS 1.3 协议,使用安全的加密套件,自动启用 HSTS 策略,并默认阻止对 .git 等隐藏文件的访问。你无需成为安全专家,就能获得一个高安全性的站点。
  4. 原生支持 HTTP/3 Caddy 原生支持最新的 HTTP/3 协议(基于 QUIC),可以显著减少延迟,提升移动网络和不稳定网络下的访问速度。
  5. Go 语言编写,单文件部署 Caddy 是一个编译好的、无任何依赖的二进制文件。部署它就像复制一个文件一样简单,非常适合 Docker、Kubernetes 等容器化环境。

通用且功能丰富的 Caddyfile 模板

为了让您快速上手,我准备了一份功能丰富的 Caddyfile 配置模板。它几乎涵盖了个人博客、企业官网、API 服务等场景所需的大部分功能,包括:安全头、性能优化、反向代理、日志轮转等。

您可以将此作为您项目的起点,按需修改。

`# ————————————————–

通用且功能丰富的 Caddyfile 模板

最后更新: 2025-06-25

————————————————–

全局配置块 (Global Options Block)

{ # 默认的日志格式 log { format console level INFO }

# 开启 OCSP Stapling 缓存,提升 TLS 握手性能
ocsp_stapling

}

————————————————–

站点一: yourdomain.com (主站点/静态网站/PHP网站)

————————————————–

yourdomain.com, www.yourdomain.com {

# --- 基础配置 ---
# 网站根目录
root * /srv/www.yourdomain.com/public
# 自动将 www.yourdomain.com 重定向到 yourdomain.com
@www host www.yourdomain.com
redir @www https://yourdomain.com{uri}

# --- 性能优化 ---
# 启用 Gzip 和 Zstd 压缩
encode zstd gzip

# 浏览器缓存控制 (Cache-Control)
@multimedia path *.jpg *.jpeg *.png *.gif *.svg *.webp *.mp4
header @multimedia Cache-Control "public, max-age=2592000, immutable"
@static path *.css *.js
header @static Cache-Control "public, max-age=604800"

# --- PHP-FPM 配置 (如果是 PHP 网站,取消此行注释) ---
# php_fastcgi unix//run/php/php8.3-fpm.sock

# --- 文件服务 ---
file_server {
    hide .env .git .user.ini
}

# --- 安全增强 ---
header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    X-Frame-Options "SAMEORIGIN"
    X-XSS-Protection "1; mode=block"
    X-Content-Type-Options "nosniff"
    # Content-Security-Policy "default-src 'self';" # 根据需要配置
    -Server
}

# --- 速率限制 (防止暴力破解) ---
@login {
    path /login
    method POST
}
rate_limit @login {
    window 10s
    burst  5
}

# --- 自定义错误页面 ---
handle_errors {
    rewrite * /error-pages/{http.error.status_code}.html
    file_server
}

# --- 日志记录 ---
log {
    output file /var/log/caddy/yourdomain.com.access.log {
        roll_size     10mb
        roll_keep     5
        roll_keep_for 720h
    }
}

}

————————————————–

站点二: api.yourdomain.com (反向代理)

————————————————–

api.yourdomain.com { reverse_proxy localhost:8081 { lb_policy least_conn health_uri /health health_interval 10s } }

————————————————–

站点三: old-domain.com (域名重定向)

————————————————–

old-domain.com, www.old-domain.com { redir https://yourdomain.com{uri} permanent }`

如何开始使用?

  1. 安装 Caddy: 访问 Caddy 的官方下载页面,根据您的操作系统选择最简单的方式安装。

  2. 创建 Caddyfile: 将上面的模板保存为一个名为 Caddyfile 的纯文本文件,并根据您的需求进行修改。

  3. 运行 Caddy(配置在/etc/Caddy)

    Bash

    1
    
    caddy run
    

    如果您想让它在后台持续运行,可以使用:

    Bash

    1
    
    caddy start
    

Caddy 会立即开始工作,为您的域名提供服务并自动处理 HTTPS。


Caddy 的管理命令主要通过其命令行界面(CLI)进行操作,涵盖了从启动到停止、配置验证以及版本查看等多个方面。

Caddy 常用管理命令概览

  • 启动 Caddy:
    • caddy run: 在前台运行,常用于开发和调试。
    • caddy start: 在后台作为守护进程启动,适用于生产环境。
    • caddy reload: 无需停机即可重新加载配置文件,使更改生效。
  • 停止 Caddy:
    • caddy stop: 停止当前运行的 Caddy 进程。
  • 配置管理:
    • caddy validate --config /path/to/Caddyfile: 检查配置文件的语法是否正确。
    • caddy adapt --config /path/to/Caddyfile --pretty: 将 Caddyfile 转换为易读的 JSON 格式配置。
  • 信息查询:
    • caddy version: 显示 Caddy 的版本信息。
    • caddy help: 获取整体帮助信息。
    • caddy help <command>: 获取特定命令的帮助信息。
  • 服务管理 (Systemd): 在生产环境中,通常会结合 Systemd 等服务管理工具来控制 Caddy 服务。常用命令包括:
    • sudo systemctl start caddy: 启动服务。
    • sudo systemctl stop caddy: 停止服务。
    • sudo systemctl restart caddy: 重启服务。
    • sudo systemctl reload caddy: 重新加载配置。
    • sudo systemctl enable caddy: 设置开机自启动。
    • sudo systemctl status caddy: 查看服务状态。

掌握这些命令能让你高效地管理 Caddy 服务器,无论是用于开发测试还是在生产环境中稳定运行。

总结

Caddy 以其颠覆性的设计理念,正在改变我们对 Web 服务器的认知。它将曾经繁琐的配置工作,变成了一种简单而愉悦的体验。无论您是想托管一个个人博客,还是部署复杂的微服务架构,Caddy 都是一个值得您认真考虑的、强大而现代的选择。

给它一个机会,我相信你会爱上它的。