條件變數
條件變數是頁面規則中用於匹配請求屬性的左運算元。每個條件由"變數 + 運算子 + 值"三部分組成。變數主要分為以下幾組:
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 引用。