Symfony的请求和反向代理

时间:2011-08-10 11:19:43

标签: symfony reverse-proxy

我有apache2和nginx。我在配置中将“trust proxy headers”设置为true,但无论如何在调用$request->getClientIp();时获取内部ip我有什么不对?

如果我使用参数getClientIp调用$proxy = true,那么我会获得正确的IP。但是有一些配置启用了代理头,还不够吗?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

简而言之:如果您计划使用某种反向代理,则始终需要使用$proxy = true。使用此参数集(并启用trustProxyData();),$this->getClientIp();将使用反向代理返回正确的IP。

说明:即使配置完成后,代理标头也将返回HTTP_X_FORWARDED_FORHTTP_CLIENT_IP作为用户IP,而REMOTE_ADDR将返回服务器本地主机地址(最有可能) 127.0.0.1)。 $proxy = true检查确切。这是此函数的源代码:

public function getClientIp($proxy = false)
{
    if ($proxy) {
        if ($this->server->has('HTTP_CLIENT_IP')) {
            return $this->server->get('HTTP_CLIENT_IP');
        } elseif (self::$trustProxy && $this->server->has('HTTP_X_FORWARDED_FOR')) {
            return $this->server->get('HTTP_X_FORWARDED_FOR');
        }
    }

    return $this->server->get('REMOTE_ADDR');
}