若是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);
?>
將會獲得一些相似的信息,以下圖: