我已经apache2和nginx。我在配置中将“信任代理标头”设置为true,但无论如何,在拨打电话时获取内部IP $request->getClientIp();
我该怎么做?Symfony的请求和反向代理
如果我使用参数$proxy = true
与getClientIp
联系,那么我得到正确的IP。但是有代理头启用的配置不够?
我已经apache2和nginx。我在配置中将“信任代理标头”设置为true,但无论如何,在拨打电话时获取内部IP $request->getClientIp();
我该怎么做?Symfony的请求和反向代理
如果我使用参数$proxy = true
与getClientIp
联系,那么我得到正确的IP。但是有代理头启用的配置不够?
总之:如果您打算使用某种反向代理,您总是需要使用$proxy = true
。使用此参数集(并启用trustProxyData();
),$this->getClientIp();
将返回带有反向代理的正确IP。
说明:配置后,也代理头将返回HTTP_X_FORWARDED_FOR
或HTTP_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');
}
我看到这个代码。但是在生产中有代理,在开发测试服务器上没有代理。我应该写什么? 'getClientIp(IS_PROXY_ENABLED)'?这很丑陋。当我在Symfony的配置中启用代理时调用'trustProxyData()'。 – Koc
为什么要麻烦?当没有代理时,'HTTP_CLIENT_IP'和'HTTP_X_FORWARDED_FOR'这两个头将被取消设置,并返回'REMOTE_ADDR'。 –