配置自定義Cachekey,開發者可以根據HTTP請求的不同部分(例如URI、請求參數、HTTP請求頭或自定義變量等)制定規則來生成Cachekey,將訪問同一個文件的一類請求轉化為統一的Cachekey,避免將同一類請求緩存為不同文件的問題,從而提高緩存的命中率,降低回源率,減少請求的響應時間和帶寬消耗。
由于功能特性,自定義CacheKey和忽略參數配置功能存在沖突。如果您已經配置了忽略參數,那么CDN節點在處理用戶請求時,會去除請求URL中攜帶在?
之后的參數,這將導致CacheKey中配置的請求參數不可用。開啟自定義CacheKey功能前,請確保您的忽略參數沒有設置。
使用場景
自定義Cachekey功能不會修改回源的URL,僅會修改請求的緩存標識,回源的請求和客戶端發起的請求內容保持一致。
Cachekey是一個文件在CDN節點上緩存時唯一的身份ID,每個在CDN節點上緩存的文件都對應一個Cachekey。文件的Cachekey默認為客戶端請求的URL(帶參數)。
場景一
客戶不同請求的URL中含有復雜的參數,因此即使多個請求訪問的是同一個文件,但由于URL參數不同,CDN節點會視為請求不同文件而將不同請求緩存成多個文件,造成回源的請求增加。
可通過自定義Cachekey規則將同一類請求的Cachekey統一,降低回源率。
場景二
客戶端請求的URL一樣時,CDN將視為請求同一個文件。但實際上請求的Http Header中攜帶了client字段區分了客戶端系統,希望請求不同文件。
此時可通過自定義Cachekey將client字段的值拼接至Cachekey,兩個請求即可識別為2個不同的Cachekey。
操作步驟
登錄CDN控制臺。
在左側導航欄,單擊域名管理。
在域名管理頁面,找到目標域名,單擊操作列的管理。
在指定域名的左側導航欄,單擊緩存配置。
在自定義Cachekey頁簽下,單擊配置,配置Cachekey。
說明支持對URI、請求參數、HTTP Header進行修改,同時支持自定義變量,從請求中提取需要的字段。最終的Cachekey將由URI、請求參數、HTTP Header、自定義變量四部分組合而成。
參數類型
操作說明
URI
源URI:以正斜線(/)開頭的URI,不含http://頭及域名。支持PCRE正則表達式。
目標URI:以正斜線(/)開頭的URI,不含http://頭及域名。操作結果是使用改寫后的目標URI來拼接Cachekey。
請求參數
操作的對象是用戶發起的原始請求URL中攜帶的參數,可以對參數進行新增、刪除、修改、保留操作,操作后的結果將會拼接到Cachekey中。
HTTP Header
操作的對象是用戶發起的原始請求中攜帶的HTTP Header,可以將多個HTTP Header的值拼接到Cachekey中。
自定義變量
可使用正則表達式從用戶發起的原始請求中的請求參數、HTTP Header、Cookie、URI中截取出任意字段拼接到Cachekey中。
單擊確定。
配置示例
URI
客戶端的請求http://aliyundoc.com/a/b/image.jpg
和http://aliyundoc.com/a/b/c/image.jpg
將視為請求同一個文件,該文件的Cachekey為http://aliyundoc.com/c/image.jpg
。
請求參數
客戶端的請求http://aliyundoc.com/a/b/image.jpg?delete_par=1&modify_par=1
將按規則添加add_par=1
,刪除delete_par
,將modify_par
的值修改為2
,最終轉化為http://aliyundoc.com/a/b/image.jpg?modify_par=2&add_par=1
。
請求參數中,如對同一個變量同時進行了多個操作,則各種操作的生效優先級:新增>刪除>保留>修改。
HTTP Header
客戶端請求的HTTP Header的User-Agent
和Accept-Language
的值將被拼接到Cachekey中。例如請求http://aliyundoc.com/a/b/image.jpg
中的User-Agent=Mozilla/5.0 (Linux; X11)
,Accept-Language=en
,則該請求的Cachekey為:http://aliyundoc.com/a/b/image.jpgMozilla/5.0(Linux;X11)en
。
自定義變量
示例一
變量名為language
,來源為Request Header
,來源字段名為Accept-Language
,匹配規則為 ([%w]+),([%w]+)
,變量表達式為$1aa
。
客戶端的請求http://aliyundoc.com/a/b/image.jpg
且攜帶HTTP請求頭Accept-Language=en,ch
,則匹配規則將匹配到en
賦值給變量表達式中的$1
。變量表達式還將在末尾拼接上aa
,得到enaa
的變量并取別名為language
,拼接在URL后方形成最終的Cachekey:http://aliyundoc.com/a/b/image.jpgenaa
。
變量表達式中的$n
的含義是匹配規則中第n
個括號所匹配到的內容。例如示例一中Accept-Language=en,ch
,匹配規則為([%w]+),([%w]+)
,則$1=en
,$2=ch
。
示例二
變量名為expired
,來源為Request Cookie
,來源字段名為a
,匹配規則為[%w]+:(.*)
,變量表達式為 $1
。
客戶端的請求http://aliyundoc.com/a/b/image.jpg
且攜帶Cookie a=expired_time:12635187
,則匹配規則將匹配到12635187
賦值給變量表達式中的$1
并取別名為expired
,拼接在URL后方形成最終的Cachekey:http://aliyundoc.com/a/b/image.jpg12635187
。
示例三
同時設置URI規則和自定義變量。
URI:
將所有URI符合/abc/.*/abc
的請求都合并成 /abc
。
自定義變量:
變量名為testname
,來源為Path
,匹配規則為/abc/xyz/(.*)
,變量表達式為$1
。
客戶端的請求URLhttp://aliyundoc.com/abc/xyz/abc/image.jpg
,按URI的配置Cachekey將被合并成http://aliyundoc.com/abc/image.jpg
, 然后根據自定義變量的配置該URL將會命中/abc/xyz/(.*)
,此時$1
將被賦值為abc
并拼接到Cachekey中,形成最終的Cachekey:http://aliyundoc.com/abc/image.jpgabc
,從而達到兩個規則組合使用,實現更復雜的緩存邏輯。
如果沒有匹配到CacheKey的自定義變量,則變量表達式$1
就不會被拼接到CacheKey中。