You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地Docker中Caddy反向代理访问checkip.amazonaws.com返回内网IP问题

问题原因与解决方案

核心原因

两个IP查询服务的客户端IP识别逻辑存在差异:

  • icanhazip.com:仅依据TCP连接的源IP返回结果,也就是Caddy容器向外发起请求时的出口IP(即你的宿主机公网IP),因此能正常返回WAN IP。
  • checkip.amazonaws.com:会优先读取请求中的X-Forwarded-For头信息作为返回值;只有当该头不存在时,才会使用TCP连接的源IP。

你使用的Caddy反向代理命令(caddy reverse-proxy)默认会自动添加X-Forwarded-For头,值为客户端访问代理时的IP——当你从宿主机访问localhost:7002时,Caddy容器接收到的客户端IP是Docker桥接网络的内网IP(比如172.17.0.1这类网关IP,或是容器自身的内网IP),因此AWS服务返回了这个内网IP。

解决方案

要让AWS的checkip服务返回你的公网IP,需要让Caddy在转发请求时移除X-Forwarded-For头。由于命令行方式无法直接修改这个默认行为,改用Caddyfile配置:

  1. 创建一个Caddyfile文件,内容如下:
:80 {
    reverse_proxy http://checkip.amazonaws.com:80 {
        # 移除请求中的X-Forwarded-For头
        header_up -X-Forwarded-For
        # 替换Host头为目标服务的Host(等价于命令行的--change-host-header)
        header_up Host {upstream_hostport}
    }
}
  1. 运行Docker容器时挂载这个Caddyfile:
docker run -it --rm -p 7002:80 -v $(pwd)/Caddyfile:/etc/caddy/Caddyfile caddy

此时再访问localhost:7002,就能得到正确的公网IP了。


内容的提问来源于stack exchange,提问作者Xavi Montero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:26:14