nignx emqx获取客户端真实ip

emqx与nginx搭配,如何实现获取用户的IP地址?

这个问题困扰了我好几天。首先最简单粗暴的解决办法,就是花钱买企业版。

但是作为项目开始阶段,暂时不需要emqx企业版,一般都会先用开源版。所以花钱的办法暂时先不考虑,那么就寻求其他办法才行。

还有个简单粗暴的方案,就是如果连接数量没有那么大(我这里8100,超过8100就不行了),可以直接连接emqx,不需要nginx来做负载均衡操作。那么就可以通过emqx开放的API获取client的信息,从而拿到客户端的ip地址。

如果加上nginx呢?

这个问题我在网上查了很多资料,然而都不行。基本所有资料都在说nginx连接tcp的时候,需要proxy_protocol on;
其实确实需要,但没有说全,当你开启proxy_protocol的时候你就会发现,你用tcp的方式连不上emqx了,更何谈根据API获取clientId的信息。就这简单的问题居然难了我好几天。解决方案(之前都是废话,哈哈哈哈哈,我就是想吐槽一下网上的复制粘贴!!!):

1.nginx配置proxy_protocol on;

2.修改emqx下的etc目录下的emqx.conf,开启tcp的proxy_protocol;

总结:使用proxy_protocol 必须双方都要开启,缺一不可。就是说,如果你emqx.conf打开了这行注释,你nginx没有加,你同样无法建立tcp连接。


要使用Proxy protocol需要两个角色sender和receiver,sender在与receiver之间建立连接后,会先发送一个带有客户信息的tcp header,因为更改了tcp协议,需receiver也支持Proxy protocol,否则不能识别tcp包头,导致无法成功建立连接。

参考地址:代理协议Proxy protocol

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值