規(guī)則引擎
規(guī)則引擎允許您使用相同的基本語法和配置邏輯在不同的產(chǎn)品功能(例如:緩存、重定向、壓縮、回源、WAF等)中創(chuàng)建和部署條件規(guī)則。
概述
規(guī)則引擎功能可以使用圖形化的方式來配置各種條件規(guī)則。條件規(guī)則支持對用戶請求中攜帶的各種參數(shù)信息進(jìn)行識別,以此來決定某個配置是否對該請求生效,可以更加靈活、更加精確地控制各種配置策略的執(zhí)行效果。
規(guī)則生效優(yōu)先級
同一個功能(例如:瀏覽器緩存過期時間)在全局配置和規(guī)則配置上都添加了配置的情況下,規(guī)則配置上的生效優(yōu)先級更高。
同一個規(guī)則功能(例如:緩存規(guī)則)的配置列表內(nèi),如果存在多條規(guī)則配置,則執(zhí)行順序是從上到下,順序執(zhí)行。可以在規(guī)則配置列表內(nèi)調(diào)整規(guī)則的位置,以調(diào)整規(guī)則的執(zhí)行優(yōu)先級。
注意事項
單條規(guī)則條件的大小不超過4k字節(jié),站點維度上所有的配置信息限制總大小不超過512k字節(jié)(包含證書、規(guī)則、網(wǎng)絡(luò)、緩存等其他功能配置,但不包含安全部分的配置)。
規(guī)則條件支持嵌套,嵌套層級深度最大限制為2層,不同層級支持獨立的邏輯關(guān)系設(shè)置。
單條規(guī)則支持匹配最多對象個數(shù)20個。
傳入請求類型
傳入請求類型有以下兩個配置選項:
所有傳入請求:此規(guī)則應(yīng)用于站點下的所有流量,即所有請求的匹配結(jié)果都為true。
自定義規(guī)則:此規(guī)則僅應(yīng)用于與自定義表達(dá)式匹配的流量,可以用于精準(zhǔn)地過濾請求。
規(guī)則條件語法說明
一個規(guī)則條件由條件表達(dá)式與邏輯判斷運算符構(gòu)成:
條件表達(dá)式:篩選滿足特定特征的用戶請求。
邏輯判斷運算符:組合多個條件表達(dá)式篩選的用戶請求。
您可以根據(jù)實際業(yè)務(wù)需求設(shè)置多個條件表達(dá)式并組合用于篩選用戶請求。
邏輯判斷運算符
對同一個層級內(nèi)的條件(包括被嵌套的條件集合)進(jìn)行邏輯判斷,支持and和or。
and(并且):邏輯與運算符,所有條件都為真才會匹配成功。
or(或者):邏輯或運算符,其中一個條件為真即可匹配成功。
條件表達(dá)式
最小粒度的條件表達(dá)式包含以下參數(shù):
參數(shù)名稱 | 對應(yīng)表達(dá)式語法中的參數(shù) | 參數(shù)說明 | 是否必填 |
匹配類型 | Field | 條件規(guī)則的匹配類型。 | 是 |
匹配值 | Value | 條件規(guī)則的匹配值。 | 是 |
匹配運算符 | Comparison_operator | 條件規(guī)則的匹配運算符。 | 是 |
表達(dá)式語法
簡單表達(dá)式
語法規(guī)則:<field><comparison_operator><value>。
示例:http.request.uri.path matches"/image\.(jpg|png)$"。
復(fù)合表達(dá)式
加上運算符(logical operators)將多個不同的表達(dá)式組合在一起。
語法規(guī)則:<expreesion><logical_operator><expression>。
示例:http.host eq "www.example.com" and http.request.uri.path eq "/content"。
匹配類型
主機(jī)名(http.host),這個匹配類型在SSL/TLS加密規(guī)則中使用的時候,僅支持等于和不等于這兩種匹配運算符。
匹配類型 | 匹配類型含義 | 匹配類型變量 | 支持的匹配運算符 | 匹配值 |
請求方法 | 客戶端請求使用的請求方法。 | http.request.method |
| 可選值:
|
HTTP 版本 | 客戶端請求使用的HTTP版本。 | http.request.version | 可選值:
| |
國家/地區(qū) | 客戶端IP地址歸屬的國家/地區(qū)。 | ip.geoip.country |
| |
文件名 | 客戶端請求的文件的名稱 | http.request.uri.path.file_name |
| |
文件擴(kuò)展名 | 客戶端請求的文件的后綴名。 | http.request.uri.path.extension |
| |
IP源地址 | 客戶端的IP。 | ip.src |
| |
SSL/HTTPS | 客戶端請求使用的協(xié)議類型。 | http.request.scheme |
| 可選值:
|
主機(jī)名 | 客戶端請求攜帶的hostname。 匹配順序:請求URL中的host>請求頭HOST中的host。 | http.host |
|
|
URI | 客戶端請求URL中的路徑,包含請求參數(shù)。 | http.request.uri |
| |
主機(jī)URI 完整名 | 客戶端請求的完整URI。 | http.request.full_uri |
| |
URI 路徑 | 客戶端請求URL中的路徑,不含請求參數(shù)。 | http.request.uri.path |
| |
URI 查詢字符串 | 客戶端請求URL中完整的請求參數(shù)。 | http.request.uri.query |
| |
URI 指定查詢字符串 | 客戶端請求URL中指定的請求參數(shù)。 | http.request.uri.args["session"] |
| |
Cookie | 客戶端請求攜帶的Cookie。 | http.cookie |
|
|
用戶代理 | 客戶端請求攜帶的客戶端信息。 | http.user_agent |
| |
引用方 | 發(fā)起客戶端請求的原始頁面的URL。 | http.referer |
| |
X-Forwarded-For | 客戶端請求中X-Forwarded-For標(biāo)頭的值。 | http.x_forwarded_for |
| |
請求標(biāo)頭 | 客戶端請求中指定標(biāo)頭。 | http.request.headers["session"] |
| |
Cookie 值 | 客戶端請求中指定的Cookie參數(shù)。 | http.request.cookies["session"] |
|
匹配運算符
運算符名稱 | 運算符 | 是否支持取反 | 值類型 | 備注 |
等于 | eq | 不支持 | string | / |
不等于 | ne | 不支持 | string | / |
包含 | contains | 支持 | string | 包含字符串。 |
與正則表達(dá)式匹配 | matches | 支持 | string | 正則匹配: 僅bussiness和enterprise套餐支持正則匹配。 |
值為其中任意一項 | in | 支持 | array | 值為其中任意一項:
|
字符串開頭為 | starts_with | 支持 | string | / |
字符串結(jié)尾為 | ends_with | 支持 | string | / |
長度小于 | len-lt | 不支持 | integer | 字符串長度小于。 |
長度等于 | len-eq | 不支持 | integer | 字符串長度等于。 |
長度大于 | len-gt | 不支持 | integer | 字符串長度大于。 |
在列表中 | in_list | 支持 | integer | 列表需要在賬號維度上新建列表,然后在這里調(diào)用。 |
存在 | exists | 支持 | bool | 匹配對象有包含key/value鍵值對的情況下,用于表示子key存在,例如:在header、cookie、查詢字符串等場景。 |
大于 | gt | 不支持 | integer | 整數(shù)場景下使用。 |
小于 | lt | 不支持 | integer | 整數(shù)場景下使用。 |
大于等于 | ge | 不支持 | integer | 整數(shù)場景下使用。 |
小于等于 | le | 不支持 | integer | 整數(shù)場景下使用。 |
通配符
通配符號 | 含義 |
| 表示匹配任意1個字符。 |
| 表示匹配任意多個字符。 |
操作步驟
默認(rèn)使用表達(dá)式生成器。
表達(dá)式生成器
您可以使用交互式的表達(dá)式生成器來配置表達(dá)式,這種配置方式更容易上手,但是配置復(fù)雜表達(dá)式的時會有一些限制。
若是請求方式可以滿足您的業(yè)務(wù)需求,您在下拉框中選擇您需要您的請求方式生成器自動生成。
表達(dá)式編輯器
您可以在表達(dá)式編輯器的輸入框內(nèi)直接輸入表達(dá)式,這種配置方式的靈活度更高,能夠編寫更加復(fù)雜的表達(dá)式。
單擊編輯表達(dá)式。
在對話框中輸入您的表達(dá)式即可。