用户的IP地址127.0.0.1始终

问题描述:

这里是我如何记录用户的IP地址:用户的IP地址127.0.0.1始终

{a, b, c, d} = conn.remote_ip 
ip_addr = "#{a}.#{b}.#{c}.#{d}" 

它总是127.0.0.1,即使是在远程服务器上,当我在测试它生产。这是怎么回事?

从nginx传递正确的标头。

+4

我猜你正在使用一些负载平衡器或代理,如haproxy或nginx,并且客户端IP没有正确转发。 –

+1

你可以分享你的prod配置吗? –

+1

@IvanYurov我在nginx配置文件中设置了正确的标题 – Moraji

您很可能在应用程序之前使用反向代理或负载平衡器(因为您可能应该这样做)。

该系统将建立连接(代表客户端)到您的应用程序。由于它与应用程序在同一台主机上运行,​​因此您将始终将127.0.0.1视为远程主机。

反向代理通常会插入一个X-Forwarded-For HTTP标头。通过从该标题中提取值,您应该能够检索到您感兴趣的主机。

请注意,客户端与您的应用程序之间可能有多个代理服务器。在这种情况下,头部可能看起来像

X-Forwarded-For: client, proxy1, proxy2 

在这种情况下,你需要一些逻辑,以确定哪些是你的相关主机。