用户的IP地址始终为127.0.0.1

时间:2017-10-21 01:53:53

标签: elixir phoenix-framework

以下是我如何录制用户的IP地址:

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

它始终是127.0.0.1,即使在远程服务器上我正在生产中进行测试时也是如此。发生了什么事?

从nginx传递正确的标头。

1 个答案:

答案 0 :(得分:0)

您最有可能在申请之前使用反向代理或负载均衡器(您可能应该这样做)。

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

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

请注意,客户端和应用程序之间的路上可能有多个代理。在这种情况下,标题可能看起来像

X-Forwarded-For: client, proxy1, proxy2

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