規則引擎功能使用圖形化方式配置條件規則。條件規則支援識別使用者請求中的各種參數資訊,以決定某個配置是否對該請求生效,可用於靈活、精確地控制CDN的配置策略執行效果。
背景說明
阿里雲CDN產品控制台提供了配置緩衝到期時間、回源參數改寫等基礎功能,滿足大部分通用需求。但對於一些特殊需求,如將包含路徑/example的請求回源到指定來源站點地址,則需要結合規則引擎實現自訂配置。此外,阿里雲CDN還提供了邊緣指令碼功能,支援高度靈活的使用者定製需求,配置類似第三方 CDN 服務商(如 Fastly、CloudFront)的精細化策略。
配置能力 | 基礎功能 | 基礎功能+規則引擎 | 邊緣指令碼 |
功能實現 | 常見的通用功能配置 | 通過圖形化配置介面實現各種條件過濾目的的規則,支援 URI、Header、Cookie、Query String 等多種匹配類型,以及 AND/OR 邏輯組合。 | 支援高度靈活的使用者定製需求,適合需要編寫自訂指令碼的進階情境。 |
使用情境 | 常見的通用需求 | 部分自訂進階配置需求 | 定製化的使用者需求 |
上手難度(對使用者技術要求) | 低 | 中 | 高 |
配置靈活性 | 低 | 中 | 高 |
複雜邏輯配置與邊緣指令碼替代方案
規則引擎支援基礎的 AND/OR 邏輯組合,適用於大部分條件過濾情境。但以下情境建議使用邊緣指令碼(EdgeScript)替代:
複雜正則匹配:規則引擎的正則運算子預設禁用,需提交工單申請開啟。對於需要頻繁使用Regex的情境,邊緣指令碼原生支援正則匹配,更加便捷。
多維度精確組合:若需同時匹配用戶端 IP 和 User-Agent 並使用Regex進行複雜判斷(例如攔截特定 IP 段且 UA 包含特定關鍵詞的請求),規則引擎的配置可能較為繁瑣。邊緣指令碼支援通過指令碼邏輯靈活組合多種條件。
指定 URI 的精確存取控制:若僅需針對指定 URI 設定 Referer 或 IP 白名單攔截,可直接在規則引擎中配置 URI 匹配條件,無需使用邊緣指令碼。
注意事項
單個網域名稱下最多支援建立50個規則條件。
單個規則條件中的子條件數量最多不超過20個。
通過控制台或者OpenAPI來配置時,無法使用正則相關的匹配運算子(包括正則匹配和正則不匹配),但是可以查看已有配置。如果要使用正則相關的匹配運算子,推薦使用邊緣安全加速。
通過控制台或者OpenAPI配置時,單個網域名稱下所有功能對規則條件的總引用次數最大不超過5次。
規則條件支援嵌套,嵌套層次最多為3層,不同層級支援獨立的邏輯關係設定。
緩衝到期時間、修改出站要求標頭等其他功能引用規則條件後,按所關聯規則條件的優先順序執行,而非按功能自身的配置順序執行。
上述數量限制(50 個規則條件、20 個子條件、3 層嵌套、5 次引用)均為系統硬性上限,無法通過後台申請調整。
每個條件的匹配值最多支援 32 個(適用於用戶端 IP、URI、副檔名、檔案名稱、User-Agent 等匹配類型)。若用戶端 IP 白名單數量較多,建議將多個 IP 位址轉換為 IP 段(CIDR 格式,例如
120.209.XXX.X/24)進行配置,以節省匹配值配額。User-Agent 匹配值最多支援配置 32 個,超過該數量的配置不生效。若需匹配大量 User-Agent,建議使用萬用字元(
*)合并相似的 UA 值(例如*Chrome*可覆蓋所有 Chrome 瀏覽器版本),或改用邊緣指令碼實現更靈活的匹配邏輯。
功能優先順序與執行邏輯
配置規則引擎時,需注意以下功能優先順序和執行邏輯:
Referer 防盜鏈優先順序高於規則引擎:當請求攜帶 Referer 時,系統先執行 Referer 黑白名單校正。若命中 Referer 白名單,請求直接允許存取,不再執行規則引擎中的其他條件判斷;若未命中白名單,請求直接被攔截。只有當請求的 Referer 為空白時,才不會觸發 Referer 黑白名單的允許存取或攔截邏輯,請求會繼續匹配規則引擎中配置的條件。
規則條件引用功能的執行順序:緩衝到期時間、修改出站要求標頭等功能引用規則條件後,按所關聯規則條件的優先順序執行,而非按功能自身的配置順序執行。例如,若緩衝到期時間和回源參數改寫分別引用了優先順序不同的規則條件,系統會按規則條件的優先順序從高到低依次執行。
鑒權與緩衝配置衝突排查:若配置 URL 鑒權後出現非預期行為(如不攜帶鑒權參數仍可正常訪問、或合法連結被誤攔截),請按以下順序排查:
檢查是否配置了 WAF 白名單,WAF 白名單可能繞過CDN的鑒權邏輯導致請求直接允許存取。
檢查忽略 URL 參數配置是否將鑒權參數(如
auth_key)過濾掉,導致快取命中時跳過鑒權校正。確認鑒權參數未被緩衝 Key 規則忽略,避免不同鑒權參數的請求命中同一緩衝。
規則條件的文法說明
一個規則條件由“邏輯判斷運算子”與“條件運算式”構成,具體見下方說明。
邏輯判斷(Logic)
對同一個層級內的條件(包括被嵌套的條件集合)進行邏輯判斷,支援and和or。
and(並且):邏輯與運算子,所有條件都為真才會匹配成功。or(或者):邏輯或運算子,其中一個條件為真即可匹配成功。例如為同一個回應標頭配置多個規則條件,可實現不同條件下添加相同回應標頭的效果。樣本:當 URI 包含/path-a或 URI 包含/path-b時,執行添加回應標頭的操作。
條件運算式包含的參數
最小粒度的條件運算式包含以下參數:
參數名稱 | 網域名稱配置功能函數condition中對應的配置參數 | 參數說明 | 是否必填 |
條件匹配 | match | 表示條件匹配運算式。 | 是 |
邏輯判斷 | logic | 表示條件匹配運算式的邏輯判斷參數,取值為 | 是 |
條件判斷內容 | criteria | 表示條件運算式的判斷內容。 | 是 |
匹配類型 | MatchType | 表示對使用者請求中攜帶的某一類型資訊進行匹配。 | 是 |
匹配對象 | MatchObject | 表示對匹配類型進行進一步的細分,例如:用戶端IP可以細分為“建聯IP”和“XFF IP”。 | 否 |
匹配運算子 | MatchOperator | 表示匹配操作執行的具體動作。 | 是 |
匹配值 | MatchValue | 表示預先設定的匹配值,將會與使用者請求中攜帶的資訊進行匹配。 | 是 |
條件判斷值取反 | negate | 表示是否對條件運算式的結果取反,取值為true和false。 | 是 |
大小寫敏感 | caseSensitive | 表示對匹配值中的字元是否大小寫敏感。 | 否 |
規則條件名稱 | name | 表示規則條件的名稱。 | 是 |
生效狀態 | status | 表示規則條件的生效狀態。 | 是 |
條件運算式的配置方法
匹配類型名稱 | 網域名稱配置功能函數condition中對應的配置參數 | 匹配類型含義 | 匹配對象 | 匹配運算子 | 匹配值 | 大小寫敏感 | 對應nginx/tengine |
協議類型 | scheme | 用戶端請求使用的協議類型,例如:HTTP、HTTPS。 | 不涉及 |
|
| 不涉及 | $scheme |
要求方法 | method | 用戶端請求使用的要求方法,例如:GET、PUT。 | 不涉及 |
|
| 不涉及 | $request_method |
URI(路徑) | uri | 用戶端請求URL中的路徑,不含請求參數,例如: | 不涉及 |
| 支援萬用字元 |
| $raw_uri或$uri |
檔案名稱 | basename | 用戶端請求的檔案的名稱,例如:name1。 | 不涉及 |
| 支援萬用字元 |
| - |
副檔名 | extension | 用戶端請求的檔案的尾碼名,從右向左識別,識別到第一個".",例如: | 不涉及 |
| 支援萬用字元 |
| - |
Hostname | hostname | 用戶端請求攜帶的hostname,匹配順序:請求URL中的host>要求標頭HOST中的host。 | 不涉及 |
| 使用者請求的host,支援輸入多個值。 |
| $host或$http_host |
用戶端IP | clientip | 用戶端的IP。 支援IPv4(例如 |
說明 建聯IP、XFF IP詳細說明,請參見IP地址校正模式。 |
| 支援填寫IPv6格式IP,例如:240e:XXX:3004:2:3:0:0:3f7,支援網段方式填寫,例如:120.209.XXX.XXX/31,支援輸入多個值。 | 不涉及 | $remote_addr |
用戶端IP版本 | clientipVer | IPv4或IPv6。 |
說明 建聯IP、XFF IP詳細說明,請參見IP地址校正模式。 |
|
| 不涉及 | - |
使用者網路電訊廠商 | geolocation | 用戶端IP歸屬的電訊廠商。 |
說明 建聯IP、XFF IP詳細說明,請參見IP地址校正模式。 |
| 可以通過下拉式清單來選擇,可以輸入字元來過濾選項,支援輸入ID或名稱來模糊比對查詢,支援輸入多個值。 | 不涉及 | $ip_isp_id |
使用者IP地理位置 | geolocation | 用戶端IP所處的地理位置。 |
說明 建聯IP、XFF IP詳細說明,請參見IP地址校正模式。 |
| 可以通過下拉式清單來選擇,可以輸入字元來過濾選項,支援輸入ID或名稱來模糊比對查詢,支援輸入多個值。 | 不涉及 | $ip_country_id |
請求參數 | querystring | 使用者請求URL中攜帶的請求參數。 | 輸入參數名稱。 |
| 支援萬用字元 |
| $arg_{name} |
要求標頭 | header | 使用者請求中攜帶的要求標頭。 | 支援輸入參數名稱,也支援通過下拉式清單來選擇參數。 |
| 支援輸入多個值。 |
| $http_{name} |
Cookie | cookie | 請求攜帶的Cookie。 | 輸入Cookie名稱。 |
| 支援萬用字元 |
| $cookie_{name} |
User-Agent | useragent | 要求標頭裡的User-Agent。 | 不涉及 |
| 可以選擇下拉式清單中的值,或者直接輸入UA值,例如: |
| $http_user_agent |
Range分桶 | range | 將用戶端請求分桶,按百分比執行。 | 不涉及 |
| 輸入百分比的數值。 | 不涉及 | - |
時間 | time | 用戶端請求發生的時間,時區為東八區(北京時間),例如:09:10~14:22。 | 不涉及 |
| 直接輸入時間段,例如09:10~14:22 ,表示9點10分至14點22分。 | 不涉及 | - |
Nginx Var | ngxvar | 當上方所有的變數均無法滿足需求時,支援使用Nginx變數來配置,支援的變數詳見Nginx官網:Nginx變數。 | 可以通過下拉式清單來選擇或直接輸入變數名,支援 |
| 支援輸入多個值。 | 不涉及 | ${name} |
條件運算式常見配置說明
URI(路徑)匹配起始位置:URI 匹配的值為網域名稱後第一個
/開始的路徑部分,不包含網域名稱和請求參數。例如,對於請求https://example.com/path/file.html?key=value,實際匹配的 URI 值為/path/file.html。配置匹配值時需以/開頭。副檔名匹配格式:設定檔副檔名匹配時,匹配值必須包含點號(
.)。例如,要匹配.txt檔案,應填寫.txt而非txt,否則可能導致匹配失敗。萬用字元使用樣本:URI 和副檔名均支援萬用字元
?(匹配任意 1 個字元)和*(匹配任意多個字元)。常用樣本:/*.pdf:匹配根目錄下所有 PDF 檔案。/api/*/data:匹配/api/下任意子路徑中的data路徑。.??:匹配所有兩個字元的副檔名(如.js、.ts)。
IP地址校正模式
規則引擎功能的“IP地址校正模式”分為兩種,使用不同的“IP地址校正模式”會影響到CDN節點對用戶端IP的判斷:
建聯 IP:該模式比對用戶端與CDN節點之間建連使用的IP,如果用戶端與CDN節點之間有經過Proxy 伺服器,那麼建聯IP=Proxy 伺服器IP。
XFF IP:該模式比對使用者請求中x-forwarded-for要求標頭攜帶的左邊第一個IP,不論用戶端與CDN節點之間是否有經過Proxy 伺服器,XFF IP都=用戶端真實IP。
選擇使用哪一種“IP地址校正模式”主要取決於使用者請求在經過CDN節點時,中間是否有經過Proxy 伺服器。
需注意,引用規則條件的功能在CDN節點上的生效位置也會影響到對“IP地址校正模式”的選擇(對於在L2節點上生效的回源配置相關功能而言,使用者請求經過的L1節點就相當於中間經過了Proxy 伺服器)。
樣本:假設用戶端真實IP為10.10.10.10,Proxy 伺服器IP為192.168.0.1。
沒有經過Proxy 伺服器:
使用者請求中x-forwarded-for要求標頭值:
10.10.10.10。用戶端真實IP(即x-forwarded-for要求標頭攜帶的左邊第一個IP)=用戶端與CDN節點建連IP=
10.10.10.10。
經過Proxy 伺服器:
使用者請求中x-forwarded-for要求標頭值:
10.10.10.10,192.168.0.1。用戶端真實IP(即x-forwarded-for要求標頭攜帶的左邊第一個IP)=
10.10.10.10。用戶端與CDN節點建連IP=Proxy 伺服器IP=
192.168.0.1。用戶端真實IP(即x-forwarded-for要求標頭攜帶的左邊第一個IP)≠用戶端與CDN節點建連IP。
少數ISP在特定地區可能會分配私人IP地址給使用者端,導致CDN節點接收到的是使用者的私人IP地址。
私人IP位址範圍有以下三個:
A類私人IP地址:10.0.0.0~10.255.255.255,子網路遮罩:10.0.0.0/8
B類私人IP地址:172.16.0.0~172.31.255.255,子網路遮罩:172.16.0.0/12
C類私人IP地址:192.168.0.0~192.168.255.255,子網路遮罩:192.168.0.0/16
匹配運算子(matchOperator)
名稱 | 網域名稱配置功能函數condition中對應的配置參數 | 含義 |
等於 | matchOperator為equals。 | 變數完全等於匹配值或者完全不等於匹配值的時候,條件才成立。 |
不等於 | matchOperator為equals,並且參數negate的值為true。 | |
存在 | matchOperator為exists。 | 變數存在或者不存在時,條件即成立。 |
不存在 | matchOperator為exists,並且參數negate的值為true。 | |
包含其中任意一個 | matchOperator為contains。 | 變數包含(不包含)任意一個匹配值的時候,條件即成立。最多支援32個匹配值。 包含匹配的情況有兩種:
|
不包含其中任意一個 | matchOperator為contains,並且參數negate的值為true。 | |
大於 | matchOperator為gt。 | 即 |
小於 | matchOperator為lt。 | 即 |
大於等於 | matchOperator為ge。 | 即 |
小於等於 | matchOperator為le | 即 |
正則匹配 | matchOperator為regex。 | 匹配值可以填寫Regex,實現對變數的正則匹配。 |
正則不匹配 | matchOperator為regex,並且參數negate的值為true。 |
萬用字元
萬用字元號 | 含義 | 路徑匹配樣本 |
| 表示匹配任意1個字元。 |
|
| 表示匹配任意多個字元。 |
|
當前支援引用規則條件的功能
功能分類 | 功能名稱 |
基本配置 | |
緩衝配置 | |
回源配置 | |
存取控制 | |
效能最佳化 | |
視頻相關 | |
流量限制 |
配置查看與管理說明
執行動作查看位置:規則引擎頁面僅定義規則條件,不直接配置執行動作。具體的執行動作(如緩衝到期時間、URL 改寫、限速等)需在引用了該規則的對應功能頁面查看和管理。例如,若某個緩衝到期時間配置引用了規則條件,需在「緩衝配置」>「緩衝到期時間」中查看和修改。
遠程鑒權不支援綁定規則引擎:遠程鑒權功能目前不支援引用規則條件,無法通過規則引擎控制遠程鑒權的生效範圍。
鑒權逾時限制:遠程鑒權的鑒權逾時時間長度最高可設定為 3000 毫秒(3 秒),預設值為 500 毫秒,這是系統支援的極限值。
進階用法
以下為結合規則引擎實現進階配置的典型情境:
差異化限速策略:若需對部分請求限速、部分不限速(例如對攜帶鑒權參數的地址限速,對其他地址不限速),或配置兜底限速策略,可在規則引擎中建立區分請求特徵的規則條件,然後在「單請求限速」中分別引用不同規則條件並設定不同的限速值。
基於 IP 的灰階回源:若需實現基於用戶端 IP 的灰階發布或特定 IP 回源到不同來源站點,可在規則引擎中建立 IP 匹配條件,然後在「條件來源站點」中引用該規則條件,指定不同的回源地址。
混合來源站點架構建議:若需同時使用 WAF 和 OSS 作為來源站點,不建議直接配置多個主來源站點。應使用規則引擎根據 URL 路徑建立匹配條件,然後通過「條件來源站點」動態指定不同路徑的回源地址,避免多來源站點回源衝突。
操作步驟
登入CDN控制台。
在左側導覽列,單擊域名管理。
在域名管理頁面,找到目標網域名稱,單擊操作列的管理。
在指定網域名稱的左側導覽列,單擊規則引擎。
單擊添加规则。
在添加规则頁面,設定规则名称和規則內容。
單擊提交,完成配置。
典型配置情境
以下列舉兩個高頻配置情境的實現思路。
情境一:IP 白名單存取控制與非白名單跳轉
需求:僅允許特定 IP 訪問網站,其他 IP 自動跳轉至維護頁面。
配置思路:
在規則引擎中建立規則條件,設定匹配類型為「用戶端 IP」,匹配運算子為「不包含其中任意一個」,匹配值填寫白名單 IP 位址。
在「緩衝配置」>「存取 URL 改寫」中引用該規則條件,將匹配到的請求(即非白名單 IP)重新導向至指定的維護頁面 URL(例如 OSS 上託管的 HTML 頁面)。
注意事項:
若非白名單 IP 返回 403 而非預期跳轉,需檢查是否配置了多個 OSS 來源站點導致回源衝突。建議一個CDN網域名稱只對應一個主 OSS 來源站點。
確保目標維護頁面 URL 可公開訪問,且未被其他存取控制規則攔截。
情境二:Referer 防盜鏈與副檔名組合控制
需求:限制特定副檔名檔案的 Referer 訪問,但允許空 Referer 訪問特定副檔名的檔案。
配置思路:
在規則引擎中建立規則條件,設定匹配類型為「副檔名」,匹配運算子為「不包含其中任意一個」,匹配值填寫需要豁免的副檔名(如
.pdf)。在「存取控制」>「Referer 防盜鏈」中引用該規則條件。這樣,非指定副檔名的請求受 Referer 黑白名單限制,而指定副檔名的空 Referer 請求可通過規則豁免。
常見問題
指定來源站點回源 HOST 設定的規則是否會計入進階條件規則數量限制?
是的。網域名稱下對應功能只要使用過對應的規則,都會被計入進階條件規則數量限制中。請注意單個網域名稱下最多支援建立 50 個規則條件,單個規則條件中的子條件數量最多不超過 20 個。
配置規則引擎後,執行動作在哪裡?
規則引擎本身用於定義條件,需與其他功能(如緩衝到期時間、回源參數改寫、URL 重寫等)聯動生效。執行動作體現在所關聯的具體功能配置中,可在對應功能配置處查看或管理已引用的規則。例如,可以先建立一個規則條件定義匹配邏輯,然後在緩衝到期時間功能中引用該規則,使緩衝策略僅對匹配該規則的請求生效。
開啟 URL 鑒權時,如何通過規則引擎匹配請求參數控制視頻下載?
在開啟 URL 鑒權(A 鑒權)的情況下,可以通過規則引擎匹配請求參數來控制行為。建議在規則引擎中配置「URL 包含」條件,匹配特定的業務參數名或值(如 download=1)。
鑒權參數本身不建議作為匹配依據,以免影響鑒權的正常校正。但其他業務參數(如 download)可以正常匹配。
確保最終產生的 URL 中包含與規則一致的參數(例如 http://.../video.mp4?auth_key=...&download=1),即可觸發對應的回應標頭配置實現下載控制。
如何配置 301 跳轉規則?
可以通過建立存取 URL 重寫規則來實現網域名稱跳轉。在規則引擎中配置 URI 匹配條件,配合 URL 重寫功能,即可實現如將 www.example.com 跳轉至 shop.example.com 的效果。
如何配置子網域名稱 301 強制跳轉到頂級網域名稱?
可以在 CDN 側配置 URL 重寫實現此需求。具體配置如下:
在規則引擎中配置 URI 匹配條件,匹配類型選擇「URI(路徑)」,匹配運算子選擇「正則匹配」(需通過工單申請開通正則匹配許可權,或使用邊緣安全加速),匹配值設定為
^/(.*)$。在 URL 重寫功能中,將目標路徑設定為
https://頂級網域名稱/$1,其中$1為Regex捕獲的路徑部分。
例如,將 sub.wetqt.com/any/path 強制跳轉至 https://wetqt.com/any/path。
如何配置規則引擎實現匹配指定路徑後不緩衝?
針對不同的匹配需求,可採用以下兩種配置方式:
針對檔案尾碼:在緩衝配置中,對不需要緩衝的檔案尾碼設定緩衝到期時間為 0;對需要緩衝的檔案尾碼設定合適的緩衝時間(如 4 小時),並在緩衝配置中設定「不忽略來源站點」、「不緩衝頭部」、「不遵循來源站點緩衝時間」。
針對路徑匹配:由於 CDN 控制台不支援完整 URL 的Regex匹配,需通過規則引擎配置 URI 路徑匹配來實現。匹配類型選擇「URI(路徑)」,匹配運算子選擇「包含其中任意一個」或「不包含其中任意一個」,匹配值中可使用萬用字元
?和*。例如,填寫/*/no-cache/*可匹配/api/no-cache/data等路徑。
路徑匹配的起始位置是否從網域名稱後的第一個 / 開始?
是的。規則引擎中若使用路徑匹配(非正則),匹配內容是從網域名稱後的第一個 / 開始的路徑部分。例如對於 https://example.com/a.html,實際匹配的路徑為 /a.html。
CDN 原生不支援如 ^https?://([^/]+)/path 這類包含協議和網域名稱的完整 URL Regex匹配。
設定檔名匹配時,為什麼首次回應標頭沒有生效?
在規則引擎中設定檔名匹配時,請注意「檔案名稱(basename)」和「副檔名(extension)」是兩個獨立的匹配類型:
檔案名稱(basename):匹配不包含檔案尾碼的檔案名稱部分。例如
script(不包含.js)。副檔名(extension):匹配檔案的尾碼名。例如
.js、.css。
如果在檔案名稱匹配中包含了檔案尾碼(如 script.js),將無法正確匹配。請將檔案尾碼去除,僅填寫檔案名稱部分(如 script)即可生效。
如何配置匹配所有靜態資源(如 js 和 css 檔案)?
在規則引擎中按照副檔名進行匹配,可匹配對應的靜態資源。具體操作:
匹配類型選擇「副檔名」。
匹配運算子選擇「包含其中任意一個」。
匹配值填寫
.js,.css(多個副檔名用英文逗號分隔)。
這樣即可匹配所有 .js 和 .css 副檔名的請求。也可以添加更多副檔名,如 .js,.css,.png,.jpg。