頁面規則 - 快取
本文件介紹瞭如何透過啟用頁面規則中的快取選項對靜態資源或較少變動的內容進行快取操作。 利用快取可顯著提升資源的訪問速度並最佳化終端使用者的體驗。
引數說明
引數名 | 資料型別 | 是否必選 | 引數描述 |
---|---|---|---|
cache_key | array | 是 | 用於標識快取資源的鍵值 |
enforce_cache | bool | 否 | 是否忽略伺服器響應頭中的 Cache-Control 或 Expires 等快取指令,而採用 default_ttls 引數定義的預設快取策略 |
default_ttls | array | 否 | 預設的快取失效時間策略 |
browser_ttl | array | 否 | 設定瀏覽器端的快取有效期 |
browser_ttl_unit | array | 否 | 瀏覽器快取有效期的單位,可選值有 s(秒)、min(分鐘)、hour(小時)、day(天) |
disable_convert_head | bool | 否 | 是否將 HEAD 請求轉換為 GET 請求,預設值為 true |
引數 cache_key
是用於生成標識快取的 key 的陣列。
不帶引數的 cache key 有以下常見選擇:
- uri:請求的 URI,例如 /hello.html。
- sorted-query-string:經過排序的查詢引數。
- query-string:查詢引數。
- user-agent:使用者代理。
- scheme:協議型別,可能是 http 或 https。
- client-continent: 客戶所在的大洲,預設透過客戶端 IP 地址來識別,也可以透過
X-Forwarded-For
請求頭的第一個地址來識別。 - req-method:HTTP 請求方法,如 CONNECT、DELETE、GET、HEAD、POST、PUT、TRACE、OPTIONS、PATCH 等。
- first-x-forwarded-addr:X-Forwarded-For 請求頭中的第一個 IP 地址,如
1.1.1.1,2.2.2.2
中的1.1.1.1
。 - last-x-forwarded-addr:X-Forwarded-For 請求頭中的最後一個 IP 地址,如
1.1.1.1,2.2.2.2
中的2.2.2.2
。 - http-version:HTTP 版本號,可能是 2.0、1.1、1.0、0.9。
帶引數的 cache key 有以下常見選擇:
- uri-arg:URI 中的引數,例如 hello.html?username=openresty 中的
username
。 - req-header:請求頭資訊,例如 Host: openresty.com 中的
Host
。 - req-cookie:請求中的 Cookie,例如 Cookie: token=tokenvalue 中的
token
。
引數 browser_ttl
及 browser_ttl_unit
用於定義瀏覽器端的快取設定,在設定的快取期限內,瀏覽器將從本地快取讀取資源。
default_ttls
引數是一個陣列格式,允許設定多個快取策略。策略中的具體引數包括:
引數名 | 資料型別 | 是否必選 | 引數描述 |
---|---|---|---|
ttl | number | 是 | 定義快取的生命週期 |
ttl_unit | string | 是 | 快取生命週期的單位,支援 s(秒)、min(分鐘)、hour(小時)、day(天) |
status | number | 是 | 指定響應狀態碼下的快取策略 |
配置示例
- enable_rule: true
conditions:
- op: prefix
var: uri
val: /static/
cache:
cache_key:
- name: uri
- name: query-string
- name: req-header
args: Host
- name: uri-arg
args: argname
- name: req-cookie
args: cookiename
- name: client-continent # means args: client-addr
- name: client-continent
args: first-x-forwarded-addr
enforce_cache: true
default_ttls:
- ttl_unit: min
status: 200
ttl: 300
browser_ttl: 300
browser_ttl_unit: min
disable_convert_head: false
在該示例中,檢查請求的 URI
是否以 /static/
作為字首。如果是,將啟動快取機制,其中快取鍵由 URI 和請求引數組成,快取時間設定為 300 分鐘。