[英]Detecting HTTPS requests in PHP
我遇到的問題與需要保留一些受HTTPS保護的網站的網址有關,而其余部分則被踢到HTTP。
通常,您有$_SERVER['HTTP_HTTPS']
或$_SERVER['HTTPS']
(取決於您的Apache風格)。 您還可以檢查端口 - 正常流量為80,HTTPS為443。
我的問題是證書位於負載均衡器上 ,並且所有這些變量都不可用,並且網絡服務器在端口80上看到http://www.foo.com 。解決此問題的一種方法是告訴負載均衡器發送流量一個不同的端口,但我想知道是否有其他方法來檢測來自負載均衡器的HTTPS?
如果任何人在Amazon AWS Elastic Load Balancer背后有相同的問題,解決方案很簡單,因為$_SERVER
變量將包括:
[HTTP_X_FORWARDED_PORT] => 443
[HTTP_X_FORWARDED_PROTO] => https
因此,要獲得協議,您可以使用:
function getRequestProtocol() {
if(!empty($_SERVER['HTTP_X_FORWARDED_PROTO']))
return $_SERVER['HTTP_X_FORWARDED_PROTO'];
else
return !empty($_SERVER['HTTPS']) ? "https" : "http";
}
如果負載均衡器是SSL連接的另一端,則無法獲得比負載均衡器明確提供的更多信息。 我會去添加一個http標頭,它可能已經這樣做,轉儲所有HTTP標頭並查看。
作為另一種解決方案,您可以基於URL在負載均衡器上執行重定向。
$ _SERVER ['HTTP_X_FORWARDED_PROTO']似乎是joomla用戶的一個很好的解決方案,因為如果你的loadbalancer進行了重定向並且你將force_ssl設置為1或2,那么你將以無限循環結束,因為joomla總是看到http:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.