REMOTE_ADDR在nginx上显示错误的IP

时间:2013-08-19 10:21:19

标签: php nginx ip global-variables

我们有一个安装了nginx的专用服务器。

当我使用$ _SERVER ['REMOTE_ADDR']时,此变量返回Server IP,因为我们有Nginx。

我知道我们应该使用HTTP_X_REAL_IP或HTTP_X_FORWARDED,但是我们有一些使用REMOTE_ADDR的PHP应用程序,这些应用程序的源代码是用IonCube编码的,所以我们不能改变这个程序的来源。

在nginx配置中是否有任何方法可以在REMOTE_ADDR中返回正确的用户IP,而不是在其他索引中?

3 个答案:

答案 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']中提供所需的值。