我们有一个安装了nginx的专用服务器。
当我使用$ _SERVER ['REMOTE_ADDR']时,此变量返回Server IP,因为我们有Nginx。
我知道我们应该使用HTTP_X_REAL_IP或HTTP_X_FORWARDED,但是我们有一些使用REMOTE_ADDR的PHP应用程序,这些应用程序的源代码是用IonCube编码的,所以我们不能改变这个程序的来源。
在nginx配置中是否有任何方法可以在REMOTE_ADDR中返回正确的用户IP,而不是在其他索引中?
答案 0 :(得分:1)
function get_client_ip()
{
if (!empty($_SERVER['HTTP_CLIENT_IP'])) { // check ip from share internet
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { // to check ip is pass from proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
试试这个吗?
答案 1 :(得分:1)
Nginx允许您使用env directive设置新的环境变量。您可以使用$http_HEADER
阅读arbitrary headers as variables。
我没有尝试过这种功能组合,但是在Nginx中重写REMOTE_ADDR
变量似乎是你想要做的,这似乎是一种方法。
答案 2 :(得分:0)
如果没有库存解决方案,可以根据需要修补Nginx,这是您可以采取的方法。另一种方法是修补PHP,以便在$ _SERVER ['REMOTE_ADDR']中提供所需的值。