全部產品
Search
文件中心

:規則引擎

更新時間:Feb 12, 2025

規則引擎允許您使用相同的基本文法和配置邏輯在不同的產品功能(例如:緩衝、重新導向、壓縮、回源、WAF等)中建立和部署條件規則。

概述

規則引擎功能可以使用圖形化的方式來配置各種條件規則。條件規則支援對使用者請求中攜帶的各種參數資訊進行識別,以此來決定某個配置是否對該請求生效,可以更加靈活、更加精確地控制各種配置策略的執行效果。

規則生效優先順序

  • 同一個功能(例如:瀏覽器緩衝到期時間)在全域配置和規則配置上都添加了配置的情況下,規則配置上的生效優先順序更高。

  • 同一個規則功能(例如:緩衝規則)的配置列表內,如果存在多條規則配置,則執行順序是從上到下,順序執行。可以在規則配置列表內調整規則的位置,以調整規則的執行優先順序。

注意事項

  • 單條規則條件的大小不超過4k位元組,網站維度上所有的配置資訊限制總大小不超過512k位元組(包含認證、規則、網路、緩衝等其他功能配置,但不包含安全部分的配置)。

  • 規則條件支援嵌套,嵌套層級深度最大限制為2層,不同層級支援獨立的邏輯關係設定。

  • 單條規則支援匹配最多個物件個數20個。

傳入請求類型

傳入請求類型有以下兩個配置選項:

  • 所有傳入請求:此規則應用於網站下的所有流量,即所有請求的匹配結果都為true。

  • 自訂規則:此規則僅應用於與自訂運算式匹配的流量,可以用於精準地過濾請求。

規則條件文法說明

一個規則條件由條件運算式邏輯判斷運算子構成:

  • 條件運算式:篩選滿足特定特徵的使用者請求。

  • 邏輯判斷運算子:組合多個條件運算式篩選的使用者請求。

您可以根據實際業務需求設定多個條件運算式並組合用於篩選使用者請求。

邏輯判斷運算子

對同一個層級內的條件(包括被嵌套的條件集合)進行邏輯判斷,支援and和or。

  • and(並且):邏輯與運算子,所有條件都為真才會匹配成功。

  • or(或者):邏輯或運算子,其中一個條件為真即可匹配成功。

條件運算式

最小粒度的條件運算式包含以下參數:

參數名稱

對應運算式文法中的參數

參數說明

是否必填

匹配類型

Field

條件規則的匹配類型。

匹配值

Value

條件規則的匹配值。

匹配運算子

Comparison_operator

條件規則的匹配運算子。

運算式文法

  • 簡單運算式

    • 文法規則:<field><comparison_operator><value>。

    • 樣本:http.request.uri.path matches"/image\.(jpg|png)$"。

  • 複合運算式

    • 加上運算子(logical operators)將多個不同的運算式組合在一起。

    • 文法規則:<expreesion><logical_operator><expression>。

    • 樣本:http.host eq "www.example.com" and http.request.uri.path eq "/content"

匹配類型

說明
  • 主機名稱(http.host),這個匹配類型在SSL/TLS加密規則中使用的時候,僅支援等於和不等於這兩種匹配運算子。

  • 對於省/地區、IP源地址、省份、電訊廠商四個欄位,存在少數ISP在特定地區可能會分配私人IP地址給用戶端,導致ESA節點接收到的是用戶端IP是私人IP段的地址,詳見如何識別私人IP段地址

匹配類型

匹配類型含義

匹配類型變數

支援的匹配運算子

匹配值

要求方法

用戶端請求使用的要求方法。

http.request.method

  • 等於

  • 不等於

  • 包含以下各項

  • 不包含以下各項

可選值:

  • GET

  • POST

  • PURGE

  • PUT

  • HEAD

  • OPTIONS

  • DELETE

  • PATCH

HTTP 版本

用戶端請求使用的HTTP版本。

http.request.version

可選值:

  • HTTP/1.0

  • HTTP/1.1

  • HTTP/2.0

  • HTTP/3.0

省/地區

用戶端IP地址歸屬的省/地區。

