Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony';s请求和反向代理_Symfony_Reverse Proxy - Fatal编程技术网

Symfony';s请求和反向代理

Symfony';s请求和反向代理,symfony,reverse-proxy,Symfony,Reverse Proxy,我有apache2和nginx。我在配置中将“trust proxy headers”设置为true,但无论如何,在调用$request->getClientIp()时获取内部ip我做错了什么 如果我使用参数$proxy=true调用getClientIp,那么我得到了正确的IP。但是有一种配置启用了代理头,这还不够吗?简而言之:如果您计划使用某种反向代理,您总是需要使用$proxy=true。设置此参数(并且启用了trustProxyData();),$this->getClientIp()将

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


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

简而言之:如果您计划使用某种反向代理,您总是需要使用
$proxy=true
。设置此参数(并且启用了
trustProxyData();
),
$this->getClientIp()将返回带有反向代理的正确IP

说明:即使在配置之后,代理头也会返回
HTTP\u X\u FORWARDED\u FOR
HTTP\u CLIENT\u IP
作为用户IP,而
REMOTE\u 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');
}

实际上,这是一个问题,通过此合并修复了

我看到了此代码。但在生产环境中有代理,而在dev测试服务器上没有代理。我该写什么
getClientIp(是否启用了代理)
?这太难看了<代码>trustProxyData()
在我在Symfony的配置中启用代理时调用。为什么要麻烦呢?当没有代理时,
的头
HTTP_CLIENT_IP
HTTP_X_FORWARDED_将被取消设置,并返回
REMOTE_ADDR