全部产品
Search
文档中心

负载均衡:HTTP重定向至HTTPS

更新时间:Jul 07, 2026

HTTPS是加密数据传输协议,安全性高。当您需要进行HTTPS安全改造时,您可以使用应用型负载均衡ALB将HTTP访问重定向至HTTPS,让用户在无感知的情况下将HTTP访问重定向至HTTPS。

功能简介

ALB提供HTTP到HTTPS的重定向功能。通过配置监听转发规则,将HTTP协议的请求重定向到HTTPS,从而确保数据传输加密,防止中间人攻击和数据泄露,帮助用户构建符合现代安全标准的网络架构。

image

关键特性

  • 灵活配置:支持自定义重定向规则,可以基于路径、HTTP标头等参数设置特定的重定向策略,满足复杂应用场景的需求。

  • 状态码设置:支持选择不同的HTTP状态码进行重定向,如301(永久重定向)或302(临时重定向)。

  • 性能优化:将重定向逻辑转移到负载均衡层,后端服务器无需处理重定向逻辑,专注于核心业务处理,提升整体效率。

应用场景

  • HTTPS安全改造:将现有网站或应用程序从HTTP改造为HTTPS,提升用户和服务器之间通信的安全性。

  • 域名更改/站点迁移:当网站迁移到新的域名时,使用重定向可以保持用户访问的连续性,避免流量损失。

  • 基于HTTP标头重定向:根据HTTP标头信息(如语言、设备类型等),将用户请求重定向至不同的HTTPS应用,实现个性化服务。

场景示例

某企业在阿里云华东1(杭州)地域购买的ALB实例部署了业务并对外提供服务。企业希望在域名保持不变的情况下,将HTTP协议切换为HTTPS协议,以实现数据加密,并提升用户体验的流畅性与多样性。

image

前提条件

  • 创建公网ALB实例 (基础版、标准版和WAF增强版均支持)。

  • 已为ALB实例创建服务器组 (后端协议为HTTP)。

  • 已在ALB实例的服务器组中分别添加ECS01和ECS02实例,并在ECS01和ECS02中均部署了应用服务。

    本文以Alibaba Cloud Linux 3操作系统为例,并使用Nginx配置HTTP 80服务。

    参考示例:ECS01部署测试服务

    yum install -y nginx
    systemctl start nginx.service
    cd /usr/share/nginx/html/
    echo "Hello World ! This is ECS01." > index.html
  • 已为ALB实例创建HTTP监听

  • 注册自有域名并完成ICP备案,且通过自有域名为ALB配置CNAME解析

  • 创建并申请证书或者上传第三方证书到SSL证书服务并绑定自有域名。

操作步骤

本文通过以下两种方式介绍通过ALB实现HTTP访问重定向至HTTPS,您可以按需配置:

  • HTTP端口所有请求重定向至HTTPS:无条件地将所有到达ALB的HTTP请求重定向到HTTPS,适用于强制要求所有访问都使用HTTPS的场景,例如全站启用HTTPS或统一安全策略。

  • 基于HTTP标头重定向至HTTPS:基于HTTP请求头(如语言、设备类型等)进行条件判断,只有满足特定条件的请求才会被重定向。适用于需按条件区分跳转目标的场景,例如,可以根据用户语言偏好重定向到不同的语言版本网站,或者根据设备类型(手机、平板、PC)或浏览器版本,将请求重定向到移动端或桌面端的HTTPS版本。

HTTP端口所有请求均重定向至HTTPS

步骤一:配置HTTPS监听

  1. 应用型负载均衡ALB控制台顶部菜单栏选择ALB实例所属地域。

  2. 在ALB实例页面,单击目标实例ID。

  3. 监听页签,单击创建监听

  4. 负载均衡业务配置向导页面,完成以下配置,然后单击下一步

    此处仅列出和本文强相关的配置项,HTTPS监听其他参数配置可保持默认值或根据实际情况修改。

    1. 配置监听配置向导,选择监听协议HTTPS监听端口443,然后单击下一步

    2. 配置SSL证书配置向导,选择已创建好的服务器证书。然后单击下一步

    3. 选择服务器组配置向导,选择已创建好的服务器组,并查看后端服务器信息,然后单击下一步

    4. 配置审核配置向导页面,确认配置信息,单击提交

