使用 Caddy 和 Cloudflare 为您的 Debian 12 服务配置 HTTPS 反向代理
前言
在现代网络服务部署中,为您的应用提供安全访问是至关重要的。本文将详细介绍如何在 Debian 12 VPS 上使用 Caddy 作为反向代理,并通过 Cloudflare 配置域名访问,实现自动 HTTPS 证书申请和续期。
无论您是运行 Docker 容器、个人博客还是小型 Web 应用,本教程将为您提供清晰、分步的指导,帮助您轻松实现安全、高效的域名访问。
目录
目标与适用场景
配置目标
通过本教程,我们将实现以下访问映射:
1 | https://myapp.example.com -> 127.0.0.1:8319 |
适用场景
本教程特别适合以下场景:
- 在 VPS 上运行了多个 Docker 容器,需要统一入口访问
- 后端服务或应用程序监听在本机端口
- 希望使用域名访问服务并自动启用 HTTPS
- 域名 DNS 托管在 Cloudflare
- 希望自动化 HTTPS 证书的申请和续期过程
为什么选择 Caddy
Caddy 是一个现代化的 Web 服务器和反向代理工具,特别适合个人开发者和小型团队使用。与传统的 Nginx 相比,Caddy 具有显著优势:
主要优势
- 极简配置:使用声明式配置语法,直观易懂
- 自动 HTTPS:默认启用,无需手动配置证书
- 自动证书管理:自动申请和续期 Let’s Encrypt 证书
- 性能优化:自动启用 HTTP/2 和 gzip 压缩
- 热重载:配置更改后无需重启服务
- 丰富的插件系统:可根据需要扩展功能
Caddy vs Nginx
| 特性 | Caddy | Nginx |
|---|---|---|
| HTTPS 配置 | 自动 | 需手动配置 Certbot |
| 配置语法 | 简洁直观 | 复杂,需要深入学习 |
| 证书管理 | 自动 | 需单独管理 |
| HTTP/2 支持 | 默认启用 | 需手动配置 |
| 配置热重载 | 支持 | 需重启服务 |
前置条件检查
在开始之前,请确保满足以下条件:
1. VPS 有公网 IP
假设您的 VPS 公网 IP 是:
1 | 1.2.3.4 |
请将本文中的 1.2.3.4 替换成您自己的 VPS 公网 IP。
2. 域名托管在 Cloudflare
本教程假设域名在 Cloudflare 上管理,例如:
1 | example.com |
3. 服务端口已正常运行
确保您的 Docker 容器或本地服务已经监听:
1 | 127.0.0.1:8319 |
测试服务可用性
在 VPS 上执行以下命令测试服务是否正常运行:
1 | # 测试服务响应 |
4. 开放必要端口
Caddy 需要监听以下端口:
80/tcp:用于 HTTP 访问和证书申请验证443/tcp:用于 HTTPS 访问
需要在 VPS 云厂商安全组、防火墙中放行这些端口:
1 | # 使用 UFW 防火墙(Ubuntu/Debian) |
Cloudflare DNS 配置
1. 登录 Cloudflare 控制台
访问 Cloudflare 控制台,选择您的域名,然后进入:
1 | DNS -> Records |
2. 配置主域名
根据您的域名结构,配置记录:
情况一:Cloudflare 区域为 example.com
1 | 类型:A |
情况二:Cloudflare 区域为 example.net
1 | 类型:A |
3. 配置第二个域名
同样根据您的域名结构,配置第二个域名:
情况一:Cloudflare 区域为 example.com
1 | 类型:A |
情况二:Cloudflare 区域为 example.org
1 | 类型:A |
4. 关于代理状态的建议
初次配置时使用灰色云朵(DNS only),这会使请求直接到达您的 VPS,简化证书申请和问题排查过程。
初始访问链路:
1 | 浏览器 |
确认两个域名都能正常访问后,再考虑开启 Cloudflare 代理(橙色云朵):
1 | 浏览器 |
Caddy 安装与配置
1. 安装 Caddy
在 Debian 12 上,可以直接使用 apt 安装 Caddy:
1 | # 更新软件源 |
如果 Caddy 已经正常运行,说明安装成功。
2. 备份默认配置
修改配置前,建议先备份默认配置文件:
1 | # 创建带时间戳的备份 |
3. 配置反向代理
编辑 Caddy 配置文件:
1 | nano /etc/caddy/Caddyfile |
写入以下内容:
1 | # 主域名反向代理 |
配置说明
myapp.example.com和blog.example.net是要绑定的域名reverse_proxy 127.0.0.1:8319表示将请求转发到本地 8319 端口- Caddy 会自动处理 HTTPS 证书申请和续期
4. 验证配置
修改完成后,先验证配置是否正确:
1 | # 验证配置语法 |
5. 启动并重载 Caddy
1 | # 启用并启动服务 |
测试与故障排除
1. 基本测试
等待几十秒到几分钟(让 Caddy 申请证书),然后访问:
1 | https://myapp.example.com |
也可以使用命令行测试:
1 | curl -I https://myapp.example.com |
如果返回类似 HTTP/2 200 或 HTTP/2 302,通常说明配置正常。
2. 常见问题及解决方案
DNS 没生效
1 | # 检查域名解析 |
如果返回的不是您的 VPS IP,请检查 Cloudflare DNS 记录。
80 或 443 端口被占用
1 | # 检查端口占用 |
如果已有其他服务(如 Nginx、Apache)占用这些端口,需要:
- 停止其他服务
- 或调整其他服务端口
- 或只保留一个反向代理入口
Caddy 证书申请失败
查看详细日志:
1 | journalctl -u caddy --no-pager -n 200 |
常见原因:
- DNS 没解析到当前 VPS
- 80/443 端口未开放
- 防火墙阻止访问
- 域名 CAA 记录限制了证书签发机构
502 Bad Gateway 错误
1 | 502 Bad Gateway |
这表明 Caddy 无法连接到后端服务。检查:
1 | # 测试后端服务 |
开启 Cloudflare 橙色云朵后异常
如果灰色云朵时正常,橙色云朵后异常:
- 检查 Cloudflare SSL/TLS 模式是否为
完整(严格) - 确认未误选
灵活 / Flexible - 检查 Caddy 证书是否正常
- 确认源站 443 端口开放
- 检查后端应用是否有特殊的 HTTPS/Host/Header 校验
安全优化建议
1. 隐藏业务端口
如果通过 Caddy 访问服务,公网只需开放 80 和 443 端口,业务端口(如 8319、1998)可以不直接暴露。
对于 Docker 服务,修改端口映射:
1 | # 原方式(可能暴露公网) |
2. 配置 Caddy 安全增强
可以在 Caddy 配置中添加安全增强选项:
1 | myapp.example.com { |
3. 访问控制
如果需要限制访问,可以添加基本认证:
1 | blog.example.net { |
密码可以使用以下命令生成:
1 | caddy hash-password |
完整部署流程总结
准备阶段:
- 确认 VPS 有公网 IP
- 确认域名在 Cloudflare 管理
- 确认后端服务正常运行
DNS 配置:
- 在 Cloudflare 添加 A 记录
- 初次配置使用灰色云朵(DNS only)
防火墙配置:
- 开放 80 和 443 端口
安装 Caddy:
- 使用 apt 安装 Caddy
- 启动并检查服务状态
配置反向代理:
- 编辑
/etc/caddy/Caddyfile - 添加域名和后端服务配置
- 编辑
验证与测试:
- 使用
caddy validate检查配置 - 重载 Caddy 服务
- 访问域名测试功能
- 使用
可选优化:
- 确认正常后,可开启 Cloudflare 橙色云朵
- 设置 SSL/TLS 为
完整(严格) - 添加安全增强选项
延伸阅读与资源
官方文档
相关工具
通过本教程,您已经学会了如何在 Debian 12 上使用 Caddy 和 Cloudflare 配置安全的反向代理服务。这种方法不仅简化了 HTTPS 证书管理,还提供了灵活的访问控制和负载均衡能力,非常适合个人项目和小型团队使用。
随着需求的增长,您可以进一步探索 Caddy 的高级功能和 Cloudflare 的更多服务,构建更强大、更安全的网络基础设施。




