Nginx快取設定教程

大雄45 發表於 2021-10-13

Nginx快取設定教程Nginx快取設定教程

在開發除錯web的時候,經常會碰到因瀏覽器快取(cache)而經常要去清空快取或者強制重新整理來測試的煩惱,提供下apache不快取配置和nginx不快取配置的設定。在常用的快取設定裡面有兩種方式,都是使用add_header來設定:分別為Cache-Control和Pragma。

nginx:
location ~ .*\.(css|js|swf|php|htm|html )$ {
add_header Cache-Control no-store;add_header Pragma no-cache;
}

對於站點中不經常修改的靜態內容(如圖片,JS,CSS),可以在伺服器中設定expires過期時間,控制瀏覽器快取,達到有效減小頻寬流量,降低伺服器壓力的目的。

以Nginx伺服器為例:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
#過期時間為30天,
#圖片檔案不怎麼更新,過期可以設大一點,
#如果頻繁更新,則可以設定得小一點。
expires 30d;
}
location ~ .*\.(js|css)$ {
expires 10d;
}

【背景】:Expires是Web伺服器響應訊息頭欄位,在響應http請求時告訴瀏覽器在過期時間前瀏覽器可以直接從瀏覽器快取取資料,而無需再次請求。

【相關資料】

1、Cache-control策略

Cache-Control與Expires的作用一致,都是指明當前資源的有效期,控制瀏覽器是否直接從瀏覽器快取取資料還是重新發請求到伺服器取資料。只不過Cache-Control的選擇更多,設定更細緻,如果同時設定的話,其優先順序高於Expires。

http協議頭Cache-Control :

值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age

各個訊息中的指令含義如下:

  • Public指示響應可被任何快取區快取。
  • Private指示對於單個使用者的整個或部分響應訊息,不能被共享快取處理。這允許伺服器僅僅描述當使用者的部分響應訊息,此響應訊息對於其他使用者的請求無效。
  • no-cache指示請求或響應訊息不能快取
  • no-store用於防止重要的資訊被無意的釋出。在請求訊息中傳送將使得請求和響應訊息都不使用快取。
  • max-age指示客戶機可以接收生存期不大於指定時間(以秒為單位)的響應。
  • min-fresh指示客戶機可以接收響應時間小於當前時間加上指定時間的響應。
  • max-stale指示客戶機可以接收超出超時期間的響應訊息。如果指定max-stale訊息的值,那麼客戶機可以接收超出超時期指定值之內的響應訊息。
Last-Modified/If-Modified-Since
  • Last-Modified/If-Modified-Since要配合Cache-Control使用。
  • Last-Modified:標示這個響應資源的最後修改時間。web伺服器在響應請求時,告訴瀏覽器資源的最後修改時間。
  • If-Modified-Since:當資源過期時(使用Cache-Control標識的max-age),發現資源具有Last-Modified宣告,則再次向web伺服器請求時帶上頭 If-Modified-Since,表示請求時間。web伺服器收到請求後發現有頭If-Modified-Since 則與被請求資源的最後修改時間進行比對。若最後修改時間較新,說明資源又被改動過,則響應整片資源內容(寫在響應訊息包體內),HTTP 200;若最後修改時間較舊,說明資源無新修改,則響應HTTP 304 (無需包體,節省瀏覽),告知瀏覽器繼續使用所儲存的cache。

其最終達到的就是等效於設定這三類html快取技術:

<meta http-equiv="pragma" content="no-cache"/>
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate"/>
<meta http-equiv="expires" content="0"/>


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2795659/,如需轉載,請註明出處,否則將追究法律責任。