Debian 13(trixie) 来写一套从 0 到可用、并且后续很方便加 反向代理 / 自动 HTTPS / 多站点 的 Caddy 部署流程。(Debian 官方当前 stable 为 13,trixie,且 13.3 更新于 2026-01-10。)(Debian)


0) 上线前准备清单(很关键)

  1. 域名 DNS:确保 A/AAAA 记录指向这台 Debian 13 服务器 IP。(Caddy Web Server)
  2. 开放端口:对公网开放 80/443(云安全组 + 本机防火墙)。(Caddy Web Server)
  3. 别让其它服务抢占 80/443:如果已有 Nginx/Apache 占用,需要停掉或改端口。
  4. 如果你打算用“本机/内网域名(localhost、内网主机名、IP)”走 HTTPS,Caddy 会用本地 CA 签证书,客户端要信任它(后面有 caddy trust)。(Caddy Web Server)

1) 安装 Caddy(官方 APT 源,推荐)

Caddy 官方文档给了 Debian/Ubuntu/Raspbian 的稳定源安装方式(带 systemd 服务)。(Caddy Web Server)

sudo apt update

# 按官方文档安装依赖与仓库
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
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
chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
chmod o+r /etc/apt/sources.list.d/caddy-stable.list

sudo apt update
sudo apt install caddy

安装这个包会自动以 systemd 服务 caddy 方式启动运行。(Caddy Web Server)

检查状态:

systemctl status caddy --no-pager
caddy version

2) 了解配置入口与常用运维命令(之后全靠这套)

  • 默认 Caddyfile 路径:/etc/caddy/Caddyfile,直接编辑它即可。(Caddy Web Server)
  • 修改后推荐用 reload(不停机):
sudo systemctl reload caddy

(Caddy Web Server)

  • 看完整日志(systemd/journal):
journalctl -u caddy --no-pager | less +G

(Caddy Web Server)

  • 配置变更前先校验(避免一 reload 就挂):
sudo caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile

caddy validate 会加载并“预置”配置但不真正启动,用来提前暴露配置错误。(Caddy Web Server)

  • 顺手格式化 Caddyfile(可选但很爽):
sudo caddy fmt --overwrite /etc/caddy/Caddyfile

(Caddy Web Server)


3) 部署一个最小静态站点(验证 80/443 + 自动 HTTPS)

Caddy 官方建议静态文件放 /var/www/html/srv,并确保 caddy 用户可读。(Caddy Web Server)

  1. 放个页面:
sudo mkdir -p /srv/example
echo "hello from caddy on debian 13" | sudo tee /srv/example/index.html
sudo chown -R caddy:caddy /srv/example
  1. 编辑 /etc/caddy/Caddyfile
{
	# 建议填邮箱,证书相关通知更规范(可选)
	email you@example.com
}

example.com {
	root * /srv/example
	file_server
}
  1. 校验 + 重载:
sudo caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
sudo systemctl reload caddy
  1. 验证:
curl -I http://example.com
curl -I https://example.com

只要你的域名在配置里、DNS 指向正确、80/443 对外可达,Caddy 会自动申请/续期证书,并把 80 重定向到 443。(Caddy Web Server)


4) 反向代理(最常见:把域名转到本机应用)

最简:把所有请求转发到本机 9005:(Caddy Web Server)

example.com {
	reverse_proxy localhost:9005
}

重载即可:

sudo caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
sudo systemctl reload caddy

4.1 多后端 / 负载均衡

example.com {
	reverse_proxy node1:80 node2:80 node3:80
}

(Caddy Web Server)

4.2 只代理 /api,其它走别的服务(或静态站)

example.com {
	handle_path /api/* {
		reverse_proxy localhost:9000
	}

	# 其它请求
	handle {
		reverse_proxy localhost:3000
	}
}

4.3 子路径代理(官方示例用 handle_path

example.com {
	handle_path /prefix/* {
		reverse_proxy localhost:9000
	}
}

(Caddy Web Server)


5) HTTPS “怎么开 / 怎么控”——Caddy 的关键优势

5.1 公网域名:默认就是自动 HTTPS

  • 公网域名会走 ACME(例如 Let’s Encrypt / ZeroSSL),自动签发与续期。(Caddy Web Server)
  • 自动 HTTP→HTTPS 重定向(80→443)默认开启。(Caddy Web Server)

**注意:**如果你在站点地址前显式写了 http://example.com,会阻止自动 HTTPS。(Caddy Web Server)

5.2 本机/内网:Local HTTPS(自签,但可被信任)

Caddy 会为 localhost/127.0.0.1/内网主机名/IP 这类站点自动用本地 CA 签证书。(Caddy Web Server)
但当它以 systemd 服务运行时,通常需要你手动把根证书装进系统信任(一次性操作):

sudo caddy trust

(Caddy Web Server)

5.3 通配符证书(*.example.com):一般需要 DNS Challenge

Caddy 支持 ACME DNS challenge,但需要配置 DNS 提供商 API(通常还要对应的 DNS 插件)。(Caddy Web Server)
如果你确实要通配符/纯 DNS 验证,这块我建议你按“你用的 DNS 提供商(Cloudflare/Route53/阿里云等)”来做专门配置。


6) 多站点/多域名的组织方式(方便扩展)

一个 Caddyfile 里写多个站点块就行:

{
	email you@example.com
}

a.example.com {
	reverse_proxy localhost:3000
}

b.example.com {
	reverse_proxy localhost:4000
}

example.com {
	root * /srv/example
	file_server
}

7) 日常升级与维护

  • Caddy 通过 APT 升级即可:
sudo apt update
sudo apt upgrade