ip.geoip.country

  • 您可以通過下拉式清單來選擇。

  • 是否支援區分大小寫:否

  • 匹配值是否允許配置Null 字元串:否

檔案名稱

用戶端請求的檔案的名稱

http.request.uri.path.file_name

  • 不包含檔案尾碼的檔案名稱,如:

    • /a/b 檔案名稱是b

    • /a/b/ 檔案名稱為空白

    • /foo.tar.bz2 檔案名稱為foo.tar

    • 128_128.jpg 檔案名稱為128_128

  • 是否支援區分大小寫:是

  • 匹配值是否允許配置Null 字元串:否

副檔名

用戶端請求的檔案的尾碼名。

http.request.uri.path.extension

  • 從右向左識別,識別到第一個".",不包含"."。例如:檔案foo.tar.bz2的尾碼是bz2。

  • 是否支援區分大小寫:是

  • 匹配值是否允許配置Null 字元串:否

IP源地址

用戶端的IP。

ip.src

  • 支援填寫IPv4格式IP,例如:192.168.X.X

  • 支援填寫IPv6格式IP,例如:240e:95c:3004:2:3:0:0:XXX

  • 支援網段方式填寫,例如:192.168.XXX.XXX/31

  • 是否支援區分大小寫:否

  • 匹配值是否允許配置Null 字元串:否

SSL/HTTPS

用戶端請求使用的協議類型。

http.request.scheme

  • 等於

  • 不等於

可選值:

  • http

  • https

主機名稱

用戶端請求攜帶的hostname。

匹配順序:請求URL中的host>要求標頭HOST中的host。

http.host

  • 等於

  • 不等於

  • 包含字串

  • 不包含字串

  • 字串開頭為

  • 字串結尾為

  • 字串開頭不是

  • 字串結尾不是

  • 與Regex匹配

  • 與Regex不匹配

  • 值為其中任意一項

  • 值不為其中任意一項

  • 例如:["www1.alibaba.com","www2.alibaba.com"]

  • 是否支援區分大小寫:否

  • 匹配值是否允許配置Null 字元串:否

URI

用戶端請求URL中的路徑,包含請求參數。

http.request.uri

  • 例如:/articles/index?section=330688&expand=comments

  • 是否支援區分大小寫:是

  • 匹配值是否允許配置Null 字元串:否

主機URI 完整名

用戶端請求的完整URI。

http.request.full_uri

  • 例如:htt­ps://www.example.org/articles/index?section=330688&expand=comments

  • 是否支援區分大小寫:是

  • 匹配值是否允許配置Null 字元串:否

URI 路徑

用戶端請求URL中的路徑,不含請求參數。

http.request.uri.path

  • 例如:/articles/index

  • 是否支援區分大小寫:是

  • 匹配值是否允許配置Null 字元串:否

URI 查詢字串

用戶端請求URL中完整的請求參數。

http.request.uri.query

  • 例如:section=330688&expand=comments

  • 是否支援區分大小寫:是

  • 匹配值是否允許配置Null 字元串:否

URI 指定查詢字串

用戶端請求URL中指定的請求參數。

http.request.uri.args["session"]

  • 支援輸入指定查詢字串的參數名稱,對指定參數的值進行匹配,例如:參數session的值330688。

  • 是否支援區分大小寫:是

  • 匹配值是否允許配置Null 字元串:是

    說明

    僅在如下匹配運算子時支援空值:

    • 等於

    • 不等於

    • 包含

    • 與Regex匹配

Cookie

用戶端請求攜帶的Cookie。

http.cookie

  • 等於

  • 不等於

  • 包含字串

  • 不包含字串

  • 與Regex匹配

  • 與Regex不匹配

  • 例如:session=330688;background=light。

  • 是否支援區分大小寫:是

  • 匹配值是否允許配置Null 字元串:是

使用者代理程式

用戶端請求攜帶的用戶端資訊。

http.user_agent

  • 例如:curl/7.29.0。

  • 是否支援區分大小寫:是

  • 匹配值是否允許配置Null 字元串:是

引用方

發起用戶端請求的原始頁面的URL。

