Nginx的緩存機制主要分為兩種:強制緩存(強緩存)和協商緩存(驗證緩存)。
強制緩存是指瀏覽器在請求資源時,直接從本地緩存中讀取數據而不向服務器發送任何請求。這種緩存機制主要依賴于HTTP響應頭中的Cache-Control
和Expires
字段。
Expires: Wed, 21 Oct 2025 07:28:00 GMT
。但由于Expires
依賴于客戶端的時間設置,可能出現非預期的狀況。Cache-Control
頭部,提供了更多控制緩存行為的指令:
no-store
:禁止緩存(強緩存和協商緩存),客戶端不存儲任何值。no-cache
:禁止強緩存,需要重寫驗證(可以理解為禁止強緩存,啟用協商緩存)。private
:私有緩存,禁止中間人(比如CDN等代理緩存)。public
:共享緩存,允許中間人緩存。max-age
:資源可以被緩存的最大時間,單位:秒,是一個相對時間,優先級高于Expires
。s-maxage
:用于共享緩存,單位:秒,如果在其有效期內,不去訪問CDN等。s-maxage
會覆蓋max-age
和Expires
。must-revalidate
:緩存使用陳舊資源時,必需先驗證狀態。協商緩存是一種在強制緩存失效后使用的緩存機制。在這種情況下,瀏覽器會攜帶特定的緩存標識(如ETag
或Last-Modified
)向服務器發送請求,詢問資源是否有更新。
ETag
也會隨之改變。Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT
。ETag
值。Last-Modified
值。以下是一個簡單的Nginx配置示例,展示了如何為靜態資源設置強緩存:
location /static/ {
alias /path/to/static/files;
expires 30d;
add_header Cache-Control "public, max-age=31536000";
}
上述配置將/static/
路徑下的文件緩存30天,并且通過Cache-Control
頭部設置為公共緩存,允許任何中間人緩存。
curl -i http://example.com/resource.js
可以查看請求和響應頭信息,幫助調試緩存配置。通過合理配置強緩存和協商緩存,可以顯著提升網站性能,減少服務器負載。在實際應用中,通常會結合使用這兩種緩存機制,以達到既快速又可靠的緩存效果。