規則引擎允許您使用相同的基本文法和配置邏輯在不同的產品功能(例如:緩衝、重新導向、壓縮、回源、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 |
| 可選值:
|
HTTP 版本 | 用戶端請求使用的HTTP版本。 | http.request.version | 可選值:
| |
省/地區 | 用戶端IP地址歸屬的省/地區。 | ip.geoip.country |
| |
檔案名稱 | 用戶端請求的檔案的名稱 | http.request.uri.path.file_name |
| |
副檔名 | 用戶端請求的檔案的尾碼名。 | http.request.uri.path.extension |
| |
IP源地址 | 用戶端的IP。 | ip.src |
| |
SSL/HTTPS | 用戶端請求使用的協議類型。 | http.request.scheme |
| 可選值:
|
主機名稱 | 用戶端請求攜帶的hostname。 匹配順序:請求URL中的host>要求標頭HOST中的host。 | http.host |
|
|
URI | 用戶端請求URL中的路徑,包含請求參數。 | http.request.uri |
| |
主機URI 完整名 | 用戶端請求的完整URI。 | http.request.full_uri |
| |
URI 路徑 | 用戶端請求URL中的路徑,不含請求參數。 | http.request.uri.path |
| |
URI 查詢字串 | 用戶端請求URL中完整的請求參數。 | http.request.uri.query |
| |
URI 指定查詢字串 | 用戶端請求URL中指定的請求參數。 | http.request.uri.args["session"] |
| |
Cookie | 用戶端請求攜帶的Cookie。 | http.cookie |
|
|
使用者代理程式 | 用戶端請求攜帶的用戶端資訊。 | http.user_agent |
| |
引用方 | 發起用戶端請求的原始頁面的URL。 | http.referer |
| |
X-Forwarded-For | 用戶端請求中X-Forwarded-For標題的值。 | http.x_forwarded_for |
| |
請求標題 | 用戶端請求中指定標題。 | http.request.headers["session"] |
| |
Cookie 值 | 用戶端請求中指定的Cookie參數。 | http.request.cookies["session"] |
| |
電訊廠商 | 用戶端IP歸屬的電訊廠商。 | ip.src.isp |
| 可取值:
|
IP協議版本 | 用戶端IP所屬的協議版本,包含IPv4、IPv6。 | ip.src.version |
| 可取值:
|
省份 | 國家之下的一級行政單位。 | ip.src.subdivision_1_iso_code |
|
|
負載平衡器所在地區 | 負載平衡器的節點所在地區。 | ip.src.region_code |
|
|
請求時間戳記 | 請求到達節點時對應的時間戳記(Unix時間)。 | http.request.timestamp.sec |
|
|
匹配運算子
運算子名稱 | 運算子 | 是否支援取反 | 實值型別 | 備忘 |
等於 | eq | 不支援 | string | / |
不等於 | ne | 不支援 | string | / |
包含 | contains | 支援 | string | 包含字串。 |
與Regex匹配 | matches | 支援 | string | 正則匹配: 僅bussiness和enterprise套餐支援正則匹配。 |
值為其中任意一項 | in | 支援 | array | 值為其中任意一項:
|
字串開頭為 | 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個字元。 |
| 表示匹配任意多個字元。 |
操作步驟
預設使用運算式產生器。
運算式產生器
您可以使用互動運算式產生器來配置運算式,這種配置方式更容易上手,但是配置複雜運算式的時會有一些限制。
若是請求方式可以滿足您的業務需求,您在下拉框中選擇您需要您的請求方式產生器自動產生。

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

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