20

私が抱えている問題は、Webサイトの一部のURLをHTTPSで保護し、残りをHTTPにキックする必要があることと関係があります。

通常、$_SERVER['HTTP_HTTPS']または$_SERVER['HTTPS'](Apacheのフレーバーに応じて)があります。ポートを確認することもできます。通常のトラフィックの場合は80、HTTPSの場合は443です。

私の問題は、証明書がロードバランサーにあり、これらの変数がすべて利用できず、Webサーバーがポート80でhttp://www.foo.comを参照することです。これを修正する1つの方法は、ロードバランサーにトラフィックを送信するように指示することです。別のポートですが、ロードバランサーからのHTTPSを検出する他の方法があるのでしょうか。

4

3 に答える 3

47

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";
}
于 2012-01-27T10:26:59.490 に答える
15

ロードバランサーがSSL接続のもう一方の端である場合、ロードバランサーが明示的に提供する以上の情報を取得することはできません。私はhttpヘッダーを追加するために行きます、それはすでにそれをしているかもしれません、すべてのHTTPヘッダーをダンプして見てください。

別の解決策として、URLに基​​づいてロードバランサーでリダイレクトを実行できます。

于 2009-01-16T23:23:23.663 に答える
1

$_SERVER['HTTP_X_FORWARDED_PROTO'] は、ロードバランサーがリダイレクションを実行し、force_ssl 設定を 1 または 2 に設定すると、joomla が常に http を参照するため、無限ループで終了するため、joomla ユーザーにとって適切なソリューションのようです。

于 2014-03-26T11:04:48.473 に答える