0

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

当我使用 $_SERVER['REMOTE_ADDR'] 这个变量返回服务器 IP,因为我们有 Nginx。

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

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

4

3 回答 3

1

Nginx 允许您使用env 指令设置新的环境变量。您可以使用 using 将任意标题作为变量$http_HEADER读取。

我没有尝试过这种功能组合,但是REMOTE_ADDR在 Nginx 中重写变量似乎是您想要做的,这似乎是一种方法。

于 2013-08-19T13:33:04.610 回答
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;
}

尝试这个?

于 2013-08-19T10:23:10.287 回答
0

如果没有库存解决方案,修补 Nginx 以使其按您的需要运行将是您可以采取的一种方法。另一种方法是修补 PHP,以便在 $_SERVER['REMOTE_ADDR'] 中提供所需的值。

于 2013-08-22T18:08:59.547 回答