条件变量
条件变量是页面规则中用于匹配请求属性的左操作数。每个条件由"变量 + 操作符 + 值"三部分组成。变量主要分为以下几组:
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 请求方法。可选值包括CONNECT、DELETE、GET、HEAD、POST、PUT、TRACE、OPTIONS、PATCH。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。请求头(
req-header):指定名称的请求头的值。需要填写请求头名称(报头名),例如Accept-Language、Authorization等。支持字符串、数值、空值类操作符。请求 cookie(
req-cookie):指定名称的请求 Cookie 的值。需要填写 Cookie 名称(名字)。支持字符串、数值、空值类操作符。协议(
scheme):请求使用的协议方案。可选值为http或https。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。服务器端口(
server-port):接受当前请求的服务器端口号。支持数值类操作符。服务器地址(
server-addr):接受当前请求的服务器 IP 地址。支持 IP 地址匹配和字符串类操作符。请求体(
req-body):请求体的内容。支持字符串和空值类操作符。HTTP 版本(
http-version):HTTP 协议版本号。可选值为2.0、1.1、1.0、0.9。仅支持字符串 =(eq)和字符串 ≠(ne)操作符。请求头
X-Forwarded-For中的第一个地址(first-x-forwarded-addr):X-Forwarded-For请求头中的第一个 IP 地址,通常代表最初的客户端地址。支持 IP 地址匹配和字符串类操作符。请求头
X-Forwarded-For中的最后一个地址(last-x-forwarded-addr):X-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 地址解析出的所在国家或地区,值为国家/地区代码(如CN、US、UK等)。仅支持字符串 =(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 引用。