Caddy域名跳转配置
Caddy 域名跳转配置笔记
一、Caddy 实现域名跳转的基本配置
Caddy 通过 redir 指令实现 HTTP 重定向。最基本的配置格式如下:
aa.cc.xyz {
redir https://bb.baidu.com{uri} permanent
}参数说明:
aa.cc.xyz:源域名,接收请求并执行跳转redir:Caddy 的重定向指令https://bb.baidu.com{uri}:目标地址,{uri}是占位符,代表原始请求的完整路径和查询参数permanent:使用 301 永久重定向
二、redir 指令的完整参数
redir 指令的语法结构为:redir <to> <code> [<matcher>]
1. 跳转目标(to)
静态目标:直接填写固定 URL
redir https://bb.baidu.com动态目标:使用占位符保留原路径
redir https://bb.baidu.com{uri}{uri}会自动附加原始请求的路径和查询字符串
2. 状态码(code)
| 状态码/关键词 | 含义 | 适用场景 |
|---|---|---|
| 301 或 permanent | 永久重定向 | 网站永久迁移,传递 SEO 权重 |
| 302 或 temporary | 临时重定向(默认) | 临时维护、A/B 测试 |
| 307 | 临时重定向(保留请求方法) | 与 302 类似,但明确要求不改变请求方法 |
| 308 | 永久重定向(保留请求方法) | 与 301 类似,但明确要求不改变请求方法 |
| 303 | 查看其他位置 | POST 请求后重定向到结果页面 |
| html | 通过 HTML 页面重定向 | 返回含 meta refresh 或 JavaScript 跳转的 HTML |
3. 匹配器(matcher)
用于精准控制哪些请求需要被重定向:
路径匹配:
redir /old.html /new.html # 精确匹配 redir /old/* /new/{uri} # 通配匹配命名匹配器:通过
@name引用复杂条件@external { not remote_ip 192.168.0.0/16 } redir @external https://example.com
三、跳转到外部域名
目标域名无需在 Caddy 或 Cloudflare 上托管,可以是任何公网可访问的域名。
常见跳转场景
| 场景 | 配置示例 |
|---|---|
| 跳转到外部域名首页(丢弃路径) | redir https://google.com |
| 跳转到外部域名特定路径 | redir https://newsite.com/blog/welcome |
| 跳转到外部域名并保留路径 | redir https://newsite.com{uri} |
四、跳转到 IP 地址加端口
redir 支持跳转到 IP 地址加端口号:
aa.cc.xyz {
redir http://192.168.1.100:8080{uri} permanent
}或使用 HTTPS:
aa.cc.xyz {
redir https://10.0.0.5:8443{uri} permanent
}注意事项:
- IPv6 地址需加方括号:
http://[2001:db8::1]:8080{uri} - 使用 HTTPS 跳转到 IP 地址会触发浏览器证书安全警告
- 确保目标 IP 和端口对用户公网可达
五、redir 与 reverse_proxy 的区别
| 特性 | redir(显性跳转) | reverse_proxy(隐性代理) |
|---|---|---|
| 地址栏变化 | 变为目标 URL | 保持不变 |
| 用户感知 | 明显看到跳转 | 感觉就在原网站 |
| 目标服务器看到的 IP | 用户真实 IP | Caddy 服务器 IP |
| 实现方式 | HTTP 重定向 | 代理转发 |
| 适用场景 | 网站迁移、域名更换 | 内容聚合、隐藏后端 |
reverse_proxy 配置示例:
aa.cc.xyz {
reverse_proxy https://bb.baidu.com
}如需传递真实 IP(目标服务器需支持):
aa.cc.xyz {
reverse_proxy https://bb.baidu.com {
header_up X-Forwarded-For {remote_host}
}
}六、Caddy 自动 HTTPS
使用公共域名配置 redir 时,Caddy 会自动为源域名申请 HTTPS 证书。
证书作用:加密接收用户访问 https://aa.cc.xyz 的初始连接。
跳转响应本身:在安全连接建立后以明文方式返回 301/302 状态码。
不会自动申请证书的情况:
- 站点地址以
http://开头:http://aa.cc.xyz { redir ... } - 使用
localhost、127.0.0.1等内部地址(会生成自签名证书) - 手动配置自定义证书(通过
tls指令) - 全局关闭自动 HTTPS:
auto_https off
七、运维命令
验证 Caddyfile 语法:
caddy validate格式化 Caddyfile:
caddy fmt --overwrite八、跳转过程中的客户端 IP 记录
使用 redir 时,目标服务器(如 bb.baidu.com)的日志记录的是访问者的真实客户端 IP,因为跳转由浏览器执行。
使用 reverse_proxy 时,目标服务器日志记录的是 Caddy 服务器的 IP 地址,因为实际请求由 Caddy 服务器发起。