阿里云SLB HTTP强制跳转到HTTPS
2016-05-25 by dongnan
更新: 新版的SLB已经支持 http to https
功能。
目标
阿里云SLB 配合后端ECS
上的Nginx
服务器,完成 http to https 301
强制跳转。
环境描述
某业务系统原有方式为 Haproxy
负载均衡器完成 http to https 301
跳转功能,
但是业务上云中发现阿里云SLB 不支持此功能,只能由后端ECS
上的 nginx
服务器完成这个功能。
Haproxy
- Haproxy (http to https 301) -> Nginx。
- Nginx 不需要做任何处理。
SLB
- SLB -> Nginx(http to https 301)。
- SLB 监听
80/443
端口。 - Nginx 监听 80/443(不需要配置ssl证书)。
吐槽
不过这里有个问题在创建 SLB添加 https
监听时,注意后端端口一定要使用 443
端口而不是默认的 80
端口。
在这个坑了爬了好久,因为使用默认的 80
端口后,nginx
配置 http to https 301
进入无限循环,50
次后强制退出,
这点阿里云真的很 low
,在SLB上加一个301
跳转功能个真的很难吗?
解决方法
SLB配置项
Nginx配置项
# 虚拟主机 80 端口
server
{
listen 80;
server_name b.ywwd.net;
index index.php index.shtml index.html;
root /var/www/html/;
error_page 404 /404.html;
#
add_header Strict-Transport-Security max-age=15768000;
return 301 https://$server_name$request_uri;
}
# 虚拟主机 443 端口
server
{
listen 443;
server_name b.ywwd.net;
index index.php index.shtml index.html;
root /var/www/html/;
error_page 404 /404.html;
#省略...
}
更改后重启nginx。
# 执行命令
nginx -t && nginx -s reload