Caddy Web 服务器自动 HTTPS

FreeGuideOnline 最新 2026-07-11

bash sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy


### macOS(使用 Homebrew)

```bash
brew install caddy

验证安装

caddy version

第二步:你的第一个自动 HTTPS 站点

Caddy 的配置核心是 Caddyfile。创建一个最简单的静态站点,感受自动 HTTPS 的魔力。

1. 创建网站目录和首页

sudo mkdir -p /var/www/example.com
echo '<h1>Hello, Caddy!</h1>' | sudo tee /var/www/example.com/index.html

2. 编辑 Caddyfile

默认情况下,Caddyfile 位于 /etc/caddy/Caddyfile。写入以下内容:

example.com {
    root * /var/www/example.com
    file_server
}

替换 example.com 为你实际拥有的域名,并确保该域名的 DNS 已指向本服务器 IP。

3. 启动 Caddy

sudo systemctl restart caddy

Caddy 启动后,会自动请求证书并重载 HTTPS。访问 https://example.com,你会看到安全连接图标和网页内容。


第三步:深入理解 Caddyfile 的 HTTPS 控制

虽然自动 HTTPS 完全默认启用,但你仍可以对其行为进行精细调整。

强制重定向 HTTP 到 HTTPS

Caddy 会自动为所有站点启用 HTTP → HTTPS 重定向,你无需添加任何指令。如果你希望禁用该行为:

example.com {
    redir / / 302   # 这不会生效,因为自动 HTTPS 先接管
}

实际上,要取消自动重定向,需使用全局选项:

{
    auto_https off
}
example.com {
    # 现在你可以完全手动控制
}

使用特定 CA 或自定义证书

修改全局选项可切换默认 CA 为 ZeroSSL:

{
    acme_ca https://acme.zerossl.com/v2/DV90
    email your@email.com   # ZeroSSL 要求提供邮箱
}

若要使用你自己的证书,按如下配置:

example.com {
    tls /path/to/cert.pem /path/to/key.pem
    root * /var/www/example.com
    file_server
}

为内网或本地域名关闭 HTTPS

当你需要开发环境或没有公网域名时,可局部禁用自动 HTTPS:

localhost {
    auto_https off
}

或者只想监听 HTTP 而不重定向:

http://example.com {
    # 将仅使用 HTTP
}

第四步:反向代理场景下的自动 HTTPS

Caddy 作为反向代理时,自动 HTTPS 同样省心。以下示例将所有流量代理到后端服务 http://localhost:3000

api.example.com {
    reverse_proxy localhost:3000
}

只需这一行,Caddy 便会处理证书、HTTP/2 和 HTTPS 强制跳转。你还可以添加头部、日志等:

api.example.com {
    reverse_proxy localhost:3000 {
        header_up Host {host}
        header_up X-Real-IP {remote_host}
    }
    log {
        output file /var/log/caddy/api.log
    }
}

第五步:高级—通配符证书与 DNS 挑战

当你想使用通配符证书(*.example.com)或无法使用 HTTP/TLS 挑战时,必须采用 DNS 挑战。Caddy 通过官方模块支持几十种 DNS 提供商。

安装 DNS 挑战模块

在安装 Caddy 时,可一次性下载包含所需 DNS 插件的定制版本。例如,使用 Cloudflare 提供商:

# 下载包含 cloudflare 模块的 Caddy 版本
caddy add-package github.com/caddy-dns/cloudflare

或者直接使用 xcaddy 构建自定义版本:

xcaddy build --with github.com/caddy-dns/cloudflare

配置 Caddyfile 使用 DNS 挑战

首先设置环境变量以存储 API 凭证(不同提供商需要不同变量):

export CLOUDFLARE_API_TOKEN=your_token_here

然后在 Caddyfile 全局选项中启用 DNS 挑战:

{
    acme_dns cloudflare
}

*.example.com, example.com {
    tls {
        dns cloudflare
    }
    root * /var/www/example.com
    file_server
}

这样 Caddy 就能为根域名和所有子域名申请一个通配符证书,所有步骤全自动。


常见问题与故障排除

证书获取失败:“无法验证域名”

  • 检查域名是否正确解析到服务器公网 IP。
  • 确保防火墙开放 80 和 443 端口。
  • 如果使用 HTTP 挑战,80 端口必须可被外部访问。

服务器重启后 Caddy 没有自动启动

设置开机自启:

sudo systemctl enable caddy
sudo systemctl start caddy

如何查看证书详细信息?

使用 caddy 命令行工具:

sudo caddy list-certificates