1 緩存概念
- nginx緩存原理
-
Nginx Proxy Cache原理和最佳實踐(上)1 緩存概念2 HTTP緩存機制NGINX都會緩存哪些資源 - 當第一個使用者(藍)通路網站,他的請求首先會到NGINX PROXY SERVER,随後NGNIX發往後端伺服器(灰),後端會将請求的響應首先發往NGINX,由其傳回給使用者(藍色),如果這個響應是可以緩存的,則NGINX會保留一份響應副本,當其他使用者(橙色)發起相同的request請求時,NGINX會根據request請求的内容是否存在于緩存中,來直接傳回給使用者,不再經過後端。
這個場景同樣适用于浏覽器,CDN,用于緩存靜态資源。
2 HTTP緩存機制
後端伺服器會通過響應標頭來定義緩存特性
- Origin Server定義的緩存特性
-
Nginx Proxy Cache原理和最佳實踐(上)1 緩存概念2 HTTP緩存機制NGINX都會緩存哪些資源
緩存伺服器可通過設定一些參數來忽略或重寫後端伺服器的緩存特性,但後端伺服器的緩存特性也是極其重要的。
Expires
最原始的配置政策,即設定過期時間,但使用效率低下,目前絕大部分已經被Cache-Control替代
Cache-Control
定義緩存資源屬性是private或public,并且設定緩存多久後過期,本例中,屬性為public,60秒過期
X-Accel-Expires
隻有nginx能識别的緩存特性header,優先級大于上面兩個header,可以設定此header,在nginx側來重新定義緩存特性
Etag和Last-Modified
捆綁生成的: 有些場景下,你希望client端的浏覽器長時間緩存,而緩存伺服器隻短時間緩存檔案,以至于當後端伺服器更新後,緩存伺服器會及時同步,我們就可以使用最後兩個header,Last-Modified表示最後修改時間,并聲明一個ETag(哈希值),做為緩存内容的标簽,具有唯一性;用戶端通路請求帶有If‑Modified‑Since或者If‑None‑Match header,并申明自己的用戶端帶有靜态緩存檔案,以及檔案修改日期和ETag值,如果伺服器端的版本和Etag值與用戶端一緻,則服務端會直接傳回304 not modified,這個驗證流程是非常快的,并且節省網絡帶寬;
如果Cache-Control設定為public,則用戶端不會去驗證資源的有效性,将會一直使用直到過期,同時public也代表資源可以被緩存在web proxy中;
如果Cache-Control包含must-revalidate,則用戶端每一次通路請求資源都會去驗證緩存是否有更新;
NGINX都會緩存哪些資源
首先看下nginx proxy cache最基本的配置:
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
set $upstream http://ip:port
location / {
proxy_cache my_cache;
proxy_pass $upstream; }
}