我已經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'。 –