跳转到内容
搜索文档

支持的字段和运算符

最后更新 查看 MarkdownAgent 设置

负载均衡规则支持的字段取决于 Cloudflare 是否代理通过负载均衡器的流量。

如果使用错误的字段集,可能会看到意外行为。为获得最佳结果,请使用与流量代理状态关联的字段。

此外,部分 Load Balancing 规则字段可在 Expression Builder 中使用——如 Load Balancing 表达式中所述——而其他字段只能通过 API 或 Expression Editor 手动配置。

Expression Builder 字段集

请参考下表了解 Expression Builder(表达式构建器) 中可用字段的分组方式。

字段集 Expression Builder 中的分区 说明
无论代理状态如何均支持的字段 BOTH 无论负载均衡器代理状态如何,始终可访问的值。
仅代理字段 PROXIED ONLY 仅在负载均衡器被代理时可访问的值。
仅非代理字段 NON-PROXIED ONLY 仅在负载均衡器未被代理(仅 DNS 流量)时可访问的值。
根据代理状态标头选择负载均衡器字段

无论代理状态如何均支持的字段

无论流量的代理状态如何,Load Balancing 规则都可以访问以下字段的值:

FieldName in Expression Builder说明
cf.load_balancer.name

Bytes

Load Balancer Name

表示执行这些规则的负载均衡器的名称。

示例值:


lb.example.com

cf.load_balancer.region

Bytes

Load Balancer Region

提供处理请求的

区域名称

数据中心的

示例值:


ENAM

ip.src

IP address

IP Source Address

如果已代理,此字段提供客户端 TCP IP 地址,可能 通过 X-Forwarded-ForX-Real-IP 等 HTTP 标头调整以反映客户端的实际地址。

如果未代理(仅 DNS),此字段提供 ECS 源地址(如果可用)。如果不可用,则提供客户端解析器 IP 地址。

弃用警告:将来,对于未代理 请求,此字段将始终设置为客户端解析器 IP 地址。要检查 ECS 是否存在并使用 ECS IP,请参阅

dns.rr.opt.client

and

dns.rr.opt.client.addr

,分别。

示例值:


1.2.3.4

ip.src.asnum

Number

AS Number

表示与客户端 IP 地址关联的自治系统 (AS) 编号的 16 位或 32 位整数。

示例值:


13335

仅代理字段

如果流量通过 Cloudflare 代理,除了以下字段外,您还可以访问 无论代理状态如何均支持的字段 下列出的所有字段:

其中许多字段引用自 Rules 语言文档

FieldName in Expression Builder说明
http.host
String
(Manual entry only)

表示完整请求 URI 中使用的主机名。

示例值:
www.example.org

http.referer
String
(Manual entry only)

表示 HTTP Referer 请求标头,其中包含链接到当前请求页面的网页地址。

示例值:
Referer: htt­ps://developer.example.org/en-US/docs/Web/JavaScript

http.request.headers
Map<Array<String>>
Header

将 HTTP 请求标头表示为 Map(关联数组)。

关联数组的键是转换为小写后的 HTTP 请求标头名称。

当存在重复标头时,数组按它们在请求中出现的顺序包含它们。

解码:不执行解码
空白:保留
非 ASCII:保留

示例:
any(http.request.headers["content-type"][*] == "application/json")

示例值:
{"content-type": ["application/json"]}

http.request.method
String
Request Method

表示 HTTP 方法,以大写字符字符串形式返回。

示例值:
GET

http.request.timestamp.sec
Integer
Timestamp

表示 Cloudflare 收到请求时的时间戳,以 Unix 时间(秒)表示。该值为 10 位数字。

示例值:
1484063137

http.request.uri
String
URI

表示请求的 URI 路径和查询字符串。

示例值:
/articles/index?section=539061&expand=comments

http.request.uri.args
Map<Array<String>>
(Manual entry only)

将与请求关联的 HTTP URI 参数表示为 Map(关联数组)。

当参数重复时,数组按它们在请求中出现的顺序包含多个项。

这些值未经预处理,保留请求中使用的原始大小写。

解码:不执行解码
非 ASCII:保留

示例:
any(http.request.uri.args["search"][*] == "red+apples")

示例值:
{"search": ["red+apples"]}

http.request.uri.args.names
Array<String>
(Manual entry only)

表示 HTTP URI 查询字符串中的参数名称。名称未经预处理,保留请求中使用的原始大小写。

当名称重复时,数组按它们在请求中出现的顺序包含多个项。

解码:不执行解码
非 ASCII:保留

示例:
any(http.request.uri.args.names[*] == "search")

示例值:
["search"]

http.request.uri.args.values
Array<String>
(Manual entry only)

表示 HTTP URI 查询字符串中参数的值。这些值未经预处理,保留请求中使用的原始大小写,且顺序与请求中的顺序相同。

重复的值会多次列出。

解码:不执行解码
非 ASCII:保留

示例:
any(http.request.uri.args.values[*] == "red+apples")

示例值:
["red+apples"]

http.request.uri.path
String
URI Path

表示请求的 URI 路径。

示例值:
/articles/index

http.request.uri.query
String
URI Query

表示整个查询字符串,不含 ? 分隔符。

示例值:
section=539061&expand=comments

http.request.version
String
HTTP Version

表示所用 HTTP 协议的版本。当您需要对不同版本进行不同检查时,请使用此字段。

示例值:

  • HTTP/1.1
  • HTTP/3

仅非代理字段

如果流量未通过 Cloudflare 代理,除了以下字段外,您还可以访问 无论代理状态如何均支持的字段 下列出的所有字段:

FieldName in Expression Builder说明
dns.qry.name

Bytes

Query Name

表示所询问的查询名称。

示例值:


example.com.

dns.qry.name.len

Integer

Query Name Length

表示查询名称的字节长度。

示例值:


123

dns.qry.qu

Boolean

Question

当为 true 时,此字段表示收到的 DNS 消息是一个问题(question)。

dns.qry.type

Integer

Query Type

表示

DNS 查询类型

的数值。

示例值:

  • 1 (A record)

  • 28 (AAAA record)

dns.rr.opt.client

Boolean

(

Manual entry only

)

当为 true 时,此字段表示 DNS 请求中发送了 EDNS Client Subnet (ECS) 地址。

dns.rr.opt.client.addr

String

(

Manual entry only

)

如果存在,此字段表示与 DNS 请求一起发送的 ECS 地址。

示例值:


1.2.3.0

运算符和分组符号

  • 比较运算符指定表达式中定义的值必须与实际 HTTP 请求值如何关联,表达式才返回 true。

  • 逻辑运算符组合两个表达式形成复合表达式,并使用优先级顺序确定表达式的求值方式。

  • 分组符号允许您组织表达式、强制运算符优先级并嵌套表达式。

有关示例和用法,请参阅 Rules 语言文档中的运算符和分组符号

这篇文档对您有帮助吗?