溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Nginx內(nèi)容緩存怎么配置及常見(jiàn)參數(shù)配置有哪些

發(fā)布時(shí)間:2022-05-21 10:42:02 來(lái)源:億速云 閱讀:356 作者:zzz 欄目:大數(shù)據(jù)

這篇文章主要介紹“Nginx內(nèi)容緩存怎么配置及常見(jiàn)參數(shù)配置有哪些”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“Nginx內(nèi)容緩存怎么配置及常見(jiàn)參數(shù)配置有哪些”文章能幫助大家解決問(wèn)題。

使用場(chǎng)景:

項(xiàng)目的頁(yè)面需要加載很多數(shù)據(jù),也不是經(jīng)常變化的,不涉及個(gè)性化定制,為每次請(qǐng)求去動(dòng)態(tài)生成數(shù)據(jù),性能比不上根據(jù)請(qǐng)求路由和參數(shù)緩存一下結(jié)果,使用 nginx 緩存將大幅度提升請(qǐng)求速度。

基礎(chǔ)

只需要配置 proxy_cache_path 和 proxy_cache 就可以開(kāi)啟內(nèi)容緩存,前者用來(lái)設(shè)置緩存的路徑和配置,后者用來(lái)啟用緩存。

http {
 ...
 proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

 server {
 proxy_cache mycache;
 location / {
  proxy_pass http://localhost:8000;
 }
 }
}

對(duì)應(yīng)參數(shù)說(shuō)明:

1.用于緩存的本地磁盤目錄是 /path/to/cache/

2.levels 在 /path/to/cache/ 設(shè)置了一個(gè)兩級(jí)層次結(jié)構(gòu)的目錄。將大量的文件放置在單個(gè)目錄中會(huì)導(dǎo)致文件訪問(wèn)緩慢,所以針對(duì)大多數(shù)部署,我們推薦使用兩級(jí)目錄層次結(jié)構(gòu)。如果 levels 參數(shù)沒(méi)有配置,則 nginx 會(huì)將所有的文件放到同一個(gè)目錄中。

3.keys_zone 設(shè)置一個(gè)共享內(nèi)存區(qū),該內(nèi)存區(qū)用于存儲(chǔ)緩存鍵和元數(shù)據(jù),有些類似計(jì)時(shí)器的用途。將鍵的拷貝放入內(nèi)存可以使 nginx 在不檢索磁盤的情況下快速?zèng)Q定一個(gè)請(qǐng)求是 hit 還是 miss,這樣大大提高了檢索速度。一個(gè) 1mb 的內(nèi)存空間可以存儲(chǔ)大約 8000 個(gè) key,那么上面配置的 10mb 內(nèi)存空間可以存儲(chǔ)差不多 80000 個(gè)key。

4.max_size 設(shè)置了緩存的上限(在上面的例子中是 10g)。這是一個(gè)可選項(xiàng);如果不指定具體值,那就是允許緩存不斷增長(zhǎng),占用所有可用的磁盤空間。當(dāng)緩存達(dá)到這個(gè)上線,處理器便調(diào)用 cache manager 來(lái)移除最近最少被使用的文件,這樣把緩存的空間降低至這個(gè)限制之下。

5.inactive 指定了項(xiàng)目在不被訪問(wèn)的情況下能夠在內(nèi)存中保持的時(shí)間。在上面的例子中,如果一個(gè)文件在 60 分鐘之內(nèi)沒(méi)有被請(qǐng)求,則緩存管理將會(huì)自動(dòng)將其在內(nèi)存中刪除,不管該文件是否過(guò)期。該參數(shù)默認(rèn)值為 10 分鐘(10m)。注意,非活動(dòng)內(nèi)容有別于過(guò)期內(nèi)容。nginx 不會(huì)自動(dòng)刪除由緩存控制頭部指定的過(guò)期內(nèi)容(本例中cache-control:max-age=120)。過(guò)期內(nèi)容只有在 inactive 指定時(shí)間內(nèi)沒(méi)有被訪問(wèn)的情況下才會(huì)被刪除。如果過(guò)期內(nèi)容被訪問(wèn)了,那么 nginx 就會(huì)將其從原服務(wù)器上刷新,并更新對(duì)應(yīng)的 inactive 計(jì)時(shí)器。

6.nginx 最初會(huì)將注定寫入緩存的文件先放入一個(gè)臨時(shí)存儲(chǔ)區(qū)域, use_temp_path=off 命令指示 nginx 將在緩存這些文件時(shí)將它們寫入同一個(gè)目錄下。我們強(qiáng)烈建議你將參數(shù)設(shè)置為 off 來(lái)避免在文件系統(tǒng)中不必要的數(shù)據(jù)拷貝。use_temp_path 在 nginx1.7 版本和 nginx plus r6 中有所介紹。

