我目前有一个托管在 Google Compute Engine 上的网站,该网站使用位于负载均衡器后面的 Identity-Aware-Proxy 进行身份验证。这一切在 https 上都运行良好,但我想确保 http 重定向到 https,因为它目前只响应 404。
因此,我跟随https://cloud.google.com/load-balancing/docs/https/setting-up-http-https-redirect它告诉您设置第二个负载均衡器以将 http 流量重定向到 https。
然而问题是,按照这些说明操作后,当我浏览到http://my-website.com我收到以下错误:
错误 403(禁止)!1
- 这是一个错误。
您的客户端无权从此服务器获取 URL /。这就是我们所知道的全部。
尽管 http 负载平衡器设置了 301 - 永久移动完整路径重定向,但在浏览器开发人员工具网络选项卡中并没有发生重定向。它只是直接响应 403。URL 也保留了 http:// 方案。
总而言之,我的设置如下:
外部 HTTPS 负载均衡器
- 前端 - HTTPS、静态 IP、仅 HTTPS
- 后端 - Identity-Aware-Proxy(通过 Identity Platform 进行电子邮件身份验证)-> Compute Engine 实例组
外部 HTTP 负载均衡器
- 前端 - HTTP,静态 IP(与上面的 HTTPS 负载均衡器相同)
- 后端 - 无
- 主机和路径规则:
- 模式:高级主机和路径规则(URL 重定向、URL 重写)
- 行动:将客户端重定向到不同的主机/路径
- 主机重定向: https://my-website.com
- 路径值:*
- 重定向响应代码:301 - 永久移动
- HTTPS 重定向:已启用
如果您能提供任何关于如何修复此问题且不出现 403 错误的想法,我们将不胜感激!
答案1
您描述的方式看起来你的 url-map 有问题因为您可以访问http
您的网站的版本。
为了绝对确定,请再检查一次(或创建新的)url-map 使用gcloud
命令:
gcloud compute url-maps describe web-map-http
creationTimestamp: '2020-12-02T03:18:27.053-08:00'
defaultUrlRedirect:
httpsRedirect: true
redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
fingerprint: KU2hPu1ao=
id: '50586028237895404'
kind: compute#urlMap
name: web-map-http
selfLink: https://www.googleapis.com/compute/v1/projects/xxxxx/global/urlMaps/web-map-http
准备好 URL 映射后,创建目标代理:
gcloud compute target-http-proxies create http-lb-proxy \
--url-map=web-map-http \
--global
结果:
gcloud compute target-http-proxies describe http-lb-proxy
creationTimestamp: '2020-12-02T03:19:39.090-08:00'
fingerprint: lgJkIY8E=
id: '3781119498457764'
kind: compute#targetHttpProxy
name: http-lb-proxy
selfLink: https://www.googleapis.com/compute/v1/projects/xxxx/global/targetHttpProxies/http-lb-proxy
urlMap: https://www.googleapis.com/compute/v1/projects/xxxx/global/urlMaps/web-map-http
以及转发规则:
gcloud compute forwarding-rules create http-content-rule \
--address=lb-ipv4-1 \ # Same IP address used for HTTPS load balancer
--global \
--target-http-proxy=http-lb-proxy \
--ports=80
看起来应该是这样的:
gcloud compute forwarding-rules describe http-content-rule --global
IPAddress: 34.107.123.141
IPProtocol: TCP
creationTimestamp: '2020-12-02T03:22:38.132-08:00'
description: ''
fingerprint: L1vA0Ik9Y=
id: '888330202637841'
kind: compute#forwardingRule
loadBalancingScheme: EXTERNAL
name: http-content-rule
networkTier: PREMIUM
portRange: 80-80
selfLink: https://www.googleapis.com/compute/v1/projects/xxxx/global/forwardingRules/http-content-rule
target: https://www.googleapis.com/compute/v1/projects/xxxx/global/targetHttpProxies/http-lb-proxy
确保 HTTP 和 HTTPS LB 使用相同的公共 IP。如果传入流量未被阻止,请检查防火墙规则。
如果您所有操作都正确,您应该会得到curl
与示例中所示的相同的输出。