使用nginx作为反向代理时,Apache上的REMOTE_ADDR和SERVER_ADDR错误

我在Mac OS X上,在VirtualBox中运行Ubuntu。 Mac OS可以在IP 192.168.0.100和Ubuntu 192.168.0.123(使用VirtualBoxnetworking设置中的“桥接适配器”选项)的本地networking中访问。

在Ubuntu安装中,我有nginx(端口80)作为Apache 2.4(端口8081)的反向代理。 这工作正常,如果我在Mac OS中打开浏览器并指向192.168.0.123,它将通过nginx打开Apache提供的文件。

问题是,即使我已经启用了RPAF模块,我在Apache上获得了服务器和远程IP地址的意外值。

从Mac浏览器访问时,我期望的值是:

SERVER_ADDR = 192.168.0.123 # Apache server IP, which is the Ubuntu IP REMOTE_ADDR = 192.168.0.100 # The Mac OS X IP 

但是,如果我将nginx设置为proxy_pass 192.168.0.123:8081我会得到:

 SERVER_ADDR = 192.168.0.123 REMOTE_ADDR = 198.168.0.123 

设置proxy_pass 127.0.0.1:8081给我正确的远程地址(191.168.0.100),但127.0.0.1作为服务器地址。

任何想法如何获得预期的结果?

编辑 )我使用默认的RPAF设置:

 <IfModule rpaf_module> RPAF_Enable On RPAF_ProxyIPs 127.0.0.1 RPAF_SetHostName On RPAF_SetHTTPS On RPAF_SetPort On RPAF_ForbidIfNotProxy Off </IfModule> 

而这些设置在nginx中:

 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Server-Address $server_addr; proxy_set_header Host $host; 

Apache会看到IP地址192.168.0.123作为源,并需要添加RPAF_proxyips指令,这告诉mod_rpaf它的一个已知的代理。

http://www.stderr.net/apache/rpaf/引&#x7528;

当满足两个条件时,它将改变其他Apache模块可见的客户端的远程地址。 第一个条件是远程客户端实际上是一个在httpd.conf中定义的代理 。 其次,如果有一个传入的X-Forwarded-For头,代理位于已知代理列表中,它将从传入的X-Forwarded-For头取最后一个IP,并在请求结构中改变客户端的远程地址。 它也需要传入的X-Host头,并相应地更新虚拟主机设置。 对于Apache2 mod_proxy,它需要X-Forwared-Host头并更新虚拟主机