设置 HTTP 到 HTTPS 重定向

此示例演示了如何使用网址重定向将来自端口 80 (HTTP) 的所有请求重定向到端口 443 (HTTPS)。

HTTPS 使用 TLS (SSL) 来加密 HTTP 请求和响应,使其更安全。使用 HTTPS 的网站在其网址开头使用 https://,而不是 http://

对于现有负载均衡器

如果您已有在端口 443 上传送 HTTPS 流量的外部 HTTPS 负载均衡器(此处称为 LB1),您必须创建一个具有以下设置的部分外部 HTTP 负载均衡器(此处称为 LB2):

  • 与 LB1 使用的前端 IP 地址相同
  • 网址映射中配置的重定向

此部分 HTTP 负载均衡器使用与 HTTPS 负载均衡器相同的 IP 地址,并将 HTTP 请求重定向到您的负载均衡器的 HTTPS 前端。

下图展示了此架构。

HTTP 到 HTTPS 重定向配置架构。
图 2.HTTP 到 HTTPS 重定向配置架构

将流量重定向到 HTTPS 负载均衡器

验证外部 HTTPS 负载均衡器 (LB1) 正常运行后,您可以创建部分外部 HTTP 负载均衡器 (LB2),并将其前端配置为将流量重定向到 LB1。

本示例使用 301 响应代码。您可以改用其他响应代码

如需使用 gcloud 配置重定向,您必须导入 YAML 文件,并确保目标 HTTP 代理指向重定向流量的网址映射。如果您使用的是 Cloud Console,则系统会为您处理此操作。

注意:Cloud Console 不支持区域级外部 HTTP(S) 负载均衡器。

gcloud

  1. 创建 YAML 文件 /tmp/web-map-http.yaml。以下示例使用 MOVED_PERMANENTLY_DEFAULT 作为响应代码。
  2.        kind: compute#urlMap
           name: web-map-http
           defaultUrlRedirect:
             redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
             httpsRedirect: True
           tests:
           - description: Test with no query parameters
             host: example.com
             path: /test/
             expectedOutputUrl: https://example.com/test/
             expectedRedirectResponseCode: 301
           - description: Test with query parameters
             host: example.com
             path: /test/?parameter1=value1&parameter2=value2
             expectedOutputUrl: https://example.com/test/?parameter1=value1&parameter2=value2
             expectedRedirectResponseCode: 301
           
  3. 验证网址映射。
  4. 如果测试通过并且命令输出成功消息,请将更改保存到网址映射。

  5. 通过导入 YAML 文件创建 HTTP 负载均衡器的网址映射。此网址映射的名称为 web-map-http
  6. 如果您正在更新现有网址映射,系统会显示以下提示:

           Url Map [web-map-http] will be overwritten.
    
           Do you want to continue (Y/n)?
           

    如需继续,请按 Y

  7. 验证网址映射已更新。您的 HTTP 负载均衡器的网址映射应如下所示:
  8. 使用 web-map-http 作为网址映射创建新的目标 HTTP 代理或更新现有目标 HTTP 代理。
  9. 创建转发规则以将传入请求路由到代理。--address 标志指定 lb-ipv4-1,这是用于外部 HTTPS 负载均衡器的 IP 地址。

测试从 HTTP 到 HTTPS 的重定向

请记下您用于两个负载均衡器的预留 IP 地址。

在本示例中,假设预留 IP 地址为 34.98.77.106http://34.98.77.106/ 网址会重定向到 https://34.98.77.106/

几分钟后,您可以通过运行以下 curl 命令来进行测试。

curl -v http://hostname.com

示例输出:

* Connected to 34.98.77.106 (34.98.77.106) port 80 (#0)
> GET / HTTP/1.1
> Host: hostname.com
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Cache-Control: private
< Content-Type: text/html; charset=UTF-8
< Referrer-Policy: no-referrer
< Location: https://hostname.com
< Content-Length: 220
< Date: Fri, 30 Jul 2021 21:32:25 GMT
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://hostname.com">here</A>.
</BODY></HTML>
* Connection #0 to host hostname.com left intact