Nginx 将 REMOTE_ADDR 替换为 X-Forwarded-For

2022-08-30 17:39:57

我对Nginx很陌生,这似乎都很混乱。我的服务器设置完美,但问题是,因为我的服务器使用HTTP代理进行保护;它不是记录真实用户的IP,而是记录代理服务器IP。

我尝试做的是设置为,但我得到一个未定义的索引错误,所以我想我必须在Nginx中定义?但是我不知道该怎么做,我有一个简单的设置,它只是Nginx和PHP。仅此而已,仅此而已。$_SERVER['REMOTE_ADDR'];$_SERVER['X-Forwarded-For'];X-Forwarded-For

我已经在网上搜索了一遍,但实际上找不到一些友好的信息。

我可以访问源代码,如果这有帮助的话。我尝试了许多解决方案,但无济于事。


答案 1

正确的方法是在nginx中设置配置。real_ip_header

可信 HTTP 代理 IP 的示例:

set_real_ip_from 127.0.0.1/32;
real_ip_header X-Forwarded-For;

这样,$_SERVER['REMOTE_ADDR']将在PHP fastcgi中正确填充。

文档链接 - nginx.org


答案 2

$http_x_forwared_for可能包含多个 IP 地址,其中第一个地址应为客户端 IP。 应该只是客户端 IP。REMOTE_ADDR

因此,通过在 中使用正则表达式,您可以设置为如下所示的第一个 ip:nginx.confREMOTE_ADDR$http_x_forwarded_for

  set $realip $remote_addr;
  if ($http_x_forwarded_for ~ "^(\d+\.\d+\.\d+\.\d+)") {
    set $realip $1;
  }
  fastcgi_param REMOTE_ADDR $realip;

推荐