昨天解决了在阿里云负载均衡上部署https证书的问题(详见一个空行引起的阿里云负载均衡上部署https证书的问题),并完成了部署,负载均衡的监听配置是这样的:

用户与负载均衡之间走https协议,负载均衡与后端服务器之间走http协议,这样的好处之一是后端服务器不用一台台安装证书了。

今天早上准备实现当用户以http访问站点时自动跳转为https访问,于是想当然地在后端web服务器中添加了一条如下的URL重写规则(IIS URL Rewrite Module):

<rewrite>
<rules>
<rule name="redirect_http_to_https" stopProcessing="true">
<match url="^$" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
<add input="{REMOTE_ADDR}" pattern="^127.0.0.1$" negate="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/" redirectType="Temporary" />
</rule>
</rules>
</rewrite>

结果http的确跳转为https,但是直接以https访问,Chrome浏览器却出现“Redirect too many times”的错误,https访问竟然也会跳转,怎么回事?

停下来一想,立马恍然大悟:自己早上还没睡醒,忘了负载均衡与后端服务器之间始终走的是http协议,不管用户是http访问还是https访问,后端服务器收到的都是http请求,在后端服务器上根本区分不出用户用的是http还是https,根本无法通过上面的URL重写实现。

向阿里云反馈这个情况,从客服那得到的一个解决方法是在后端服务器上也部署https证书,让负载均衡与后端服务器之间也走https协议。

在众多后端服务器上一台台部署证书,好麻烦;仅仅为了重定向而让负载均衡与后端服务器的通信协议由http改为https,好浪费。最经济环保的解决方法是负载均衡直接支持URL重写,我只需在负载均衡控制台添加一条URL重写规则。已经向阿里云提出了建议,希望能尽早实现。

更新:后来阿里云实现了:“通过X-Forwarded-Proto头字段获取SLB的监听协议”

在ASP.NET Core中的实现代码如下:

public class RedirectToProxiedHttpsRule : RedirectToHttpsRule
{
public RedirectToProxiedHttpsRule()
{
base.StatusCode = StatusCodes.Status301MovedPermanently;
base.SSLPort = null;
}
public override void ApplyRule(RewriteContext context)
{
var key = "X-Forwarded-Proto";
var request = context.HttpContext.Request;
if (request.Headers.ContainsKey(key))
{
if (request.Headers[key].FirstOrDefault() == "http")
{
base.ApplyRule(context);
}
}
}
}
public class Startup
{
public void Configure(IApplicationBuilder app,
IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var rewriteOptions = new RewriteOptions();
rewriteOptions.Rules.Add(new RedirectToProxiedHttpsRule());
app.UseRewriter(rewriteOptions);
}
}

