Featured image of post Caddy 配置获取真实客户端来源IP

Caddy 配置获取真实客户端来源IP

最近折腾MQTT,后端使用的是EMQX,接入协议是ws://,再搭配前置caddy代理自动配置证书,最终是wss://,但是为了方便全球接入避免单点网络故障问题,于是最外层再次套了一层cloudflare的CDN,最后的架构如下:

1
2

EMQX <-----> Caddy <-----> Cloudflare <-----> Client  

体验了一段时间下来没什么大问题,就是EMQX后台获取的客户端IP不对,是Cloudfalre的转发IP。
emqx-client.png

其实原因也很简单,Caddy获取客户端IP策略不一致,详情参考 此篇文章

我嫌白名单配置麻烦,所以粗暴的采用以下配置解决,无条件信任来源于Cf的协议头X-Forwarded-For

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
"handle": [
    {
        "handler": "reverse_proxy",
        "upstreams": [
            {
                "dial": "172.17.0.1:8083"
            }
        ],
        "headers": {
            "request": {
                "set": {
                    "X-Forwarded-For": [
                        "{http.request.header.X-Forwarded-For}"
                    ]
                }
            }
        }
    }
]
本文采用 CC BY 4.0 协议,转载请署名并注明出处。
最后更新于 2025-01-16 13:59:51
使用 Hugo 构建
主题 StackJimmy 设计