7

Amazonのエラスティックロードバランサーの背後でASP.NETMVC4アプリケーションを実行しています。ロードバランサーWebサーバーにSSL証明書をインストールし、WebサーバーレイヤーでSSLを終了すると、すべて正常に機能します。

ただし、ロードバランサーレイヤーで終了しようとすると、内部トラフィックがロードバランサーからポート80で暗号化されていないWebサーバーに転送されると、RequireHttps属性によってリダイレクトループが発生します。これは、暗号化されたチャネルを要求していて、それが(ブラウザーとロードバランサーの間で)取得していることを知らないため、一見理にかなっています。誰かがこれと同じ問題に遭遇しましたか?任意の提案をいただければ幸いです!

編集:ソリューション

次のリンクは、この問題が発生した他の人に役立つ可能性があります。

MVC3、RequireHttps、およびカスタムハンドラーの結果はhttp310になります

https://gist.github.com/915869

4

3 に答える 3

7

AWS でこの機能を使用するには、「X-Forwarded-Proto」HTTP ヘッダー項目を見るようです。最初のリクエストが HTTPS の場合、ロード バランサーはヘッダーを挿入し、「https」と表示されます。HTTP の場合は、「http」と表示されます。

回答はこちら: http://aws.typepad.com/aws/2010/10/keeping-customers-happy-another-new-elastic-load-balancer-feature.html

于 2012-08-27T23:31:53.823 に答える
6

次の RequireHttpsAttribute フィルターが機能することがわかったのと同じ問題が発生していました。

public class SSLFilter : RequireHttpsAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }

        if (filterContext.HttpContext.Request.IsLocal ||
            (filterContext.RequestContext.HttpContext.Request.Headers.AllKeys.Contains("X-Forwarded-Proto") &&
            filterContext.RequestContext.HttpContext.Request.Headers.Get("X-Forwarded-Proto").ToLower().Equals("https")))
        {
            return;
        }

        base.OnAuthorization(filterContext);
    }
}
于 2015-07-01T07:32:31.373 に答える