跳到主内容

Ubuntu Caddy 反向代理教程:自动 HTTPS、部署与排错

从官方软件源安装 Caddy,在 Ubuntu VPS 上配置反向代理和自动 HTTPS,覆盖 DNS、端口、防火墙、配置校验、平滑重载、日志与常见故障排查。

GSProber · 主机测评编辑1 阅读
从官方软件源安装 Caddy,在 Ubuntu VPS 上配置反向代理和自动 HTTPS,覆盖 DNS、端口、防火墙、…

Ubuntu Caddy 反向代理教程

Caddy 适合在 Ubuntu VPS 上承担网站入口:它可以把公网请求转发给运行在本机端口的 Node.js、Go、Python 或容器应用,并在满足条件时自动申请和续期 HTTPS 证书。与手工组合 Web 服务器和证书定时任务相比,Caddyfile 配置较短,但自动化并不意味着无需理解 DNS、端口、防火墙和后端监听地址。

这篇 Ubuntu Caddy 反向代理教程依据 Caddy 官方安装、反向代理和 Automatic HTTPS 文档编写。示例假设域名为 app.example.com,后端服务监听 127.0.0.1:3000。操作前请把示例域名替换成自己的域名,并保留一条可用的 SSH 会话,避免防火墙变更后失去连接。

部署前准备

首先确认域名的 A 或 AAAA 记录指向 VPS 公网地址。公网证书通常要求 80 和 443 端口能够从互联网到达 Caddy,云平台安全组与 Ubuntu 本机防火墙都要允许这两个端口。后端应用应先在本机正常运行:

Bash
curl -I http://127.0.0.1:3000
ss -lntp | grep ':3000'

如果 curl 无法访问,先修复应用,不要把问题交给反向代理。生产应用建议只监听 127.0.0.1 或 Unix socket,避免绕过 Caddy 直接暴露业务端口。服务器基础安全可参考 Ubuntu VPS 自动安全更新教程,先配置补丁、备份和最小权限。

使用官方软件源安装 Caddy

官方文档为 Debian、Ubuntu 和 Raspbian 提供稳定软件源。先安装密钥和 HTTPS 仓库所需组件,再添加官方源:

Bash
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 chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo apt update
sudo apt install caddy

该软件包会安装 systemd 服务。用 systemctl status caddy 查看状态,用 caddy version 确认命令可用。不要从陌生的一键脚本复制二进制,也不要在没有备份的情况下覆盖 /etc/caddy/Caddyfile

编写最小反向代理配置

编辑 /etc/caddy/Caddyfile

CSS
app.example.com {
    reverse_proxy 127.0.0.1:3000
}

当站点地址是合格的公网域名、DNS 已指向服务器且 80/443 可达时,Caddy 默认启用自动 HTTPS:申请证书、续期证书并把 HTTP 重定向到 HTTPS。无需额外写证书路径,也不要同时启动另一个占用相同端口的 Web 服务。

先格式化并校验配置,再平滑重载:

Bash
sudo caddy fmt --overwrite /etc/caddy/Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

校验失败时不要重启服务。reload 会让运行中的 Caddy 接收新配置,适合减少配置更新造成的中断。部署多个站点时,为每个域名增加独立站点块,而不是复制多个 Caddy 进程。

传递真实客户端信息

Caddy 的反向代理会处理常见转发头。应用框架若需要识别真实来源和 HTTPS 状态,还应正确设置“可信代理”,只信任来自本机 Caddy 的转发信息。不要让应用无条件信任互联网客户端自行提交的 X-Forwarded-For,否则访问控制和日志可能被伪造。

后端如果使用 HTTPS 地址,证书必须被 Caddy 所在系统信任。官方文档还说明,对于 HTTPS upstream,Host 与 TLS ServerName 的关系需要正确处理;较新版本会自动处理常见情形,但旧版本或特殊代理目标仍应核对当前文档。普通单机部署优先使用 Caddy 到本机应用的 HTTP 连接,并限制它只在回环地址监听。

防火墙和权限设置

使用 UFW 时,可以先确认 SSH 规则存在,再开放 Web 端口:

Bash
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status verbose

不要开放应用的 3000 端口。若云厂商还有安全组,需要在控制台同步放行 80/443。Caddy 软件包以专用用户运行,静态文件目录必须允许该用户读取,但不应为了图省事把整个站点设置为全局可写。Linux 权限和服务管理的基础概念可继续阅读 Linux 运维入门教程

验证 HTTPS 与代理链路

在 DNS 生效后,从外部网络执行:

Bash
curl -I https://app.example.com

再查看服务日志:

Bash
sudo journalctl -u caddy --since '15 minutes ago' --no-pager

浏览器返回 502 通常表示 Caddy 已接到请求,但无法访问后端。此时检查后端进程、监听地址和端口。证书申请失败则重点检查 DNS 是否正确、80/443 是否被拦截、域名是否经过不兼容的代理,以及系统时间是否准确。反复重启不会修复错误的 DNS。

