WordPress开源博客程序有很多增加各种功能的插件,提供查看在线访客功能的插件就有很多,Visitor Maps and Who’s Online是其中比较Popular的一个。一般情况如果WP博客是安装在普通的基于LAMP架构的Share Hosting环境,那么这个插件完全可以正常显示来访者的真实IP,不过如果Wordpress博客是运行在一个反向代理服务器的后面(比如很多PaaS云计算平台都是通过亚马逊EC2云平台的ELB服务器(elastic load balancer),或者是使用了类似Cloudflare这样的反向代理型CDN,或者是独立架设的反向代理服务器),那么Who’s Online插件显示的就是反向代理服务器的IP地址或者内网IP。不过这种情况下只要简单修改一下插件的源代码,还是可以恢复正常显示访客真实IP的功能的。
根据插件作者的说明,插件是通过PHP服务器变量$_SERVER['REMOTE_ADDR']
来取得访客的IP地址的(在插件主文件的get_ip_address()
函数中),所以只要修改一下这个函数就可以了。修改后的代码如下:
function get_ip_address() {
// determine the visitors ip address
/* if (getenv('REMOTE_ADDR')) {
$ip = getenv('REMOTE_ADDR');
} else*/
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
} else {
$ip = 'unknown';
}
return $ip;
} // end function get_ip_address
相关文章: