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