MENU

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

January 16, 2025 • Read: 11 • 技术杂谈

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


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

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

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

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

"handle": [
    {
        "handler": "reverse_proxy",
        "upstreams": [
            {
                "dial": "172.17.0.1:8083"
            }
        ],
        "headers": {
            "request": {
                "set": {
                    "X-Forwarded-For": [
                        "{http.request.header.X-Forwarded-For}"
                    ]
                }
            }
        }
    }
]