OpenShift通过转发服务器来分发数据,如果应用程序通过读取SERVER变量的REMOTE_ADDR,那么读取的IP地址将会是OpenShift转发服务器的地址:

forward server IP

访客统计软件也悲剧地只记录了这个地址:

OpenShift Forward Server IP

用户的真实IP其实存在SERVER变量的另一个键:

real client IP

因此,在不更改应用程序的前提下,如果要获取访客的真实IP,只需在引用程序初始化的时候将HTTP_X_FORWARDED_FOR的IP赋给REMOTE_ADDR就可以了。比如WordPress平台,可以在wp-config.php文件的最后加上下面几行代码:

1
2
3
/** Restore visitor's real ip when run on openshift */    
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];

这样应用程序就可以获取到访客的真实IP地址(如果用户使用Proxy访问,也有可能是Proxy的地址):

visitors‘ real ip