http.referer

  • 例如:http://refer.com.cn。

  • 是否支援區分大小寫:否

  • 匹配值是否允許配置Null 字元串:是

X-Forwarded-For

用戶端請求中X-Forwarded-For標題的值。

http.x_forwarded_for

  • 例如:192.168.1.X,192.168.2.X

  • 是否支援區分大小寫:是

  • 匹配值是否允許配置Null 字元串:是

請求標題

用戶端請求中指定標題。

http.request.headers["session"]

  • 支援輸入指定標題名稱,對指定請求標題的值進行匹配,例如:標題session的值330688。

  • 是否支援區分大小寫:是

  • 匹配值是否允許配置Null 字元串:是

Cookie 值

用戶端請求中指定的Cookie參數。

http.request.cookies["session"]

  • 支援輸入指定Cookie參數,對指定Cookie參數的值進行匹配,例如:參數session的值330688。

  • 是否支援區分大小寫:是

  • 匹配值是否允許配置Null 字元串:是

電訊廠商

用戶端IP歸屬的電訊廠商。

ip.src.isp

  • 等於

  • 不等於

  • 包含

  • 不包含

可取值:

  • 中國電信

  • 中國移動

  • 中國聯通

IP協議版本

用戶端IP所屬的協議版本,包含IPv4、IPv6。

ip.src.version

  • 等於

  • 不等於

可取值:

  • IPv4

  • IPv6

省份

國家之下的一級行政單位。

ip.src.subdivision_1_iso_code

  • 等於

  • 不等於

  • 包含

  • 不包含

  • 例如:浙江省(CN-ZJ)

  • 是否支援區分大小寫:是

負載平衡器所在地區

負載平衡器的節點所在地區。

ip.src.region_code

  • 等於

  • 不等於

  • 包含

  • 不包含

  • 例如:東亞(EAS)

  • 是否支援區分大小寫:是

請求時間戳記

請求到達節點時對應的時間戳記(Unix時間)。

http.request.timestamp.sec

  • 等於

  • 不等於

  • 大於

  • 小於

  • 大於等於

  • 小於等於

  • 例如:2024年12月24日13:47:58

  • Unix時間:(1735019278)

匹配運算子

運算子名稱

運算子

是否支援取反

實值型別

備忘

等於

eq

不支援

string

/

不等於

ne

不支援

string

/

包含

contains

支援

string

包含字串。

與Regex匹配

matches

支援

string

正則匹配:

僅bussiness和enterprise套餐支援正則匹配。

值為其中任意一項

in

支援

array

值為其中任意一項:

  • 不支援萬用字元。

  • 值需要限制數組裡面的對象最多32個。

字串開頭為

starts_with

支援

string

/

字串結尾為

ends_with

支援

string

/

長度小於

len-lt

不支援

integer

字串長度小於。

長度等於

len-eq

不支援

integer

字串長度等於。

長度大於

len-gt

不支援

integer

字串長度大於。

在列表中

in_list

支援

integer

列表需要在帳號維度上建立列表,然後在這裡調用。

存在

exists

支援

bool

匹配對象有包含key/value索引值對的情況下,用於表示子key存在,例如:在header、cookie、查詢字串等情境。

大於

gt

不支援

integer

整數情境下使用。

小於

lt

不支援

integer

整數情境下使用。

大於等於

ge

不支援

integer

整數情境下使用。

小於等於

le

不支援

integer

整數情境下使用。

萬用字元

萬用字元號

含義

?

表示匹配任意1個字元。

*

表示匹配任意多個字元。

操作步驟

說明

預設使用運算式產生器。

運算式產生器

您可以使用互動運算式產生器來配置運算式,這種配置方式更容易上手,但是配置複雜運算式的時會有一些限制。

若是請求方式可以滿足您的業務需求,您在下拉框中選擇您需要您的請求方式產生器自動產生。

image

運算式編輯器

您可以在運算式編輯器的輸入框內直接輸入運算式,這種配置方式的靈活度更高,能夠編寫更加複雜的運算式。

  1. 單擊編輯運算式。

    image

  2. 在對話方塊中輸入您的運算式即可。

    image