我有apache2和nginx。我在配置中将“trust proxy headers”设置为true,但无论如何在调用$request->getClientIp();
时获取内部ip我有什么不对?
如果我使用参数getClientIp
调用$proxy = true
,那么我会获得正确的IP。但是有一些配置启用了代理头,还不够吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
简而言之:如果您计划使用某种反向代理,则始终需要使用$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');
}