跳转至

阿里云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



回到页面顶部