最終,proxy_cache 命令啟動(dòng)緩存那些 url 與 location 部分匹配的內(nèi)容(本例中,為/)。你同樣可以將 proxy_cache 命令添加到 server 部分,這將會(huì)將緩存應(yīng)用到所有的那些 location 中未指定自己的 proxy_cache 命令的服務(wù)中。

nginx 緩存相關(guān)進(jìn)程

緩存中還涉及兩個(gè)額外的nginx進(jìn)程:

  • cache manager 周期性地啟動(dòng),檢查高速緩存的狀態(tài)。如果高速緩存大小超過(guò) proxy_cache_path 中 max_size 參數(shù)設(shè)置的限制,則高速緩存管理器將刪除最近訪問(wèn)過(guò)的數(shù)據(jù)。在兩次緩存管理器啟動(dòng)的間隔,緩存的數(shù)據(jù)量可能短暫超過(guò)配置的大小。

  • cache loader 只運(yùn)行一次,nginx 開(kāi)始之后。它將有關(guān)以前緩存的數(shù)據(jù)的元數(shù)據(jù)加載到共享內(nèi)存區(qū)域。一次加載整個(gè)緩存可能會(huì)消耗足夠的資源來(lái)在啟動(dòng)后的最初幾分鐘內(nèi)降低 nginx 的性能。要避免這種情況,請(qǐng)通過(guò)在 proxy_cache_path 指令中包含以下參數(shù)來(lái)配置緩存的迭代加載:

    • loader_threshold - 迭代持續(xù)時(shí)間,以毫秒為單位(默認(rèn)情況下 200)

    • loader_files - 一次迭代期間加載的最大項(xiàng)目數(shù)(默認(rèn)情況下 100)

    • loader_sleeps - 迭代之間的延遲,以毫秒為單位(默認(rèn)情況下 50)

在以下示例中,迭代持續(xù)數(shù)300 毫秒或直到 200 個(gè)項(xiàng)目被加載進(jìn)去:

proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;

其他常用參數(shù)

配置示例:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
 ...
 location / {
  proxy_cache my_cache;
  # proxy_cache_key "$host$request_uri$cookie_user";   proxy_cache_min_uses 3;
  proxy_cache_methods get head post;
  proxy_cache_valid 200 302 10m;
  proxy_cache_valid 404  1m;
  # proxy_cache_valid any 5m;   proxy_pass http://localhost:8000;
 }
}

對(duì)應(yīng)參數(shù)說(shuō)明:

  • proxy_cache_key 為更改計(jì)算密鑰時(shí)使用的請(qǐng)求特征,指定緩存的 key,這個(gè)不推薦,示例是使用域名,請(qǐng)求url,用戶 cookie 來(lái)當(dāng)作 key,意味著一個(gè)頁(yè)面將為不同的用戶緩存 n 次,絕大多數(shù)情況不需要這樣的操作。

  • proxy_cache_min_uses 為在緩存響應(yīng)之前必須使用相同密鑰的請(qǐng)求的最小次數(shù)。

  • proxy_cache_methods 為指定要被緩存的請(qǐng)求方式的響應(yīng)值,默認(rèn)為 get 和 head,新增其他的需要一起列出來(lái),如上示例所示。

  • proxy_cache_valid 為響應(yīng)狀態(tài)碼的緩存時(shí)間,示例可以為每個(gè)狀態(tài)碼緩存指定時(shí)間,也可以使用 any 進(jìn)行全部狀態(tài)碼的緩存。

清除緩存

需要提前加一個(gè)配置,用于標(biāo)識(shí)使用 http purge 方法的請(qǐng)求并刪除匹配的 url 對(duì)應(yīng)的緩存。

1.在 http {} 上下文中創(chuàng)建新變量,例如 $purge_method, 他依賴于 $request_method 變量:

http {
 ...
 map $request_method $purge_method {
  purge 1;
  default 0;
 }
}

2.在 location {} 塊中,已經(jīng)配置緩存的前提下,引入 proxy_cache_purge 參數(shù)來(lái)指定清除緩存請(qǐng)求的條件。例如在上一步指定的 $request_method

server {
 listen  80;
 server_name www.example.com;

 location / {
  proxy_pass https://localhost:8002;
  proxy_cache mycache;

  proxy_cache_purge $purge_method;
 }
}

配置完并使之生效之后,就可以發(fā)送一條 purge 請(qǐng)求來(lái)讓緩存失效了,例如:

curl -x purge -d – https://www.example.com/*

在該示例中,將清除具有公共 url 部分(由星號(hào)通配符指定)的資源。但這些緩存條目不會(huì)從緩存中完全刪除:它們會(huì)保留在磁盤上,直到它們被視為不活動(dòng)(由proxy_cache_path 中的 inactive參數(shù)決定)的時(shí)候才完全刪除,或緩存清除器(由 proxy_cache_path 中的 purge 決定),或客戶端嘗試訪問(wèn)它們的時(shí)候。

關(guān)于“Nginx內(nèi)容緩存怎么配置及常見(jiàn)參數(shù)配置有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI