条件变量

条件变量是页面规则中用于匹配请求属性的左操作数。每个条件由"变量 + 操作符 + 值"三部分组成。变量主要分为以下几组:

URI 相关

  • URI(uri:当前请求的完整 URI 路径,不含查询字符串部分。例如请求 https://example.com/api/users?id=1 中,URI 为 /api/users。支持字符串类操作符。

  • URI 参数(uri-arg:URI 中指定名称的查询参数值。需要填写参数名称(参数名称),例如参数名为 id 时,对请求 ?id=123 可获取到值 123。支持字符串、数值、空值类操作符。

  • URI 片段(uri-seg:URI 路径中按 / 分隔后指定索引位置的片段。需要填写片段索引(片段下标),索引为数字。例如 URI /api/v2/users 中,索引 1 对应 api,索引 2 对应 v2,索引 3 对应 users。支持字符串、数值、空值类操作符。

  • 查询字符串(query-string:当前请求的完整查询字符串(? 之后的部分)。例如请求 ?a=1&b=2 中,查询字符串为 a=1&b=2。支持字符串类操作符。

  • 排序后的 URI 参数(sorted-query-string:将查询字符串中的参数按名称排序后的结果。这在需要忽略参数顺序进行匹配时非常有用。支持字符串类操作符。

  • 重复的 URI 参数(duplicate-uri-arg:检测请求中是否存在重复的 URI 查询参数名。支持布尔类操作符(是 / 不是)。

请求相关

  • 主机名(host:请求中的主机名(Host 头),例如 www.example.com。支持字符串类操作符。

  • 请求方法(req-method:HTTP 请求方法。可选值包括 CONNECTDELETEGETHEADPOSTPUTTRACEOPTIONSPATCH。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。

  • 请求头(req-header:指定名称的请求头的值。需要填写请求头名称(报头名),例如 Accept-LanguageAuthorization 等。支持字符串、数值、空值类操作符。

  • 请求 cookie(req-cookie:指定名称的请求 Cookie 的值。需要填写 Cookie 名称(名字)。支持字符串、数值、空值类操作符。

  • 协议(scheme:请求使用的协议方案。可选值为 httphttps。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。

  • 服务器端口(server-port:接受当前请求的服务器端口号。支持数值类操作符。

  • 服务器地址(server-addr:接受当前请求的服务器 IP 地址。支持 IP 地址匹配和字符串类操作符。

  • 请求体(req-body:请求体的内容。支持字符串和空值类操作符。

  • HTTP 版本(http-version:HTTP 协议版本号。可选值为 2.01.11.00.9。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。

  • 请求头 X-Forwarded-For 中的第一个地址(first-x-forwarded-addrX-Forwarded-For 请求头中的第一个 IP 地址,通常代表最初的客户端地址。支持 IP 地址匹配和字符串类操作符。

  • 请求头 X-Forwarded-For 中的最后一个地址(last-x-forwarded-addrX-Forwarded-For 请求头中的最后一个 IP 地址,通常代表最近一级代理的地址。支持 IP 地址匹配和字符串类操作符。

  • 最长的请求头名称的长度(max-req-header-name-len:所有请求头名称中最长的那个的字符长度。支持数值类操作符。可用于安全防护,检测异常长的请求头名称。

  • 最长的请求头值的长度(max-req-header-value-len:所有请求头值中最长的那个的字符长度。支持数值类操作符。

  • cookie 键值对数量(req-cookie-count:请求中 Cookie 键值对的数量。支持数值类操作符。

  • 重复的请求头(duplicate-req-header:检测请求中是否存在重复的请求头名称。支持布尔类操作符(是 / 不是)。

  • 请求被标记为拒绝(req-rejected:请求是否已被标记为拒绝。支持布尔类操作符(是 / 不是)。

  • 请求已验证(req-verified:请求是否已通过验证(例如通过人机验证等)。支持布尔类操作符(是 / 不是)。

  • 请求头包含下划线(req-header-has-underscore:请求头名称中是否包含下划线字符。支持布尔类操作符(是 / 不是)。

  • SNI 服务器名(sni-server-name:TLS 握手中 SNI(Server Name Indication)扩展携带的服务器名称。支持字符串类操作符。

客户端相关

  • 客户端地址(client-addr:客户端的 IP 地址。支持 IP 地址/CIDR 匹配和字符串类操作符。IP 匹配时值的格式如 192.168.0.1/24::1/24;字符串精确匹配时格式如 192.168.0.1::1

  • 用户代理(user-agent:请求的 User-Agent 头的值,标识客户端浏览器或程序信息。支持字符串和空值类操作符。

  • 用户代理为移动设备(ua-is-mobile:根据 User-Agent 判断客户端是否为移动设备。支持布尔类操作符(是 / 不是)。

  • 客户端洲(client-continent:根据客户端 IP 地址解析出的所在大洲。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。可选择基于客户端地址或 X-Forwarded-For 中的第一个地址进行判断。

  • 客户端国家/地区(client-country:根据客户端 IP 地址解析出的所在国家或地区,值为国家/地区代码(如 CNUSUK 等)。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。可选择基于客户端地址或 X-Forwarded-For 中的第一个地址进行判断。

  • 客户端省份(client-province:根据客户端 IP 地址解析出的所在省份。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。可选择基于客户端地址或 X-Forwarded-For 中的第一个地址进行判断。

  • 客户端城市(client-city:根据客户端 IP 地址解析出的所在城市名称。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。可选择基于客户端地址或 X-Forwarded-For 中的第一个地址进行判断。

  • 客户端 ISP(client-isp:根据客户端 IP 地址解析出的互联网服务提供商。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。可选择基于客户端地址或 X-Forwarded-For 中的第一个地址进行判断。

  • 客户端组织(client-org:根据客户端 IP 地址解析出的所属组织。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。

  • 客户端自治系统编号(client-asn:根据客户端 IP 地址解析出的自治系统号(ASN)。支持数值类操作符。可选择基于客户端地址或 X-Forwarded-For 中的第一个地址进行判断。

SSL 客户端证书相关

  • SSL 客户端主体标识名称(ssl-client-s-dn:客户端证书的主题可分辨名称(Subject Distinguished Name)。支持字符串、数值、空值类操作符。

  • SSL 客户端签发商标识名称(ssl-client-i-dn:客户端证书的颁发者可分辨名称(Issuer Distinguished Name)。支持字符串、数值、空值类操作符。

  • SSL 客户端序列号(ssl-client-serial:客户端证书的序列号。支持字符串、数值、空值类操作符。

  • SSL 客户端验证结果(ssl-client-verify-result:客户端证书的验证结果。支持字符串、数值、空值类操作符。

上传文件相关

  • 上传的文件扩展名(uploaded-file-extensions:上传文件的扩展名。支持字符串 =(eq)、字符串 ≠(ne)、包含、不包含、前缀匹配、后缀匹配操作符。

  • 上传的文件内容(uploaded-file-contents:上传文件的内容。支持字符串类操作符。

  • 上传文件的扩展名与文件内容是否匹配(uploaded-file-contents-matched:检测上传文件的扩展名是否与文件实际内容类型匹配。支持布尔类操作符(是 / 不是)。用于防止文件扩展名伪造。

时间相关

  • 时间(date:当前时间。支持时间区间类操作符(在时间间隔内 / 不在选择的时间间隔之内 / 在时间段内 / 不在时间段内)。

其他

  • 网关集群(gateway-cluster:当前处理请求的网关集群标识。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。

  • 自定义(custom:自定义变量值。需要填写自定义值。可用于高级场景下的灵活匹配。

用户变量与全局变量

除了上述内置变量外,条件还支持引用:

  • 应用用户变量:应用级别定义的自定义变量,通过变量 ID 引用。

  • 全局用户变量:全局级别定义的自定义变量,通过变量 ID 引用。