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用户真实 IPCaddy 服务器 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 ... }
  • 使用 localhost127.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 服务器发起。

标签: none

添加新评论