用户的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传递正确的标头。
答
您很可能在应用程序之前使用反向代理或负载平衡器(因为您可能应该这样做)。
该系统将建立连接(代表客户端)到您的应用程序。由于它与应用程序在同一台主机上运行,因此您将始终将127.0.0.1视为远程主机。
反向代理通常会插入一个X-Forwarded-For HTTP标头。通过从该标题中提取值,您应该能够检索到您感兴趣的主机。
请注意,客户端与您的应用程序之间可能有多个代理服务器。在这种情况下,头部可能看起来像
X-Forwarded-For: client, proxy1, proxy2
在这种情况下,你需要一些逻辑,以确定哪些是你的相关主机。
我猜你正在使用一些负载平衡器或代理,如haproxy或nginx,并且客户端IP没有正确转发。 –
你可以分享你的prod配置吗? –
@IvanYurov我在nginx配置文件中设置了正确的标题 – Moraji