banner
约 1,200 字
4 分钟

Caddy 使用教程:自动 HTTPS 的省心反代

摘要

Caddy 是默认全自动 HTTPS 的现代 Web 服务器:申请、续期、重定向全自动,配置只要几行。本教程依据 Caddy 官方文档,介绍安装、Caddyfile 反代与静态站写法、多站点分发、localhost 本地证书,以及与 Nginx 的选型对比。

Caddy 使用教程:自动 HTTPS 的现代 Web 服务器

给网站配 HTTPS 要跑 certbot、要配证书路径、要操心续期?Caddy 说:不用。它默认全站自动 HTTPS,申请、部署、续期全自动,配置文件只有几行。本教程依据 Caddy 官方文档(caddyserver.com/docs)整理。

一、安装

bash
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudflare.com/...' >/dev/null 2>&1 || true
# 官方仓库安装(Debian/Ubuntu,见官网安装页复制最新命令)
sudo apt install caddy
systemctl status caddy

具体仓库命令以官网 Install 页为准(会随版本更新)。其他方式:scoop install caddy(Windows)、Docker 镜像 caddy:latest、或官网直接下载单二进制。

二、几行配置就有全站 HTTPS

Caddy 的配置文件叫 Caddyfile,默认位置 /etc/caddy/Caddyfile。反向代理一个应用:

纯文本
app.example.com {
    reverse_proxy 127.0.0.1:8080
}

就这么多。保存后执行:

bash
sudo systemctl reload caddy

Caddy 会自动向 Let's Encrypt 申请证书、启用 HTTPS、把 HTTP 重定向到 HTTPS,之后每 60 天自动续期。前提只有一个:域名的 A 记录已指向这台服务器,且 80/443 端口可访问。

三、常用场景模板

静态网站

纯文本
blog.example.com {
    root * /var/www/blog
    file_server
}

多个服务按域名分发

纯文本
a.example.com {
    reverse_proxy 127.0.0.1:3000
}

b.example.com {
    reverse_proxy 127.0.0.1:8080
}

开启 gzip/压缩(默认已开 brotli/zstd,无需配置)。

WebSocket:Caddy 反代默认支持,不用写升级头,零配置。

四、本地开发也能 HTTPS

纯文本
localhost {
    tls internal
}

Caddy 用内置 CA 给 localhost 签本地证书(需信任一次根证书),调试 Web API、PWA 时特别有用。

五、Caddy vs Nginx

维度

Caddy

Nginx

HTTPS

全自动

certbot + 手动配置

配置量

几行

几十行起步

性能

够用(个人项目无感)

极高

WebSocket

默认支持

需手动加头

生态

较新

最成熟

个人自托管项目选 Caddy:省心程度碾压。超大规模、极致性能调优场景再用 Nginx。

六、运维相关

bash
sudo systemctl reload caddy        # 改配置后重载
sudo journalctl -u caddy -f        # 看日志
sudo caddy validate --config /etc/caddy/Caddyfile   # 校验配置
sudo caddy fmt --overwrite /etc/caddy/Caddyfile     # 自动格式化

证书自动存放在 /var/lib/caddy/.local/share/caddy/,无需人工管理。

七、总结

需求

Caddyfile

反代应用

reverse_proxy 127.0.0.1:端口

静态站

root * 目录 + file_server

多站点

多个域名块

本地 HTTPS

localhost { tls internal }

一句话总结:把域名的 A 记录指向服务器,写两行配置,HTTPS 就自己长出来了。这就是 Caddy 的价值。

END