一句话目标:让服务器上的博客(或任意本机服务)通过 域名 + HTTPS 对外提供访问。
适用环境:Ubuntu / Debian 服务器(实测于 Ubuntu 26.04 阿里云 ECS)
本手册实例:博客 dblog-lite 运行在本机8080端口,域名www.duobaobox.cn
更新时间:2026-10-15
📌 开始之前:流程总览(全程约 10 分钟)
① 检查准备 → ② 安装 Caddy → ③ 写配置 → ④ 收紧博客监听 → ⑤ 启动 Caddy → ⑥ 验证
本手册中的域名、端口请按你的实际情况替换:
www.duobaobox.cn→ 你的域名;8080→ 你服务的端口。另外:如果你用官方安装器全新安装 dblog 时带了
--domain www.duobaobox.cn,
下面 ②~⑤ 步会自动完成。本手册适合:① 手动部署场景;② 已装好但域名没配的"补配"场景。
一、先搞懂 3 个概念(1 分钟,看不懂也不影响操作)
名词 | 一句话解释 |
|---|---|
反向代理 | 访客访问域名(443 端口)→ Caddy 接住 → 转交给本机的博客(8080 端口)。访客只看到域名,看不到背后是谁 |
HTTPS 证书 | 让浏览器出现 🔒 小锁头的加密凭证。Caddy 会自动申请、自动续期,你完全不用管 |
127.0.0.1 | "只允许本机访问"的地址。博客收紧到它之后,公网只能通过 Caddy 访问,更安全 |
需要理解的结构:
访客浏览器
│ https://www.duobaobox.cn(443 端口)
▼
┌─────────┐ ┌──────────────────────────┐
│ Caddy │ ───────▶ │ 博客 blog(127.0.0.1:8080)│
└─────────┘ └──────────────────────────┘
二、动手前的检查清单(2 分钟)
# | 检查项 | 怎么检查 | 期望结果 |
|---|---|---|---|
1 | 你有服务器 sudo 权限 |
| 不报错 |
2 | 域名已解析到本服务器 |
| 显示你的公网 IP |
3 | 云安全组已放行 80、443 | 云控制台 → 安全组 | 有 80/443 放行规则 |
4 | 博客正在运行 |
|
|
❌ 第 2 项不对 → 先去域名服务商把解析改到服务器 IP,等 10 分钟再继续。
❌ 第 3 项没有 → 去云控制台加规则,否则后面证书会申请失败。
三、安装 Caddy(1 分钟)
sudo apt update
sudo apt install -y caddy
caddy version
✅ 看到版本号(如 v2.6.2)即成功。
💡 如果提示 E: Unable to locate package caddy(仓库里没有这个包),先添加 Caddy 官方源再装:
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
sudo apt update && sudo apt install -y caddy
四、写配置(2 分钟)
配置结构(dblog 安装器约定:"一个站点一个文件",以后加新站点互不影响):
/etc/caddy/Caddyfile ← 总入口(只有一行 import)
/etc/caddy/dblog/blog.caddy ← 博客站点配置(真正的规则在这里)
第 1 小步:写站点配置
直接复制粘贴下面一整段到服务器终端执行(会自动创建好文件):
sudo mkdir -p /etc/caddy/dblog
sudo tee /etc/caddy/dblog/blog.caddy > /dev/null <<'EOF'
www.duobaobox.cn {
encode zstd gzip
reverse_proxy 127.0.0.1:8080
}
duobaobox.cn {
redir https://www.duobaobox.cn{uri} permanent
}
EOF
逐行解释:
配置行 | 作用 |
|---|---|
| 为这个域名提供 HTTPS 服务 |
| 自动压缩网页内容、省流量(不想压缩可删掉这行) |
| 把访问转交给本机 8080 端口的博客 |
| 裸域名(不带 www)自动跳转到 www 版本 |
| 保留原路径 / 永久跳转(301) |
第 2 小步:写总入口 Caddyfile
sudo tee /etc/caddy/Caddyfile > /dev/null <<'EOF'
# Caddyfile
# 站点配置经 import 管理:/etc/caddy/dblog/*.caddy
import /etc/caddy/dblog/*.caddy
EOF
五、把博客收紧到本机(1 分钟,dblog 专属)
目的:博客不再对公网暴露 8080,只有 Caddy 能访问它。
(全新安装带--domain的场景,这步安装器已自动做过,直接跳过)
第 1 小步:先看当前参数长什么样:
grep ExecStart /etc/systemd/system/blog.service
显示
--addr 0.0.0.0:8080(没有--trusted-proxy)→ 执行下面的修改命令已显示
--addr 127.0.0.1:8080 --trusted-proxy 127.0.0.1→ 已经是好的,跳过
第 2 小步:修改 + 重启 + 自检:
sudo sed -i 's|--addr 0.0.0.0:8080|--addr 127.0.0.1:8080 --trusted-proxy 127.0.0.1|' /etc/systemd/system/blog.service
sudo systemctl daemon-reload
sudo systemctl restart blog
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/health
✅ 期望输出:200(博客正常运行)
六、启动 Caddy(1 分钟)
# 1) 校验配置(写错了这里会明确报错,先修好再做下一步)
sudo caddy validate --config /etc/caddy/Caddyfile
# 2) 开机自启 + 启动
sudo systemctl enable caddy
sudo systemctl restart caddy
# 3) 确认状态
systemctl is-active caddy # 期望:active
sudo ss -tlnp | grep -E ':(80|443) ' # 期望:caddy 正在监听 80 和 443
七、验证(1 分钟,3 个层次)
# ① 服务器上自测(绕过 DNS,直接测本机)
curl -sk --resolve www.duobaobox.cn:443:127.0.0.1 -o /dev/null -w '%{http_code}\n' https://www.duobaobox.cn/
# 期望:200(第一次可能要等十几秒,Caddy 正在申请证书;没拿到就等 10 秒重试一次)
# ② 跳转链测试
curl -sI http://duobaobox.cn/ | head -3 # 期望:308 Permanent Redirect → https://duobaobox.cn/
curl -sI https://duobaobox.cn/ | head -3 # 期望:301 → https://www.duobaobox.cn/
③ 用自己的电脑浏览器打开 https://www.duobaobox.cn/ —— 看到博客页面 + 地址栏 🔒 小锁头,就是成功了。
想看证书有效期(可选):
echo | openssl s_client -connect www.duobaobox.cn:443 -servername www.duobaobox.cn 2>/dev/null | openssl x509 -noout -subject -dates看到
notAfter是未来日期即可。证书会全自动续期,不需要你做任何事。
八、出问题怎么办(先记住一条万能命令)
sudo journalctl -u caddy --no-pager | tail -50 # 看 Caddy 最近日志
现象 | 最可能的原因 | 解决 |
|---|---|---|
浏览器打不开 / 超时 | 安全组没放行 80/443,或 DNS 不对 | 检查安全组; |
日志里有 acme / certificate 报错 | DNS 抖动、80 端口被占、验证被拒 | 稍等几分钟 Caddy 会自动重试;确认 DNS 和 80 端口;实在不行 |
打开是 Caddy 默认页 / 404 | 配置没生效(域名写错或没 reload) |
|
502 Bad Gateway | 背后博客没跑、或端口写错 |
|
Caddy 起不来(端口被占) | 装过 nginx/apache 等 |
|
💡 小知识:改配置改错了也不用慌——
reload失败时,Caddy 会继续用旧配置运行,服务不会断。
九、日常维护速查
改配置的标准三步(以后所有修改都走这个流程):
sudo nano /etc/caddy/dblog/blog.caddy # 1. 改
sudo caddy validate --config /etc/caddy/Caddyfile # 2. 校验
sudo systemctl reload caddy # 3. 生效(服务不断线)
想干什么 | 命令 |
|---|---|
查看状态 |
|
实时看日志 |
|
完全重启 |
|
升级 Caddy |
|
证书存放位置 |
|
官方文档 |
卸载 Caddy(⚠️ 会同时删除所有站点配置和证书,确认不再使用再执行):
sudo systemctl disable --now caddy
sudo apt purge -y caddy
sudo rm -rf /etc/caddy /var/lib/caddy /var/log/caddy
sudo userdel caddy 2>/dev/null || true # 可选:删掉运行账户
十、复用:换域名 / 换端口 / 加新站
需求 | 做法 |
|---|---|
换域名 | 编辑 |
换后端端口 | 把 |
加一个新网站 | 在 |
附录:关键路径速查
东西 | 位置 |
|---|---|
总配置入口 |
|
站点配置目录 |
|
证书与密钥 |
|
Caddy 服务名 |
|
博客服务名 |
|
最后记住三句话:
改配置:先 validate,再 reload;
证书:全自动,不用管;
出问题:先看
journalctl -u caddy。