跳转到内容
搜索文档

使用 Terraform 配置转换规则

最后更新 查看 MarkdownAgent 设置

本页提供使用 Terraform 在区域中创建转换规则(Transform Rules)的示例。这些示例涵盖以下场景:

如果您使用 Cloudflare API,请参考以下资源:

开始之前

获取必要的账户或区域 ID

本页提供的 Terraform 配置需要您将部署规则集的区域 ID(或账户 ID)。

  • 要检索您有权访问的账户列表(包括其 ID),请使用列出账户操作。
  • 要检索您有权访问的区域列表(包括其 ID),请使用列出区域操作。

导入或删除现有规则集

Terraform 假定其对账户和区域规则集拥有完全控制权。如果您的账户或区域中已配置了规则集,请执行以下操作之一:

  • 使用 cf-terraforming 工具将现有规则集导入 Terraform。该工具的最新版本可以为现有规则集生成资源定义,并将其配置导入 Terraform 状态。
  • 通过删除现有规则集(分别为 "kind": "root" 的账户规则集和 "kind": "zone" 的区域规则集)从头开始,然后在 Terraform 中定义您的规则集配置。

创建 URL 重写规则

以下示例创建一条 URL 重写规则,将 example.com/old-folder 的请求重写为 example.com/new-folder

必需的 API 令牌权限

需要所有以下令牌权限

  • Zone Transform Rules Write
  • Account Rulesets Read

配置 cloudflare_ruleset resource:

resource "cloudflare_ruleset" "transform_url_rewrite" {
  zone_id     = var.cloudflare_zone_id
  name        = "Transform Rule performing a static URL rewrite"
  description = ""
  kind        = "zone"
  phase       = "http_request_transform"

  rules = [{
    ref         = "url_rewrite_old_folder"
    description = "Example URL rewrite rule"
    expression  = "(http.host eq \"example.com\" and http.request.uri.path eq \"/old-folder\")"
    action      = "rewrite"
    action_parameters = {
      uri = {
        path = {
          value = "/new-folder"
        }
      }
    }
  }]
}
resource "cloudflare_ruleset" "transform_url_rewrite" {
  zone_id     = "<ZONE_ID>"
  name        = "Transform Rule performing a static URL rewrite"
  description = ""
  kind        = "zone"
  phase       = "http_request_transform"

  rules {
    ref         = "url_rewrite_old_folder"
    description = "Example URL rewrite rule"
    expression  = "(http.host eq \"example.com\" and http.request.uri.path eq \"/old-folder\")"
    action      = "rewrite"
    action_parameters {
      uri {
        path {
          value = "/new-folder"
        }
      }
    }
  }
}

要创建另一个 URL 重写规则,请在同一个 cloudflare_ruleset 资源中添加一个新的 rules 对象。

使用 Terraform 时,通过 ref 字段可在更新后保持稳定的规则 ID。添加该字段可防止 Terraform 在变更时重建规则。更多信息请参阅 故障排除


有关重写 URL 的更多信息,请参考 URL 重写规则

创建请求标头转换规则

以下配置示例对 HTTP 请求标头执行以下调整:

  • 使用静态值向请求中添加 my-header-1 标头。
  • 使用由表达式定义的动态值向请求中添加 my-header-2 标头。
  • 从请求中删除 existing-header 标头(如果存在)。

必需的 API 令牌权限

需要所有以下令牌权限

  • Zone Transform Rules Write
  • Account Rulesets Read

配置 cloudflare_ruleset resource:

resource "cloudflare_ruleset" "transform_modify_request_headers" {
  zone_id     = var.cloudflare_zone_id
  name        = "Transform Rule performing HTTP request header modifications"
  description = ""
  kind        = "zone"
  phase       = "http_request_late_transform"

  rules = [{
    ref         = "modify_request_headers"
    description = "Example request header transform rule"
    expression  = "true"
    action      = "rewrite"
    action_parameters = {
      headers = {
        "my-header-1" = {
          operation = "set"
          value     = "Fixed value"
        }
        "my-header-2" = {
          operation  = "set"
          expression = "cf.zone.name"
        }
        "existing-header" = {
          operation = "remove"
        }
      }
    }
  }]
}
resource "cloudflare_ruleset" "transform_modify_request_headers" {
  zone_id     = "<ZONE_ID>"
  name        = "Transform Rule performing HTTP request header modifications"
  description = ""
  kind        = "zone"
  phase       = "http_request_late_transform"

  rules {
    ref         = "modify_request_headers"
    description = "Example request header transform rule"
    expression  = "true"
    action      = "rewrite"
    action_parameters {
      headers {
        name      = "my-header-1"
        operation = "set"
        value     = "Fixed value"
      }
      headers {
        name       = "my-header-2"
        operation  = "set"
        expression = "cf.zone.name"
      }
      headers {
        name      = "existing-header"
        operation = "remove"
      }
    }
  }
}

