Symfony';s请求和反向代理
我有apache2和nginx。我在配置中将“trust proxy headers”设置为true,但无论如何,在调用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()将
$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
。