【华为云网络技术分享】HTTP重定向HTTPS配置指南
【摘要】 本文介绍使用华为云弹性负载均衡配置Http重定向到Https的方法。
1. HTTP、HTTPS 头部标识
ELB 对 HTTPS 进行代理,无论是 HTTP 还是 HTTPS 请求,到了 ELB 转发给后端 ECS 时,都是 HTTP 请求。这使开发者无法分辨前端的请求是 HTTP 还是 HTTPS。
ELB 在将请求转发给后端 ECS 时,头部 header 会植入 X-Forwarded-Proto:
X-Forwarded-Proto: http (前端为 HTTP 请求)
X-Forwarded-Proto: https (前端为 HTTPS 请求)
2. 弹性负载均衡配置
1. 创建负载均衡
1. 在负载均衡内创建HTTP:80端口监听器,后端云服务监听选择HTTP/8080端口,健康检查选择TCP协议(不能使用HTTP协议的健康检查)
3.在上一步骤创建的HTTP协议监听器下添加后端云服务器
4.在负载均衡内创建HTTPS:443端口监听器,后端云服务监听选择80端口,健康检查选择协议可以TCP也可以HTTP
5.在上一步骤创建HTTPS监听器下添加后端云服务器(可以和步骤3是同一批虚拟机)
6.一个ELB下两个监听器,分别监听HTTP:80和HTTPS:443,客户端访问HTTP:80会被重定向到HTTPS:443
后端Nginx服务器配置
假定用户需要访问网站 https://test.com 。开发者希望用户在浏览器中输入网址时,直接键入www.test.com 即可通过 HTTPS 协议安全访问。
此时用户输入的 www.test.com 请求转发流程如下:
1. 该请求以 HTTP 协议传输,通过弹性负载均衡提供的服务地址访问弹性负载均衡监听器的 80 端口,并被转发到后端云服务器的 8080 端口。
2. 通过在后端服务器的 nginx 上配置 rewrite 操作,该请求经过 8080 端口,并被重定向到 https://test.com 页面。
3. 此时浏览器再次发送 https://test.com 请求到相应的 HTTPS 站点,该请求通过弹性负载均衡提供的服务地址访问弹性负载均衡监听器的 443 端口,并被转发到后端云服务器的 80 端口。
至此,请求转发完成。
该操作在浏览器用户未感知的情况下,将用户的 HTTP 请求重写为更加安全的 HTTPS 请求。为实现以上请求转发操作,用户可以对后端Nginx服务器做如下配置:
server {
listen 8080;
server_name test.com;
rewrite ^/.(.*) https://$host/$1 redirect;
}
或者采用推荐的301重定向配置方法,将nginx http页面重定向到https页面:
server {
listen 8080;
server_name test.com;
return 301 https://$server_name$request_uri;
}
作者:樱桃小丸子