昨天解决了在阿里云负载均衡上部署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. (转)Android消息处理机制(Handler、Looper、MessageQueue与Message)

    转自 http://www.cnblogs.com/angeldevil/p/3340644.html Android消息处理机制(Handler.Looper.MessageQueue与Messag ...

  2. mysql备份文件注释乱码处理工具

    我们有时候需要做mysql数据库的注释,可是备份出来的是乱码,怎么办呢? 本工具软件来帮你的忙. 将GBK库备份后的文本文件中夹带的UTF8乱码转换为GBK编码,就不再乱码了. http://down ...

  3. 织梦建站:视频弹出播放JS+CSS

    需要 jquery.js 文件,JS代码一定要放在HTM下面,否则没效果罗! CSS代码: 1.fdspbf{ width:650px; height:550px; position:fixed; l ...

  4. cv_prj2

    Computer Vision Project 2 – Harris Corner Detector 姓名: 王兴路 学号: 3140102282 指导老师: 宋明黎 2016-12-16 19:30 ...

  5. C# this和base的使用

    namespace THISORBASE { //参考地址:http://blog.sina.com.cn/s/blog_7300c7d90100rs20.html /*这个时候,派生类和基类的_st ...

  6. 深入研究C语言 第二篇(续)

    1. 关于如下的程序,关于结构体的拷贝,拷贝是拷贝到内存中的什么地方? 我们进入debug进行反汇编,单步等操作跟踪查看.发现: 在main中,我们看到call 0266应该对应的是转跳到func处执 ...

  7. text-align:justify的使用

    在平常的开发过程中,对于text-align一般用到的是left,center,right,这三个属性都不会陌生.然而,对于justify的使用我却是很陌生.首先有个比较简单的例子. 首先是html代 ...

  8. 堆排序Heap sort

    堆排序有点小复杂,分成三块 第一块,什么是堆,什么是最大堆 第二块,怎么将堆调整为最大堆,这部分是重点 第三块,堆排序介绍 第一块,什么是堆,什么是最大堆 什么是堆 这里的堆(二叉堆),指得不是堆栈的 ...

  9. leaflet创建简单地图

    一.leaflet介绍: 1.Leaflet 是一个为建设移动设备友好的互动地图,而开发的现代的.开源的 JavaScript 库.它是由 Vladimir Agafonkin 带领一个专业贡献者团队 ...

  10. Word 2007 文档结构图混乱

    Word 2007在编写大型文档时经常出现文档结构图混乱的情况,经过多番检索试验,得出结论: 绝对有效的临时性解决方案:在打开word的时候左下角会有提示word自动更新文档样式,按esc键取消,然后 ...