【问题标题】:IP address of a user always 127.0.0.1用户的 IP 地址始终为 127.0.0.1
【发布时间】:2017-10-22 22:11:25
【问题描述】:

以下是我记录用户 IP 地址的方式:

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

它始终是 127.0.0.1,即使在我在生产环境中测试它时在远程服务器上也是如此。怎么回事?

从 nginx 传递正确的标头。

【问题讨论】:

  • 我猜你正在使用一些负载均衡器或代理,例如 haproxy 或 nginx,并且客户端 IP 没有正确转发。
  • 你能分享你的产品配置吗?
  • @IvanYurov 我在 nginx 配置中设置了正确的标头
  • 你能把你的nginx配置和你的问题一起发布吗?
  • 即使在反向代理中设置了正确的设置,它唯一能做的就是将X-Original-Host 之类的标头设置为请求来自的实际 IP。您可以使用插件覆盖 conn 中的 remote_ip 字段,该字段只需获取此标头,然后将其写入 conn 结构。

标签: elixir phoenix-framework


【解决方案1】:

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

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

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

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

X-Forwarded-For: client, proxy1, proxy2

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2013-12-27
    • 2014-08-19
    相关资源
    最近更新 更多