You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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                 # 保留原查询参数
    }
  }
}

关键调整说明:

  1. 移除全局default_service:因为我们已经通过host_rule明确将主域名和次级域名分别指向对应的path matcher,全局默认服务在这里是多余的,反而会引发冲突。
  2. 分离逻辑到独立path matcher:
    • primary matcher专门处理主域名的请求,直接指向你的后端存储桶
    • secondary matcher专门处理所有次级域名的请求,配置重定向到主域名
  3. 可选优化重定向参数:我添加了301永久重定向、保留路径和查询参数的配置,你可以根据实际需求修改这些参数。

这样配置后,Terraform就能顺利执行,和你在GCP控制台操作的效果完全一致。

内容的提问来源于stack exchange,提问作者nkt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:42:39