IIS HTTP到HTTPS重定向无法在AWS ELB后面工作

时间:2016-12-20 08:49:51

标签: .net amazon-web-services url-rewriting iis-8 amazon-elb

我正在尝试实现以下方案。

环境:Windows Server 2012 / IIS 8 / .Net Web应用程序

  • 访问者到达HTTP登录页面(客户需要HTTP,而不是登录页面的HTTPS)。
  • 他们在着陆页上输入详细信息,然后提交并发送到结算页面。
  • 发送到结算页面时,代码会检查目标网页当前是否为HTTP / S.
  • 如果着陆页目前是HTTP,则会话应更改为HTTPS。如果已经是HTTPS,则无需进行任何更改。

当IIS不在AWS ELB后面时(即直接发送到IIS的流量),这可以正常工作。

当处于负载平衡配置(即ELB后面的2个服务器)时,不会发生重定向,因此访问HTTP上的登录页面的访问者不会重定向到HTTPS。如果他们没有注意,他们可以输入无担保的卡片详细信息。

检查并执行HTTP-> HTTPS的代码如下:

protected virtual void RedirectToBillingPage()
    {
        string urlScheme = "http";
        bool isHTTPS = RedirectToSecure;
        string billingHost = WebConfigurationManager.AppSettings["BillingHost"];
        if (string.IsNullOrEmpty(billingHost) && (string.Equals("https", Request.Url.Scheme) || !isHTTPS))
        {
            Response.Redirect(string.Format("Billing.aspx?aff={0}&sub={1}&cid={2}{3}{4}",
                AffiliateData.Affiliate, AffiliateData.SubAffiliate, AffiliateData.ClickID, 
                !string.IsNullOrEmpty(CouponCode) ? "&cpn=" + CouponCode : "",
                !string.IsNullOrEmpty(Request["exit"]) ? "&exit=" + Request["exit"] : ""));
            return;
        }

        string encryptedData = string.Empty;
        if (isHTTPS) urlScheme = "https";
        if (isHTTPS || !string.IsNullOrEmpty(billingHost))
        {
            var s = new UrlStorage();
            BackupSessionAndCookie(s);
            encryptedData = HttpUtility.UrlEncode(s.EncyptToString());
        }
        string path = null;
        try
        {
            path = string.Format("{0}://{1}?{2}"
                    , urlScheme
                    , !string.IsNullOrEmpty(billingHost) ? billingHost + (!billingHost.EndsWith("/") ? "/" : "") + "Billing.aspx"
                    : Request.Url.Authority + Request.Url.AbsolutePath.ToLower().Replace("landing.aspx", "billing.aspx")
                    , (encryptedData != string.Empty ? "dta=" + encryptedData + "&" : "") +
                    "aff=" + AffiliateData.Affiliate + "&sub=" + AffiliateData.SubAffiliate + "&cid=" + AffiliateData.ClickID +
                    (!string.IsNullOrEmpty(CouponCode) ? "&cpn=" + CouponCode : "") +
                    (!string.IsNullOrEmpty(Request["exit"]) ? "&exit=" + Request["exit"] : ""));

        }
        catch { }
        if (!string.IsNullOrEmpty(path)) Response.Redirect(path);
    }

有关为什么会失败的任何见解?

我应该补充说,还为ELB和IIS之间的HTTP / S配置了IIS。

0 个答案:

没有答案