條件變數

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

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 引用。