步骤二:配置监听转发规则

  1. 监听页签,找到已创建的HTTP监听,然后在操作列单击查看/编辑转发规则

  2. 转发规则页签,单击插入新规则

  3. 插入转发规则区域,配置下表参数,然后单击确定

    此处仅列出和本文强相关的配置项,转发规则其他参数配置可保持默认值或根据实际情况修改。

    参数

    说明

    转发条件

    选择路径并输入/*

    转发动作

    选择重定向至

    • 协议:本示例选择HTTPS

    • 端口:输入您已创建的HTTPS协议监听端口。本文输入443

    • 状态码:本示例保持默认值301

步骤三:结果验证

以任意一台可以访问公网的终端为例,测试访问ALB的HTTP请求是否能够重定向至HTTPS。

  1. 打开终端的命令行窗口。

  2. 执行curl -v -L http://<自有域名>

    执行命令后,收到状态码301,表示访问ALB的请求重定向至HTTPS,应答服务器为ECS01。

    curl -v http://xxx
    * Connected to xxx (xxx) port 80 (#0)
    > GET / HTTP/1.1
    > Host: xxx
    > User-Agent: curl/7.88.1
    > Accept: */*
    >
    < HTTP/1.1 301 Moved Permanently
    < Date: xxx
    < Content-Type: text/html
    < Content-Length: 134
    < Connection: keep-alive
    < Location: https://xxx/
    <
    * Connected to xxx (xxx) port 443 (#1)
    * TLSv1.2 (OUT), TLS header, Certificate Status (22):
    * TLSv1.2 (OUT), TLS handshake, Client hello (1):
    * TLSv1.2 (IN), TLS handshake, Server hello (2):
    * TLSv1.2 (IN), TLS handshake, Certificate (11):
    * TLSv1.2 (IN), TLS handshake, Server key exchange (12):
    * TLSv1.2 (IN), TLS handshake, Server finished (14):
    * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
    * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
    * TLSv1.2 (OUT), TLS handshake, Finished (20):
    * TLSv1.2 (IN), TLS handshake, Finished (20):
    * SSL connection using TLSv1.2
    > GET / HTTP/2
    > Host: xxx
    > user-agent: curl/7.88.1
    > accept: */*
    >
    < HTTP/2 200
    < date: xxx
    < content-type: text/html
    < content-length: 32
    < server: Tengine
    <
    Hello World ! This is ECS01.

    重复执行命令,应答服务器变为ECS02。

    curl -v http://xxx
    * Connected to xxx (xxx) port 80 (#0)
    > GET / HTTP/1.1
    > Host: xxx
    >
    < HTTP/1.1 301 Moved Permanently
    < Location: https://xxx/
    <
    * Connected to xxx (xxx) port 443 (#1)
    * SSL connection using TLSv1.2
    > GET / HTTP/2
    > Host: xxx
    > user-agent: curl/7.88.1
    > accept: */*
    >
    < HTTP/2 200
    < date: xxx
    < content-type: text/html
    < content-length: 32
    < server: Tengine
    <
    Hello World ! This is ECS02.

基于HTTP标头重定向至HTTPS

本文以HTTP标头Accept-Languagezh-CN,zh的HTTP请求重定向至HTTPS为例。

步骤一:配置HTTPS监听

  1. 应用型负载均衡ALB控制台顶部菜单栏选择ALB实例所属地域。

  2. 在ALB实例页面,单击目标实例ID。

  3. 监听页签,单击创建监听

  4. 负载均衡业务配置向导页面,完成以下配置,然后单击下一步

    此处仅列出和本文强相关的配置项,HTTPS监听其他参数配置可保持默认值或根据实际情况修改。

    1. 配置监听配置向导,选择监听协议HTTPS监听端口443,然后单击下一步

    2. 配置SSL证书配置向导,选择已创建好的服务器证书。然后单击下一步

    3. 选择服务器组配置向导,选择已创建好的服务器组,并查看后端服务器信息,然后单击下一步

    4. 配置审核配置向导页面,确认配置信息,单击提交

步骤二:配置监听转发规则

  1. 监听页签,找到已创建的HTTP监听,然后在操作列单击查看/编辑转发规则

  2. 转发规则页签,单击插入新规则

  3. 插入转发规则区域,配置下表参数,然后单击确定

    此处仅列出和本文强相关的配置项,转发规则其他参数配置可保持默认值或根据实际情况修改。

    参数

    说明

    转发条件

    选择HTTP标头

    • 键是:本示例输入Accept-Language

    • 值是:本示例输入zh-CN,zh

    转发动作

    选择重定向至

    • 协议:本示例选择HTTPS

    • 域名:输入您的自有域名。

    • 端口:输入您已创建的HTTPS协议监听端口。本文输入443

    • 状态码:本示例选择302

步骤三:结果验证

以任意一台可以访问公网的终端为例,测试访问ALB的HTTP请求是否能够重定向至HTTPS。

  1. 打开终端的命令行窗口。

  2. 执行curl -v -L -H "Accept-Language: zh-CN,zh" http://<自有域名>.

    执行命令后,收到状态码302,表示访问ALB的请求重定向至HTTPS,应答服务器为ECS01。

    curl -v -H "Accept-Language: zh-CN,zh" http://xxx
    * Connected to xxx (xxx) port 80 (#0)
    > GET / HTTP/1.1
    > Host: xxx
    > User-Agent: curl/7.88.1
    > Accept: */*
    > Accept-Language: zh-CN,zh
    >
    < HTTP/1.1 302 Found
    < Date: xxx
    < Content-Type: text/html
    < Content-Length: 134
    < Connection: keep-alive
    < Location: https://xxx/
    <
    * Connected to xxx (xxx) port 443 (#1)
    * TLSv1.2 (OUT), TLS header, Certificate Status (22):
    * TLSv1.2 (OUT), TLS handshake, Client hello (1):
    * TLSv1.2 (IN), TLS handshake, Server hello (2):
    * TLSv1.2 (IN), TLS handshake, Certificate (11):
    * TLSv1.2 (IN), TLS handshake, Server key exchange (12):
    * TLSv1.2 (IN), TLS handshake, Server finished (14):
    * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
    * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
    * TLSv1.2 (OUT), TLS handshake, Finished (20):
    * TLSv1.2 (IN), TLS handshake, Finished (20):
    * SSL connection using TLSv1.2
    > GET / HTTP/2
    > Host: xxx
    > user-agent: curl/7.88.1
    > accept: */*
    > accept-language: zh-CN,zh
    >
    < HTTP/2 200
    < date: xxx
    < content-type: text/html
    < content-length: 32
    < server: Tengine
    <
    Hello World ! This is ECS01.

    重复执行命令,应答服务器变为ECS02。

    curl -v -H "Accept-Language: zh-CN,zh" http://xxx
    * Connected to xxx (xxx) port 80 (#0)
    > GET / HTTP/1.1
    > Host: xxx
    > Accept-Language: zh-CN,zh
    >
    < HTTP/1.1 302 Found
    < Location: https://xxx/
    <
    * Connected to xxx (xxx) port 443 (#1)
    * SSL connection using TLSv1.2
    > GET / HTTP/2
    > Host: xxx
    > user-agent: curl/7.88.1
    > accept: */*
    > accept-language: zh-CN,zh
    >
    < HTTP/2 200
    < date: xxx
    < content-type: text/html
    < content-length: 32
    < server: Tengine
    <
    Hello World ! This is ECS02.

重定向状态码说明

ALB重定向状态码默认为301,您可以根据业务需求选择其他重定向状态码。ALB支持的重定向状态码及说明如下:

状态码

说明

301

永久移动。请求的资源已被永久移动至新的URL,建议客户端的请求都使用新的URL代替。

302

临时移动。请求的资源只是临时被移动,客户端应继续使用原有URL访问。

303

与302类似表示资源的临时移动,无论原始请求方法是什么,要求客户端在重定向后使用GET方法发起请求。

307

与302类似表示资源的临时移动,但客户端必须保持原请求方法(如POST请求重定向后仍为POST,不允许POST转为GET)。

308

与301类似表示资源的永久移动,客户端必须保持原请求方法(如POST请求重定向后仍为POST,不允许POST转为GET)。

关于状态码说明的更多信息请参见HTTP/1.1标准(RFC 7231)

相关文档

  • 若您的业务有更高的安全需求,您可以进一步了解ALB的以下功能:

    • 全链路HTTPS加密通信:ALB提供全链路HTTPS加密功能,可以实现客户端到ALB、ALB到后端服务器之间的全链路加密通信,提升敏感业务的安全性。

    • HTTPS双向认证:ALB提供HTTPS双向认证功能,在客户端与服务端建立连接之前,双方需进行身份验证。仅在双方均成功通过认证后,方可建立安全通信通道进行数据传输,从而确保只有授权的客户端能够访问接入,有效降低中间人攻击和未授权访问等安全风险。

  • 了解更多关于监听的转发条件以及转发动作,请参见配置监听转发规则

  • 通过ALB监听转发规则还可以实现以下场景需求:

    • 流量镜像仿真压测:将在线流量镜像到测试环境,验证测试业务而不影响线上业务。

    • 实现灰度发布:通过条件或权重转发规则,将部分请求转发至新版本应用,逐步验证稳定性。