本页提供使用 Terraform 在区域中创建转换规则(Transform Rules)的示例。这些示例涵盖以下场景:
如果您使用 Cloudflare API,请参考以下资源:
本页提供的 Terraform 配置需要您将部署规则集的区域 ID(或账户 ID)。
Terraform 假定其对账户和区域规则集拥有完全控制权。如果您的账户或区域中已配置了规则集,请执行以下操作之一:
- 使用
cf-terraforming工具将现有规则集导入 Terraform。该工具的最新版本可以为现有规则集生成资源定义,并将其配置导入 Terraform 状态。 - 通过删除现有规则集(分别为
"kind": "root"的账户规则集和"kind": "zone"的区域规则集)从头开始,然后在 Terraform 中定义您的规则集配置。
以下示例创建一条 URL 重写规则,将 example.com/old-folder 的请求重写为 example.com/new-folder:
配置 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标头(如果存在)。
配置 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标头(如果存在)。
配置 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 在变更时重建规则。更多信息请参阅 故障排除。
有关修改响应标头的更多信息,请参考响应标头转换规则。
配置 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_headers 或 managed_response_headers)中包含您要更新的托管转换(Managed Transforms)。
有关托管转换的更多信息,请参考托管转换。