正常状态下,利用一键包安装完wdcp的面板,后台设置nginx+apache的工作模式后,你会发现所有网站都无办法获得访问者的正确IP。比方说评论中,评论者的IP全部显示为你的服务器IP或者说是显示127.0.0.1。如下图,我的其中一个wordpress网站上的垃圾评论全部显示为服务器IP。

 

解决 WDCP 面板 nginx+apache模式下, Apache无法获得真实IP的问做法

以前用wdcp面板时,工作在apache模式下,并没有发现这问题,直到最近出于某些原因一定要用nginx前端+apache后台处理数据的模式,终于下定决心解决这问题。然而由于本人是linux的菜鸟,就是遇到问题才来百度google答案的,所以花了不少时间百度,google,熟悉WDCP面板下apache与nginx的路径与配置,经过N次的修改,总算勉强搞定了这问题。

其实这个问题的搜索关键是:“前端Nginx,后端Apache获取用户真实IP地址”, Google "nginx apache 2.4 mod_remoteip"

先弄明白自己装的是wdcpV几面板,这里装的是最新WDCP V3版本:/www/wdlinux/下可查看环境:apache 2.4版本,nginx为1.8.1版本。

解决 WDCP 面板 nginx+apache模式下, Apache无法获得真实IP的问做法

经过百度,已经明确nginx下,apache想获得真实IP只有两种方法:

获取真实IP地址有Apache有2个模块:
mod_rpaf:Apache-2.2支持;Apache-2.4不支持。网上教程很多
mod_remoteip:Apache-2.4自带模块;Apache-2.2支持;推荐

所以在我的VPS是apache2.4的环境下,直接忽略mod_rpaf的安装以及配置方法。

以下是mod_remoteip的配置方法:

nginx配置:

/www/wdlinux/nginx-1.8.1/conf下分别修改 naproxy.conf 和 nginx.conf 文件。

naproxy.conf 中 加入 :

roxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;

nginx.conf 中 加入:

limit_conn_zone $binary_remote_addr zone=one:32k;

在下图中可以看到,wdcp已经在naproxy.conf 中设置了 header 的 X-real-IP 和 X-Forwarded-for,这些参数在apache中要用到。

解决 WDCP 面板 nginx+apache模式下, Apache无法获得真实IP的问做法

PS,修改完nginx的配置后,不必每次修改都使用命令service nginxd restart, 而是使用 service nginxd reload 来 重载配置文件,如下图显示成功载入。

解决 WDCP 面板 nginx+apache模式下, Apache无法获得真实IP的问做法

然后是Apache的配置,网上搜了一大堆的各色说法,最后测试出成功的修改方法很简单,就是在 rpaf.conf中加入 :

RemoteIPHeader X-Forwarded-For
RemoteIPHeader X-REAL-IP
RemoteIPInternalProxy 127.0.0.1
RemoteIPInternalProxy <Your Server Real IP>

解决 WDCP 面板 nginx+apache模式下, Apache无法获得真实IP的问做法

<Your Server Real IP>填你的VPS ip, 因为不断的测试中 我修改过 httpd.conf,在httpd.conf中加载了mod_remoteip模块,所以这里就注释掉这行。如果没改httpd.conf,这里不用注释掉这一行 LoadModule remoteip_module modules/mod_remoteip.so,下图是我修改过的httpd.conf.

解决 WDCP 面板 nginx+apache模式下, Apache无法获得真实IP的问做法 

最后重启web服务,service httpd restart。  即可完成任务,WDCP配置下,解决的方法就这么简单,然后百度好久并没找到针对性的文章,为防止几天后又忘记怎么修改,特留下此文章以作备份。