nginx 快取控制

2021-09-21 20:06:54 字數 1424 閱讀 3952

nginx 有好幾個引數控制快取,以nginx快取檔案作為例子。

第一,快取池

1

proxy_cache_path  /var/cache/nginx/proxy_cache levels=1:2 keys_zone=static:10m max_size=10g inactive=2d;

這個引數控制快取池的規模,以及與源伺服器的互動頻率。快取淘汰是非常被動的,僅僅是為了維護快取池的規模。

本例使用10m共享記憶體維護快取檔案列表,(nginx官網介紹,1m記憶體可以儲存8000個檔案資訊)

如果乙個檔案2天內不活躍,即沒被人二次訪問,則在快取池中淘汰掉,在硬碟上快取的檔案總量最高為10g 。

如果快取池裡的檔案總量已經達到10g,那麼此時快取根據lru規則淘汰。共享記憶體與快取規模的比例大概是1m:1g 。

第二,快取的生命週期

1

proxy_cache_valid   200 302 2d;

這個引數直接控制快取的生命週期,這個值應該大於等於快取池的檔案失效時間。

本例中,如果在2天內再次被訪問,則直接命中快取池,返回hit,

超過2天就主動跳過快取池,直接從源伺服器再取一遍,再跟快取池進行比較。

如果快取池裡有,則更新快取的時間戳,並返回expire,

如果快取池裡沒有,則重新生成快取,並返回miss 。

不論miss還是expired,代價都比較高,都需要跟後端取資料。

第三,瀏覽器快取的生命週期

1

expires 7d

這個引數控制瀏覽器儲存多久,分為幾個階段:

(不同的瀏覽器行為稍有不同,以chrome為例)

1、客戶端使用瀏覽器第一次開啟網頁,伺服器返回200,進入瀏覽器快取,生命週期是7天

2、第二天,客戶端用瀏覽器再次開啟網頁時,返回**依然是200,但是命中的是本地快取

3、客戶端使用f5重新整理了瀏覽器,強制與伺服器發生通訊,在與伺服器比較後發現,檔案跟瀏覽器快取是一樣的,於是得到了304,如果不一樣,則是200 。

4、客戶端使用ctrl+f5強制瀏覽器快取失效,伺服器返回200,重新生成瀏覽器快取。

5、7天後客戶端再次訪問網頁,由於瀏覽器快取到期,瀏覽器與伺服器通訊,伺服器返回200,重新生成瀏覽器快取。

以上三個引數,對於快取伺服器影響較大的是第一二個引數。

首先,我們應該維護乙個盡可能大的快取池,把麵做廣。快取池過小,命中率再高也白搭;

其次,我們要提高快取命中率,減少快取與源伺服器的互動頻率。盡可能增加快取生命週期,讓快取使用lru被動淘汰。

最後,如果是小範圍的快取,為了節省昂貴的磁碟io,我們可以選擇將快取放在共享記憶體中。

1

Nginx 快取控制

nginx 有好幾個引數控制快取,以nginx快取檔案作為例子。第一,快取池 proxy cache path var cache nginx proxy cache levels 1 2 keys zone static 50m max size 10g inactive 3d 這個引數控制快取池...

Nginx的快取控制

加速使用者訪問,提公升單個使用者 瀏覽器訪問者 體驗,快取在本地 快取在nginx端,提公升所有訪問到nginx這一端的使用者體驗 提公升訪問上游 upstream 伺服器的速度 使用者訪問仍然產生請求流量 expires server 配置上游伺服器 集群 upstream tomcats pro...

瀏覽器快取控制 nginx的expires設定

對於 的,尤其是新聞站,一旦發布,改動的可能是非常小的.我們希望 能否在使用者訪問一次後,快取在使用者的瀏覽器端,且時間比較長的快取.可以,用到 nginx的expires設定 nginx中設定過期時間,非常簡單,在location或if段裡,來寫.time 預設單位 s expires 30s 快...