REMOTE_ADDR来自用户的IP而不是Nginx反向代理服务器

insrf1ej  于 2023-04-20  发布在  Nginx
关注(0)|答案(3)|浏览(149)

我已经读了很多关于这个主题的帖子,并尝试了几种解决方案,但没有找到一个工作的slotion。
我在Apache服务器前设置了一个Nginx反向代理。当我的php应用程序使用REMOTE_ADDR函数时,它会从用户那里获取Nginx服务器的IP。
我使用的是Apache 2.4.10,应该安装了module_remoteip.c,但是没有加载。
因此,我安装了rpaf_module。看起来这个模块安装正确,phpinfo()mod_rpaf-2与加载的模块一起显示。我修改了**/etc/apache 2/mods-available/rpaf.conf**文件,内容如下:

<IfModule rpaf_module>
    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips 172.19.0.5 # ip of Nginx server
    RPAFheader X-Forwarded-For
</IfModule>

我的Nginx配置看起来像这样:

location / {
    proxy_set_header X-Real-Ip $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_pass 172.19.0.4;
}

帮助是感激?

8tntrjer

8tntrjer1#

访问者的IP地址应该可以使用

$_SERVER['HTTP_X_REAL_IP'];

而不是

$_SERVER['REMOTE_ADDR'];

如果你想替换REMOTE_ADDR头,在你的NGINX配置中试试这个:(不要忘记重新加载/重新启动您的NGINX服务器)

location / {
    proxy_set_header X-Real-Ip $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_set_header REMOTE_ADDR $remote_addr;
    proxy_pass 172.19.0.4;
}
cvxl0en2

cvxl0en22#

添加http配置set_真实的_ip_from

http {
...
set_real_ip_from 172.19.0.5/16 # ip of Nginx server;
2j4z5cfb

2j4z5cfb3#

为了能够将real-ip导入$remote_addr变量,你需要这样的东西:

http {
...
  real_ip_header      proxy_protocol;
  real_ip_recursive   on;
  set_real_ip_from    0.0.0.0/0;
...
  server {
    ...
    listen 80   proxy_protocol;
    listen 443  ssl proxy_protocol;
    ...
  }
...
}

https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/

相关问题