GCP外部LB URL重写:如何保持域名显示并转发至目标域名
解决GCP外部负载均衡器URL重写问题
你的核心问题在于后端服务指向错误,同时路径匹配范围不够,导致host_rewrite没起到实际作用。以下是修正后的Terraform配置:
path_matcher { name = "domain1-matcher" default_service = domain1.service # 保留默认服务,处理非/baz开头的请求 path_rule { paths = ["/baz/*"] # 改为通配符,匹配/baz下所有子路径(包括cat.json) service = domain2.service # 关键:指向domain2的后端服务,而非domain1 route_action { url_rewrite { host_rewrite = "domain2" # 修改转发到后端的Host头为domain2 path_prefix_rewrite = "/foo/bar/" # 将路径前缀/baz替换为/foo/bar } } } }
关键改动说明
- 路径匹配调整:把
["/baz/"]改成["/baz/*"],这样能覆盖/baz/cat.json这类具体子路径的请求,原配置只能匹配/baz/本身。 - 后端服务切换:必须将service指向
domain2.service——你要获取domain2的内容,就得让负载均衡器把请求转发到domain2对应的后端服务,之前指向domain1的服务,host_rewrite只是改了Host头,但后端还是domain1的资源,自然拿不到domain2的内容。 - url_rewrite逻辑:
host_rewrite会修改发送给后端服务的HTTP Host头为domain2,确保后端服务能正确识别请求;path_prefix_rewrite会把请求路径的/baz前缀替换成/foo/bar,最终转发到后端的路径就是/foo/bar/cat.json,同时浏览器地址栏始终显示domain1/baz/cat.json。
额外注意事项
- 确认
domain2.service这个后端服务已正确配置,且其关联的后端实例能处理带有domain2Host头的请求。 - 检查负载均衡器的目标HTTP(S)代理已关联此URL映射,且前端配置正确绑定了domain1的域名。
- 你的Google Provider 4.39.0版本完全支持这些配置字段,无需升级。
内容的提问来源于stack exchange,提问作者kela
相关产品推荐
相关产品推荐

