如果WordPress运行在Nginx作为proxy代理的后端,那么,WP会默认取得$_SERVER['remote_addr']的IP地址.其实这个IP地址是前端Nginx的IP地址,是不对的.如何才能使WordPress取得真实IP地址呢?方法很简单,有几种,下面说下两种:<br /><br /><br />首先,我们定义一下,假设运行Nginx Proxy的,为服务器A,而运行WordPress的,为服务器B(可以是Nginx,Apache,Lighttpd,IIS等).<br /><br /><br />1.使用HttpRealIpModule模块:HTTP_X_REAL_IP.<br />HttpRealIpModule模块不会默认安装到Nginx中.您需要配置Nginx,添加--with-http_realip_module选项重新编译安装一次Nginx.<br /><br /><br />然后在Nginx Proxy前端添加:<br />proxy_set_header X-Real-IP $remote_addr;<br /><br /><br />重新加载Nginx的配置:<br />/usr/local/nginx/sbin/nginx -s reload<br /><br /><br />这时候,客户真实IP会保存在$_SERVER['HTTP_X_REAL_IP']变量中,如果使用php程序,输出:<br /><br /><br />echo $_SERVER['HTTP_X_REAL_IP'];<br /><br /><br />就会得到用户的真实IP了.<br /><br /><br />修改WordPress根目录下的wp-config.php:<br />在第二行添加:<br />if (isset($_SERVER['HTTP_X_REAL_IP'])) {<br />$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];<br />}<br /><br /><br />保存退出,完成!<br /><br /><br />2.使用HTTP_X_FORWARDED_FOR变量<br /><br /><br />不用安装其它模块.<br /><br /><br />然后在Nginx Proxy前端,也就是服务器A添加:<br />proxy_set_header X-Forwarded-For $remote_addr;<br /><br /><br />重新加载Nginx的配置:<br />/usr/local/nginx/sbin/nginx -s reload<br /><br /><br />这时候,客户真实IP则会保存在$_SERVER['HTTP_X_FORWARDED_FOR']变量中,<br /><br /><br />修改WordPress根目录下的wp-config.php:<br />在第二行添加:<br /><br /><br />if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {<br />$ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);<br />$_SERVER['REMOTE_ADDR'] = $ips[0];<br />}<br />保存退出,完成!<br /><br /><br />现在试在WP中添加一个新评论,看下是不是使用了真实IP了?<br /><br /><br />不但在WordPress可以使用这种方法,举一反三,这种方法可以使用到其它相似的环境中.<br /><br /><br />如果在php程序中这样输出:<br /><br /><br /><?php<br /><br /><br />print_r($_SERVER);<br /><br /><br />?>