【问题标题】:set_real_ip_from still included in HTTP_X_FORWARDED_FORset_real_ip_from 仍然包含在 HTTP_X_FORWARDED_FOR 中
【发布时间】:2019-09-16 10:47:01
【问题描述】:

我正在尝试将我的反向 nginx 代理配置为发送客户端的真实 IP 地址而不是代理本身。

我正在尝试按照我看到的许多帖子中的建议实施,但它没有按预期工作。

下面是nginx.conf的相关部分

http {
  set_real_ip_from 123.0.0.0/8;
  set_real_ip_from 123.123.12.22; -- example ip
  real_ip_header X-Forwarded-For;
  real_ip_recursive on;

  server {
    location @app {
      proxy_pass http://127.0.0.1:3000;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
    }


}

据我了解,我们在set_real_ip_from 中设置的 ip 是受信任的 ip,HTTP_X_FORWARDED_FOR 将指向第一个或最后一个不受信任的 ip。但那没有发生。

当我尝试打印request.env['HTTP_X_FORWARDED_FOR'] 时,仍然看到123.123.12.22request.remote_ip 仍然指向代理地址123.123.12.22

在这方面的任何帮助都会很棒。谢谢。

【问题讨论】:

  • 123.123.12.22 是客户端的地址,还是另一个 Web 服务器重定向到该地址并将 X-Forwarded-For 设置为真实的客户端 IP?
  • 我使用的示例 ip 123.123.12.22 是代理服务器 ip,这是 IP,我进入的是我的 rails 应用程序而不是客户端 IP

标签: nginx ruby-on-rails-5 nginx-reverse-proxy


【解决方案1】:

您似乎误解了这个 nginx 功能。 real_ip 模块用于恢复客户端地址,该地址被另一个(前端或负载平衡)Web 服务器隐藏到某些附加标头中。

您应该从 nginx 配置中删除所有 real_ip 行,并在您的应用程序中使用 X-Real-IP 标头。如果这还不够,您可以将服务器块中的X-Forwarded-For 替换为

proxy_set_header X-Forwarded-For $remote_addr;

【讨论】:

  • 嗨@Lyzard Kyng,如果我只使用proxy_set_header X-Forwarded-For $remote_addr;,我没有得到客户端IP,看起来它仍然是nginx代理IP
  • @opensource-developer 你能告诉我你控制器的哈希request.env.select { |key, value| key.match(/HTTP|REMOTE/) }吗?
猜你喜欢
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2018-04-24
  • 1970-01-01
  • 2016-02-07
  • 1970-01-01
相关资源
最近更新 更多