本页面介绍如何为区域级外部应用负载均衡器设置 HTTP 到 HTTPS 重定向。本页面仅适用于区域级外部应用负载均衡器。如果您使用的是其他模式的负载均衡器,请参阅以下某个页面:
此示例展示了如何使用网址映射重定向将所有请求从 HTTP 重定向到 HTTPS。本示例演示了如何使用知名端口 80(适用于 HTTP)和 443(适用于 HTTPS)来设置重定向。但是,您不需要使用这些特定的端口号。应用负载均衡器的每个转发规则可以引用 1-65535 中的单个端口。
HTTPS 使用 TLS (SSL) 来加密 HTTP 请求和响应,使其更安全。使用 HTTPS 的网站在其网址开头使用 https://
,而不是 http://
。
对于新的 HTTPS 负载均衡器
创建新的外部负载均衡器时,区域级外部应用负载均衡器不支持创建从 HTTP 到 HTTPS 的重定向。您需要先按照 Compute Engine 后端指南中的说明创建新的负载均衡器。然后,您可以按照下一部分中的说明为所有从 HTTP 到 HTTPS 的请求设置重定向。
此过程假定您已有一个在端口 443 上传送 HTTPS 流量的外部 HTTPS 负载均衡器。
对于现有负载均衡器
如果您已有在端口 443 上传送 HTTPS 流量的 HTTPS 应用负载均衡器(此处称为 LB1),您必须创建一个具有以下设置的部分 HTTP 应用负载均衡器(此处称为 LB2):
- 与 LB1 使用的前端 IP 地址相同
- 网址映射中配置的重定向
此部分 HTTP 负载均衡器使用与 HTTPS 负载均衡器相同的 IP 地址,并将 HTTP 请求重定向到您的负载均衡器的 HTTPS 前端。
下图展示了此架构。
将流量重定向到 HTTPS 负载均衡器
验证 HTTPS 负载均衡器 (LB1) 正常运行后,您可以创建部分 HTTP 负载均衡器 (LB2),并将其前端配置为将流量重定向到 LB1。
本示例使用 301 响应代码。您可以改用其他响应代码。
如需使用 gcloud
配置重定向,您必须导入 YAML 文件,并确保目标 HTTP 代理指向重定向流量的网址映射。如果您使用的是 Google Cloud 控制台,则系统会为您处理此操作。
Google Cloud 控制台不支持区域级外部应用负载均衡器。
gcloud
- 创建 YAML 文件
/tmp/web-map-http.yaml
。以下示例使用 MOVED_PERMANENTLY_DEFAULT 作为响应代码。 - 通过导入 YAML 文件创建 HTTP 负载均衡器的网址映射。此网址映射的名称为
web-map-http
。 - 验证网址映射已更新。您的 HTTP 负载均衡器的网址映射应如下所示:
- 使用
web-map-http
作为网址映射创建新的目标 HTTP 代理或更新现有目标 HTTP 代理。 - 创建转发规则以将传入请求路由到代理。
--address
标志指定lb-ipv4-1
,这是用于外部 HTTPS 负载均衡器的 IP 地址。
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¶meter2=value2 expectedOutputUrl: https://example.com/test/?parameter1=value1¶meter2=value2 expectedRedirectResponseCode: 301
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --region=REGION
如果您正在更新现有网址映射,系统会显示以下提示:
Url Map [web-map-http] will be overwritten. Do you want to continue (Y/n)?
如需继续,请按 Y。
gcloud compute url-maps describe web-map-http \ --region=REGION
creationTimestamp: '2020-03-23T10:53:44.976-07:00' defaultUrlRedirect: httpsRedirect: true redirectResponseCode: MOVED_PERMANENTLY_DEFAULT fingerprint: 3A5N_RLrED8= id: '2020316695093397831' kind: compute#urlMap name: web-map-http selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/urlMaps/web-map-http
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=web-map-http \ --region=REGION
gcloud compute target-http-proxies update http-lb-proxy \ --url-map=web-map-http \ --region=REGION
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --address=lb-ipv4-1 \ --network-tier=STANDARD \ --region=REGION \ --target-http-proxy=http-lb-proxy \ --target-http-proxy-region=REGION \ --ports=80
测试从 HTTP 到 HTTPS 的重定向
请记下您用于两个负载均衡器的预留 IP 地址。
gcloud compute addresses describe lb-ipv4-1
--format="get(address)"
--region=REGION
在本示例中,假设预留的 IP 地址为 34.98.77.106
。http://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
相关过程
如需使用 Terraform,请参阅 HTTP 到 HTTPS 重定向标签页。
对于 GKE,请参阅 GKE 文档中的 HTTP 到 HTTPS 重定向。
对于内部应用负载均衡器,请参阅为内部应用负载均衡器设置 HTTP 到 HTTPS 重定向。
对于其他类型的重定向,请参阅网址重定向。