首页 > 解决方案 > set_real_ip_from 仍然包含在 HTTP_X_FORWARDED_FOR 中

问题描述

我正在尝试将我的反向 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;
    }


}

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

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

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

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

解决方案


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

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

proxy_set_header X-Forwarded-For $remote_addr;

推荐阅读