负载均衡规则支持的字段取决于 Cloudflare 是否代理通过负载均衡器的流量。
如果使用错误的字段集,可能会看到意外行为。为获得最佳结果,请使用与流量代理状态关联的字段。
此外,部分 Load Balancing 规则字段可在 Expression Builder 中使用——如 Load Balancing 表达式中所述——而其他字段只能通过 API 或 Expression Editor 手动配置。
请参考下表了解 Expression Builder(表达式构建器) 中可用字段的分组方式。
| 字段集 | Expression Builder 中的分区 | 说明 |
|---|---|---|
| 无论代理状态如何均支持的字段 | BOTH |
无论负载均衡器代理状态如何,始终可访问的值。 |
| 仅代理字段 | PROXIED ONLY |
仅在负载均衡器被代理时可访问的值。 |
| 仅非代理字段 | NON-PROXIED ONLY |
仅在负载均衡器未被代理(仅 DNS 流量)时可访问的值。 |
无论流量的代理状态如何,Load Balancing 规则都可以访问以下字段的值:
| Field | Name in Expression Builder | 说明 |
|---|---|---|
cf.load_balancer.name
| Load Balancer Name | 表示执行这些规则的负载均衡器的名称。 示例值: lb.example.com |
cf.load_balancer.region
| Load Balancer Region | 提供处理请求的 区域名称 数据中心的 示例值: ENAM |
ip.src
| IP Source Address | 如果已代理,此字段提供客户端 TCP IP 地址,可能
通过 如果未代理(仅 DNS),此字段提供 ECS 源地址(如果可用)。如果不可用,则提供客户端解析器 IP 地址。 弃用警告:将来,对于未代理 请求,此字段将始终设置为客户端解析器 IP 地址。要检查 ECS 是否存在并使用 ECS IP,请参阅 dns.rr.opt.client and dns.rr.opt.client.addr,分别。 示例值: 1.2.3.4 |
ip.src.asnum
| AS Number | 表示与客户端 IP 地址关联的自治系统 (AS) 编号的 16 位或 32 位整数。 示例值: 13335 |
如果流量通过 Cloudflare 代理,除了以下字段外,您还可以访问 无论代理状态如何均支持的字段 下列出的所有字段:
其中许多字段引用自 Rules 语言文档。
| Field | Name in Expression Builder | 说明 |
|---|---|---|
http.cookieString | (Manual entry only) | 表示整个 cookie(字符串形式)。 示例值:
|
http.hostString | (Manual entry only) | 表示完整请求 URI 中使用的主机名。 示例值:
|
http.refererString | (Manual entry only) | 表示 HTTP Referer 请求标头,其中包含链接到当前请求页面的网页地址。 示例值:
|
http.request.headersMap<Array<String>> | Header | 将 HTTP 请求标头表示为 Map(关联数组)。 关联数组的键是转换为小写后的 HTTP 请求标头名称。 当存在重复标头时,数组按它们在请求中出现的顺序包含它们。 解码:不执行解码
示例:
示例值:
|
http.request.methodString | Request Method | 表示 HTTP 方法,以大写字符字符串形式返回。 示例值:
|
http.request.timestamp.secInteger | Timestamp | 表示 Cloudflare 收到请求时的时间戳,以 Unix 时间(秒)表示。该值为 10 位数字。 示例值:
|
http.request.uriString | URI | 表示请求的 URI 路径和查询字符串。 示例值:
|
http.request.uri.argsMap<Array<String>> | (Manual entry only) | 将与请求关联的 HTTP URI 参数表示为 Map(关联数组)。 当参数重复时,数组按它们在请求中出现的顺序包含多个项。 这些值未经预处理,保留请求中使用的原始大小写。 解码:不执行解码
示例:
示例值:
|
http.request.uri.args.namesArray<String> | (Manual entry only) | 表示 HTTP URI 查询字符串中的参数名称。名称未经预处理,保留请求中使用的原始大小写。 当名称重复时,数组按它们在请求中出现的顺序包含多个项。 解码:不执行解码
示例:
示例值:
|
http.request.uri.args.valuesArray<String> | (Manual entry only) | 表示 HTTP URI 查询字符串中参数的值。这些值未经预处理,保留请求中使用的原始大小写,且顺序与请求中的顺序相同。 重复的值会多次列出。 解码:不执行解码
示例:
示例值:
|
http.request.uri.pathString | URI Path | 表示请求的 URI 路径。 示例值:
|
http.request.uri.queryString | URI Query | 表示整个查询字符串,不含 示例值:
|
http.request.versionString | HTTP Version | 表示所用 HTTP 协议的版本。当您需要对不同版本进行不同检查时,请使用此字段。 示例值:
|
如果流量未通过 Cloudflare 代理,除了以下字段外,您还可以访问 无论代理状态如何均支持的字段 下列出的所有字段:
| Field | Name in Expression Builder | 说明 |
|---|---|---|
dns.qry.name
| Query Name | 表示所询问的查询名称。 示例值: example.com. |
dns.qry.name.len
| Query Name Length | 表示查询名称的字节长度。 示例值: 123 |
dns.qry.qu
| Question | 当为 |
dns.qry.type
| Query Type | 表示 DNS 查询类型 的数值。 示例值:
|
dns.rr.opt.client
| ( Manual entry only ) | 当为 |
dns.rr.opt.client.addr
| ( Manual entry only ) | 如果存在,此字段表示与 DNS 请求一起发送的 ECS 地址。 示例值: 1.2.3.0 |
-
比较运算符指定表达式中定义的值必须与实际 HTTP 请求值如何关联,表达式才返回 true。
-
逻辑运算符组合两个表达式形成复合表达式,并使用优先级顺序确定表达式的求值方式。
-
分组符号允许您组织表达式、强制运算符优先级并嵌套表达式。
有关示例和用法,请参阅 Rules 语言文档中的运算符和分组符号。