如何让nginx和apache一起工作以显示真正的客户端IP?

时间:2012-01-26 14:45:01

标签: apache proxy nginx

我正在尝试在nginx代理后面配置一个apache服务器。 nginx和apache实例位于两个不同的主机上。 两台服务器都在运行debian squeeze。

我在前端服务器的nginx.conf中有这个(192.168.1.30)

 server {

    listen   80; ## listen for ipv4
    listen   [::]:80 default ipv6only=on; ## listen for ipv6

    server_name  front.tld.org;  #real hostname changed

    access_log  /var/log/nginx/localhost.access.log;

    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

    location / {
      proxy_pass http://192.168.1.1:80;  #local IP of the server running apache
    }

在apache主机(192.168.1.1)上,/etc/apache2/mods-enabled/rpaf.conf

<IfModule mod_rpaf.c>
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 192.168.1.30
RPAFheader X-Real-IP
</IfModule>

我重新启动了nginx和apache2服务。 但是在apache2 /var/log/apache2/access.log中,我始终拥有来自192.168.1.30(代理)的原始IP而不是真实客户端。

有什么不对吗?知道怎么调试吗?

2 个答案:

答案 0 :(得分:1)

为了记录,Debian挤压配置文件有些奇怪。

以下配置有效:

RPAFenable On
RPAFsethostname On
RPAFproxy_ips 172.27.6.74 172.27.7.17 127.0.0.1 ::1
RPAFheader X-Forwarded-For

(我必须删除<IfModule mod_rpaf.c>

答案 1 :(得分:0)

您目前看到的是正确的行为。因为只有您的应用程序(在Apache上运行)才能看到真正的IP。例如,安装示例应用程序(如WordPress)并安装实时分析(如Piwik)。将Piwik代码插入WordPress页脚并访问您的WordPress站点(注销后)。现在,Piwik将显示真实IP而不是RPAFproxy_ips设置的内容。