我正在尝试实现以下方案。
环境:Windows Server 2012 / IIS 8 / .Net Web应用程序
当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。