如何通过Terraform在Google Cloud实现域名重定向并解决冲突报错
解决Google Cloud URL Map Terraform重定向冲突问题
这个报错的核心原因是每个URL Map的path matcher只能配置一种默认行为——要么指向后端服务(default_service),要么设置重定向(default_url_redirect),同时你在URL Map顶层设置的全局default_service也会和次级path matcher的重定向逻辑产生冲突。
下面是修正后的Terraform配置,完美实现你的需求:
variable "primary_domain" { type = string default = "example.com" } variable "secondary_domains" { type = set(string) default = ["example.org", "www.example.com", "www.example.org"] } resource "google_compute_url_map" "landing_url_map" { name = "landing-url-map" # 移除顶层全局default_service,通过host_rule精准分配请求处理逻辑 host_rule { path_matcher = "primary" hosts = [var.primary_domain] } path_matcher { name = "primary" default_service = google_compute_backend_bucket.landing_backend_bucket.self_link } host_rule { path_matcher = "secondary" hosts = var.secondary_domains } path_matcher { name = "secondary" default_url_redirect { host_redirect = var.primary_domain redirect_response_code = "MOVED_PERMANENTLY" # 301永久重定向,可选302临时 path_redirect = "$request_path" # 保留原请求路径,也可设为"/"跳转首页 strip_query = false # 保留原查询参数 } } }
关键调整说明:
- 移除全局
default_service:因为我们已经通过host_rule明确将主域名和次级域名分别指向对应的path matcher,全局默认服务在这里是多余的,反而会引发冲突。 - 分离逻辑到独立path matcher:
primarymatcher专门处理主域名的请求,直接指向你的后端存储桶secondarymatcher专门处理所有次级域名的请求,配置重定向到主域名
- 可选优化重定向参数:我添加了301永久重定向、保留路径和查询参数的配置,你可以根据实际需求修改这些参数。
这样配置后,Terraform就能顺利执行,和你在GCP控制台操作的效果完全一致。
内容的提问来源于stack exchange,提问作者nkt
相关产品推荐
相关产品推荐

