當我嘗試從SSL加密頁面切換回非加密(https - > http)時,我遇到無限重定向循環中卡住的情況。我們目前的配置設置的背後,創建一個頭的負載平衡器:HTTP_X_FORWARDED_PROTO使用SSL在Load Balancer後重定向循環PHP
當它被設置到SSL返回「https」開頭,othwerise它總是返回「HTTP」
下面的代碼我以前用的將SSL證書之前的網站移至負載平衡器,而不是網站運行的網絡節點。 (HTTP_X_FORWARDED_PROTO)已被添加以相應地更新腳本。
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])){
$redirect = '';
if (!isset($sslPage)){
$sslPage = false;
}
switch($_SERVER['HTTP_X_FORWARDED_PROTO']){
case 'http' :
if ($sslPage)
$redirect = 'location: https://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
break;
case 'https' :
if (!$sslPage)
//$redirect = 'location: http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
break;
}
if (!empty($redirect)){
header ($redirect);
}
}
需要打開ssl的每個頁面都有一個預加載的變量$ sslPage = true;
因此,從http重定向到https的工作很好..沒有問題。但是,如果我試圖倒退它不起作用。我陷入了一個無限循環。我開始認爲這是因爲apache。由於web節點不再終止SSL,所有通信都通過端口80運行。當php通過header()重定向時,我相信服務器會收集請求,因爲它是本地的並試圖解析它。由於HTTP_X_FORWARDED_PROTO從未更新,因爲它沒有再次觸及負載平衡器,所以重定向永遠不會成功。
我的問題是,如果這是有道理的,或者我對我的想法走錯了路?這個調用是否總是被轉發回負載均衡器?如果它保持在該網絡節點的內部,我該如何強制它返回到Load Balancer,以便它可以爲它嘗試檢索的頁面寫入新的標頭?
這已被證明是令人沮喪的....
感謝您的幫助提前。
乍得,你找到了解決辦法嗎?我正在努力解決同樣的問題。 – 2012-06-08 02:41:09