要创建另一个 请求标头转换规则,请在同一个 cloudflare_ruleset 资源中添加一个新的 rules 对象。

使用 Terraform 时,通过 ref 字段可在更新后保持稳定的规则 ID。添加该字段可防止 Terraform 在变更时重建规则。更多信息请参阅 故障排除

有关修改请求标头的更多信息,请参考请求标头转换规则

创建响应标头转换规则

以下配置示例对 HTTP 响应标头执行以下调整:

  • 使用静态值向响应中添加 my-header-1 标头。
  • 使用由表达式定义的动态值向响应中添加 my-header-2 标头。
  • 从响应中删除 existing-header 标头(如果存在)。

必需的 API 令牌权限

需要所有以下令牌权限

  • Zone Transform Rules Write
  • Account Rulesets Read

配置 cloudflare_ruleset resource:

resource "cloudflare_ruleset" "transform_modify_response_headers" {
  zone_id     = var.cloudflare_zone_id
  name        = "Transform Rule performing HTTP response header modifications"
  description = ""
  kind        = "zone"
  phase       = "http_response_headers_transform"

  rules = [{
    ref         = "modify_response_headers"
    description = "Example response header transform rule"
    expression  = "true"
    action      = "rewrite"
    action_parameters = {
      headers = {
        "my-header-1" = {
          operation = "set"
          value     = "Fixed value"
        }
        "my-header-2" = {
          operation  = "set"
          expression = "cf.zone.name"
        }
        "existing-header" = {
          operation = "remove"
        }
      }
    }
  }]
}
resource "cloudflare_ruleset" "transform_modify_response_headers" {
  zone_id     = "<ZONE_ID>"
  name        = "Transform Rule performing HTTP response header modifications"
  description = ""
  kind        = "zone"
  phase       = "http_response_headers_transform"

  rules {
    ref         = "modify_response_headers"
    description = "Example response header transform rule"
    expression  = "true"
    action      = "rewrite"
    action_parameters {
      headers {
        name      = "my-header-1"
        operation = "set"
        value     = "Fixed value"
      }
      headers {
        name       = "my-header-2"
        operation  = "set"
        expression = "cf.zone.name"
      }
      headers {
        name      = "existing-header"
        operation = "remove"
      }
    }
  }
}

要创建另一个 响应标头转换规则,请在同一个 cloudflare_ruleset 资源中添加一个新的 rules 对象。

使用 Terraform 时,通过 ref 字段可在更新后保持稳定的规则 ID。添加该字段可防止 Terraform 在变更时重建规则。更多信息请参阅 故障排除

有关修改响应标头的更多信息,请参考响应标头转换规则

配置托管转换

所需的 API 令牌权限

需要所有以下 令牌权限

  • Managed headers Write
  • Account Rulesets Read

配置 cloudflare_managed_transforms 资源:

resource "cloudflare_managed_transforms" "tf_example" {
  zone_id = var.cloudflare_zone_id

  managed_request_headers = [{
    id      = "add_visitor_location_headers"
    enabled = true
  }]

  managed_response_headers = [{
    id      = "remove_x-powered-by_header"
    enabled = true
  }]
}
resource "cloudflare_managed_headers" "tf_example" {
  zone_id = "<ZONE_ID>"

  managed_request_headers {
    id      = "add_visitor_location_headers"
    enabled = true
  }

  managed_response_headers {
    id      = "remove_x-powered-by_header"
    enabled = true
  }
}

确保在正确的对象(managed_request_headersmanaged_response_headers)中包含您要更新的托管转换(Managed Transforms)。

有关托管转换的更多信息,请参考托管转换

这篇文档对您有帮助吗?