问题描述
三个节点的EMQX,EMQX服务器上面有2台HAProxy 负载均衡服务器,现在获取到的客户端IP都是我负载均衡服务器的IP,请问如何获取客户端真实IP。
环境信息
- EMQ X 版本:开源版4.28
- 操作系统及版本:centos
相关截图
192.168.10.11,192.168.10.12均为我们负载均衡服务器的IP
三个节点的EMQX,EMQX服务器上面有2台HAProxy 负载均衡服务器,现在获取到的客户端IP都是我负载均衡服务器的IP,请问如何获取客户端真实IP。
给你点赞 @jokin 这是一个非常典型的场景。4层代理客户端实际的 IP 端口是需要 LB (HAproxy) 发过来的。要配置2个地方:
打开 emqx.conf 对应监听器的 proxoy_protocol:
listener.tcp.external.proxy_protocol = on
配置 HAProxy,让它把客户端的 IP/Port 发到 emqx。例如,在 haproxy.cfg
的 backend 的 每个server 后面加上 send-proxy-v2
:
# 参考: http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#5.2-send-proxy-v2-ssl
backend emqx_tcp_backend
mode tcp
server node1 192.168.1.100:1883 send-proxy-v2
搞定了。谢谢。
打开了这个配置,为什么不能直连EMQTT了?
只有我haproxoy那台服务器可以连接。我直接连接MQTT服务器的IP有报错日志
2021-04-01 10:39:24.814 [error] supervisor: ‘esockd_connection_sup - <0.1804.0>’
errorContext: connection_shutdown
reason: {invalid_proxy_info,<<16,30,0,4,77,81,84,84,4,192,0,10>>}
offender: [{pid,<0.2035.0>},
{name,connection},
{mfargs,
{emqx_connection,start_link,
[[{deflate_options,[]},
{max_conn_rate,10000},
{active_n,100},
{zone,external}]]}}]
我另外个帖子有详细的描述。
打开了就必然没法直连了哈…它要先等 Proxy Protocl Info.
你直连的没有传这个
好的 明白了。
q请教一下,,,如果直连的话能加上这个吗?或者说是如何两者都兼容?