在Nginx反向代理背后无法在Apache中获得真实的访客IP

时间:2020-01-27 16:01:52

标签: apache nginx proxy reverse-proxy

5小时后,尝试解决问题并阅读我发现的所有教程,然后在这里寻求帮助。

我有一台Nginx Reverse Proxy服务器指向我的Apache Web服务器,但是在Apache上,我仅从IP address服务器上获得了Nginx reverse proxy,而没有访问者ip

我的Nginx代理文件: /etc/nginx/sites-available/proxy.conf

proxy_pass http://MYIPADDRESS;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header        Host            $host;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header        X-Real-IP       $remote_addr;

在Apache上,我已添加到/etc/apache2/apache2.conf文件:

RemoteIPHeader X-Forwarded-For

并替换

LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

使用

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined

a2enmod remoteip也已启用

在Nginx /var/log/nginx/access.log文件中,我也总是得到localhost IP,例如:

127.0.0.1 - - [27/Jan/2020:23:53:07 +0800] "GET...

还尝试添加到/etc/nginx/nginx.conf

set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For

如果我现在在Web服务器上运行,则浏览器中将包含一个PHP脚本:

<?php

echo 'User IP - '.$_SERVER['REMOTE_ADDR'];

?>

我刚刚获得了反向代理服务器IP,对于整个服务器也是如此。

两个服务器的操作系统都是Debian 9,有人知道吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

首先,请确保您已安装并启用mod_remoteip apache模块。

我在服务器上使用以下配置。

在httpd.conf中:

LoadModule remoteip_module modules/mod_remoteip.so

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1

在nginx站点配置文件中:

proxy_set_header  X-Real-IP $remote_addr;
proxy_set_header  X-Forwarded-For $http_x_forwarded_for;
proxy_set_header  X-Forwarded-Proto $scheme;