使用阿里云负载均衡遭遇的http重定向https的问题的更多相关文章

  1. 一个空行引起的阿里云负载均衡上部署https证书的问题

    今天在阿里云上购买了WoSign的https证书,在证书签发后,在控制台下载证书文件,一共有2个文件,一个是.key文件(私钥文件),一个是.pem文件(证书文件). 然后在阿里云负载均衡“证书管理” ...

  2. 阿里云负载均衡SSL证书配置

    阿里云负载均衡SSL证书 转载请注明地址:http://www.cnblogs.com/funnyzpc/p/8908461.html 好久了呢,距上篇博客的这段时间中:考试.搬家.工作赶工.业务考察 ...

  3. 阿里云负载均衡SSL证书配置(更新)

    阿里云负载均衡及应用防火墙SSL证书配置 转载请注明地址:http://www.cnblogs.com/funnyzpc/p/8908461.html 好久了呢,距上篇博客的这段时间中:考试.搬家.工 ...

  4. 阿里云 负载均衡 HTTP转HTTPS

    一.相关文档 1.证书服务 2.简单路由-HTTP 协议变为 HTTPS 协议 二.阿里云操作界面 1.云盾证书服务管理控制台(查询CA证书服务) 2.负载均衡管理控制台 三.相关文档 1.Syman ...

  5. 阿里云负载均衡配置https记录

    配置前端协议是443,后端是80 问题1记录: 例如访问https://www.xxx.com,在后端服务器上面获取是http还是https请求协议实际上是http: 因为我们先请求负载均衡,负载均衡 ...

  6. 阿里云负载均衡-note

    公网负载均衡实例 公网类型的负载均衡实例可以通过Internet将客户端请求按照您制定的监听规则分发到添加的后端服务器ECS上. 在您创建公网负载均衡实例后,系统会为其分配一个公网服务地址,您可以将您 ...

  7. 阿里云负载均衡SLB的文件上传下载问题解决

    Nfs同步文件夹配置 问题描述 : javaweb应用部署到云服务器上时,当服务器配置了SLB负载均衡的时候,多台服务器就会造成文件上传下载获取不到文件的错误, 解决办法有:1.hdfs  2.搭建f ...

  8. 阿里云负载均衡SLB上用免费的Let's Encrypt的SSL证书

    Let's Encrypt是很火的一个免费SSL证书发行项目,自动化发行证书,证书有90天的有效期.Let's Encrypt已经发布了工具certbot,用此工具生成证书.证书续期非常简单. 以下是 ...

  9. asp.net core中负载均衡场景下http重定向https的问题

    上周欣喜地发现,微软官方终于针对 asp.net core 在使用负载均衡的情况下从 http 强制重定向至 https 的问题提供了解决方法. app.UseForwardedHeaders(new ...

随机推荐

  1. .Net判断一个对象是否为数值类型

    这乍一听是个很简单的事,但突然搞起来还真有点无从下手的感觉. 首先当然是通过GetType()方法反射获取其类型信息,然后对其进行分析,但是类型信息Type中并没有简单地给出这么一个属性进行判断. 老 ...

  2. 如何搭建一个WAMP环境

    最近的一些比赛需要用到PHP,所以急需配置一个PHP的环境,所以分享出来我的经历  一.使用wampserver 这是一个集成软件包,可以一键配置Apache+Mysql+PHP,还具有简单的图形界面 ...

  3. MVC 前台向后台传输数据

    今天,我们一起来学习下.MVC如何在前台给后台传输数据 (1)前台传输数据到后台 具体思路:前台拼凑json字符串,然后通过 get 或 post 方式,传递到后台 Action 方法中 我现在前台展 ...

  4. NashZhou的自我介绍

    行业: 电子商务服务业,目前主要是淘宝开放平台,ISV 关键词: 电商,淘宝直通车,关键词广告,自动优化 当前目标: 广告算法 广告主自动优化 希望能在这里结识有共同爱好踏实上进的园友,共同学习,共同 ...

  5. C# rename方法重命名文件

    记得C# File类中是没有rename这个方法 所以网上很多都用的是move moveTo copy+delete等这些方法 其实以上的方法 虽然可以实现功能 但看起来总觉得很蛋疼 今天百度 突然发 ...

  6. fool

    from PIL import Imageimg = Image.open("D:\\pic2\\CZA3302.png")(w,h) = img.sizeim=img.conve ...

  7. 《CODE》读后笔记——第21~25章

    21.总线连接 总线是提供给计算机中每块电路板的数字信号的集合,这些信号可以分为4类:地址信号,数据输入信号,数据输出信号,控制信号.另外,总线给计算机中的各个电路板提供电源. S-100总线:早期流 ...

  8. 如何辨别具体的一种SaaS是否安全?

    如何辨别具体的一种SaaS是否安全,需要把握以下几点: 1.传输协议加密 首先,要看SaaS产品提供使用的协议,是https://还是一般的http://,别小看这个s,这表明所有的数据在传输过程中都 ...

  9. Maven仓库管理-Nexus

    Maven仓库管理-Nexus @import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style& ...

  10. maven SpringMVC easyUI项目创建

    在Eclipse中使用Maven创建SpringMVC项目,项目所需软件及工具可以在官网下载.Maven.Nexus及Eclipse集成Maven等到此配置完毕. 1.Maven创建Web项目. 打开 ...