以下是我如何录制用户的IP地址:
{a, b, c, d} = conn.remote_ip
ip_addr = "#{a}.#{b}.#{c}.#{d}"
它始终是127.0.0.1,即使在远程服务器上我正在生产中进行测试时也是如此。发生了什么事?
从nginx传递正确的标头。
答案 0 :(得分:0)
您最有可能在申请之前使用反向代理或负载均衡器(您可能应该这样做)。
此系统将为您的应用程序建立连接(代表客户端)。由于它与您的应用程序在同一主机上运行,因此您将始终将127.0.0.1视为远程主机。
反向代理通常会插入X-Forwarded-For HTTP标头。通过从该标头中提取值,您应该能够检索您感兴趣的主机。
请注意,客户端和应用程序之间的路上可能有多个代理。在这种情况下,标题可能看起来像
X-Forwarded-For: client, proxy1, proxy2
在这种情况下,您需要一些逻辑来确定哪个是您的相关主机。