快取

本文件介紹瞭如何透過啟用頁面規則中的快取選項對靜態資源或較少變動的內容進行快取操作。 利用快取可顯著提升資源的訪問速度並最佳化終端使用者的體驗。

引數說明

引數名資料型別是否必選引數描述
cache_keyarray用於標識快取資源的鍵值
enforce_cachebool是否忽略伺服器響應頭中的 Cache-Control 或 Expires 等快取指令,而採用 default_ttls 引數定義的預設快取策略
default_ttlsarray預設的快取失效時間策略
browser_ttlarray設定瀏覽器端的快取有效期
browser_ttl_unitarray瀏覽器快取有效期的單位,可選值有 s(秒)、min(分鐘)、hour(小時)、day(天)
disable_convert_headbool是否將 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_ttlbrowser_ttl_unit 用於定義瀏覽器端的快取設定,在設定的快取期限內,瀏覽器將從本地快取讀取資源。

default_ttls 引數是一個陣列格式,允許設定多個快取策略。策略中的具體引數包括:

引數名資料型別是否必選引數描述
ttlnumber定義快取的生命週期
ttl_unitstring快取生命週期的單位,支援 s(秒)、min(分鐘)、hour(小時)、day(天)
statusnumber指定響應狀態碼下的快取策略

配置示例

- 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 分鐘。