增加压缩与请求限制时的边界

可以在站点块中加入 encode zstd gzip 提供响应压缩,但限流、身份验证和 WebSocket 策略应根据应用需求单独设计。Caddy 支持 WebSocket 代理,通常不需要手写 Upgrade 头。上传大文件时,应同时检查应用、反向代理和上游存储的限制,避免只修改一层。

配置完成后,应把 Caddyfile、应用配置和恢复步骤纳入版本化备份,但不要提交证书私钥或环境变量。上线前测试首页、登录、上传、长连接和错误页;上线后监控 Caddy 与应用两个服务,而不是只检查域名能否打开。

运维检查清单

每次修改都先执行 caddy validate,通过后再 reload;定期查看 systemd 状态和证书相关日志;确认 DNS 变更有记录;升级 Caddy 后复核官方发行说明;把应用健康检查与外部监控分开配置。Caddy 能自动处理证书生命周期,但域名续费、DNS 正确性、端口可达和应用本身仍由管理员负责。

完成这些步骤后,Ubuntu VPS 就拥有了清晰的入口层:公网只访问 Caddy,业务应用留在本机端口,HTTPS 证书由 Caddy 自动管理。这个结构容易审计,也便于日后把后端迁移到容器或另一台服务器。

教程GsDesk 是一款基于 Cloudflare Workers 与 VPS 自托管 的开源远程桌面项目,支持 WebR…

Cloudflare Workers 免费搭建开源远程桌面完整教程:无需 VPS,支持 WebRTC P2P、D1、KV、R2、浏览器远程控制、Windows 客户端和文件传输

GsDesk 是一款基于 Cloudflare Workers 与 VPS 自托管 的开源远程桌面项目,支持 WebRTC P2P 直连,服务端仅负责 API、身份认证和 WebSocket 信令,不中转桌面视频流,大幅降低服务器带宽成本。项目支持 Cloudflare 免费套餐 部署,也可以使用 Docker 在 VPS 上自托管,内置 Windows 客户端、浏览器控制端、手机远程控制,支持 8 位设备 ID、OTP 一次性密码、永久密码、Ed25519 设备认证、JWT 身份验证、文件传输、剪贴板同步、自动重连 等完整功能。

308 阅读

教程如果你一直想拥有一个属于自己的网盘,但又不想买 VPS、维护数据库或者折腾复杂环境,那么这个基于 Cloudflare…

CloudDisk:基于 Cloudflare Workers 的免费个人网盘,无需 VPS、MySQL,支持 R2+D1+KV 一键部署

如果你一直想拥有一个属于自己的网盘,但又不想买 VPS、维护数据库或者折腾复杂环境,那么这个基于 Cloudflare Workers 的开源项目 CloudDisk 值得看看。整个系统运行在 Cloudflare 免费套餐上,文件存储使用 R2,数据库使用 D1,会话数据使用 KV,不需要 MySQL,也不需要服务器。支持多用户登录、文件夹管理、分享链接、在线预览、Office 文档查看、文本在线编辑、大文件断点续传、协作者权限管理等功能。无论是个人备份、开发者存放代码文件、团队共享资料,还是搭建自己的私有网盘,都可以直接部署到 Cloudflare,一键完成,几乎零维护成本,非常适合独立开发者、个人站长和轻量团队使用。

284 阅读

教程很多朋友在使用 Linux 服务器或者 VPS 时,经常会遇到 DNS 污染、解析慢、域名无法访问等问题。其实只需要安…

Linux 开启 DNS over HTTPS(DoH)教程:使用 Cloudflared + systemd 实现加密 DNS,防污染、防劫持

很多朋友在使用 Linux 服务器或者 VPS 时,经常会遇到 DNS 污染、解析慢、域名无法访问等问题。其实只需要安装 Cloudflare 官方的 cloudflared,并配合 systemd 自启动,就能让整个系统通过 DNS over HTTPS(DoH)进行加密解析。

237 阅读

常见问题

Caddy 为什么没有自动申请 HTTPS 证书?

优先检查域名 A/AAAA 记录、云安全组与本机防火墙的 80/443 端口、系统时间,以及域名是否确实出现在 Caddyfile 的站点地址中。

Caddy 返回 502 Bad Gateway 应该检查什么?

502 通常表示 Caddy 无法连接后端。检查应用进程是否运行、监听地址和端口是否与 reverse_proxy 一致,并先在服务器本机用 curl 访问后端。

修改 Caddyfile 后必须重启服务吗?

通常不必。先使用 caddy validate 校验配置,通过后执行 systemctl reload caddy,可以让运行中的服务平滑加载新配置。

后端应用端口需要向公网开放吗?

单机反向代理场景一般不需要。建议让应用仅监听 127.0.0.1,并只向公网开放 Caddy 使用的 80 和 443 端口。

评价与回复

无需登录;审核通过后公开显示。