首頁  >  文章  >  運維  >  Nginx內容快取怎麼配置及常見參數配置有哪些

Nginx內容快取怎麼配置及常見參數配置有哪些

WBOY
WBOY轉載
2023-05-11 22:25:111523瀏覽

使用場景:

專案的頁面需要加載很多數據,也不是經常變化的,不涉及個性化定制,為每次請求去動態生成數據,性能比不上根據請求路由和參數快取一下結果,使用nginx 快取將大幅提升請求速度。

基礎

只需要配置proxy_cache_path 和proxy_cache 就可以開啟內容緩存,前者用來設定快取的路徑和配置,後者用來啟用緩存。

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;
 }
 }
}

對應參數說明:

1.用於快取的本機磁碟目錄是/path/to/cache/

2 .levels 在/path/to/cache/ 設定了一個兩層次結構的目錄。將大量的檔案放置在單一目錄中會導致檔案存取緩慢,所以針對大多數部署,我們建議使用兩級目錄層次結構。如果 levels 參數沒有配置,則 nginx 會將所有的檔案放到同一個目錄中。

3.keys_zone 設定一個共享記憶體區,該記憶體區用於儲存快取鍵和元數據,有些類似計時器的用途。將鍵的拷貝放入記憶體可以使 nginx 在不檢索磁碟的情況下快速決定一個請求是 hit 還是 miss,這大大提高了檢索速度。一個 1mb 的記憶體空間可以儲存大約 8000 個 key,那麼上面配置的 10mb 記憶體空間可以儲存差不多 80000 個key。

4.max_size 設定了快取的上限(在上面的範例中是 10g)。這是一個可選項;如果不指定具體值,那就是允許快取不斷增長,佔用所有可用的磁碟空間。當快取達到這個上線,處理器便呼叫 cache manager 來移除最近最少被使用的文件,這樣把快取的空間降到這個限制之下。

5.inactive 指定了專案在不被存取的情況下能夠在記憶體中保持的時間。在上面的例子中,如果一個檔案在 60 分鐘之內沒有被請求,則快取管理將會自動將其在記憶體中刪除,不管該檔案是否過期。此參數預設值為 10 分鐘(10m)。注意,非活動內容有別於過期內容。 nginx 不會自動刪除快取控制頭部指定的過期內容(本例中cache-control:max-age=120)。過期內容只有在 inactive 指定時間內沒有被存取的情況下才會被刪除。如果過期內容被存取了,那麼 nginx 就會將其從原始伺服器上刷新,並更新對應的 inactive 計時器。

6.nginx 最初會將注定寫入快取的檔案先放入一個暫存區域, use_temp_path=off 指令指示 nginx 將在快取這些檔案時將它們寫入同一個目錄下。我們強烈建議你將參數設為 off 來避免在檔案系統中不必要的資料拷貝。 use_temp_path 在 nginx1.7 版本和 nginx plus r6 中有所介紹。

最終,proxy_cache 指令啟動快取那些 url 與 location 部分相符的內容(本例中,為/)。你同樣可以將 proxy_cache 指令新增至 server 部分,這會將快取套用到所有的那些 location 中未指定自己的 proxy_cache 指令的服務。

nginx 快取相關進程

快取中還涉及兩個額外的nginx進程:

  • cache manager週期性地啟動,檢查高速緩存的狀態。如果快取大小超過 proxy_cache_path 中 max_size 參數設定的限制,則快取管理器將刪除最近存取過的資料。在兩次快取管理器啟動的間隔,快取的資料量可能短暫超過配置的大小。

  • cache loader 只運行一次,nginx 開始之後。它將有關先前快取的資料的元資料載入到共享記憶體區域。一次載入整個快取可能會消耗足夠的資源來在啟動後的最初幾分鐘內降低 nginx 的效能。若要避免這種情況,請透過在proxy_cache_path 指令中包含下列參數來設定快取的迭代載入:

    • loader_threshold - 迭代持續時間,以毫秒為單位(預設情況下200)

    • loader_files - 一次迭代期間載入的最大項目數(預設為100)

    • loader_sleeps - 迭代之間的延遲,以毫秒為單位(預設值50)

在下列範例中,迭代持續數300 毫秒或直到200 個項目被載入進去:

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

其他常用參數

設定範例:

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;
 }
}

#對應參數說明:

  • proxy_cache_key為更改計算密鑰時使用的請求特徵,指定緩存的key,這個不推薦,示例是使用域名,請求url,用戶cookie 來當作key,意味著一個頁面將為不同的用戶緩存n 次,絕大多數情況不需要這樣的操作。

  • proxy_cache_min_uses 為在快取回應之前必須使用相同金鑰的請求的最小次數。

  • proxy_cache_methods 为指定要被缓存的请求方式的响应值,默认为 get 和 head,新增其他的需要一起列出来,如上示例所示。

  • proxy_cache_valid 为响应状态码的缓存时间,示例可以为每个状态码缓存指定时间,也可以使用 any 进行全部状态码的缓存。

清除缓存

需要提前加一个配置,用于标识使用 http purge 方法的请求并删除匹配的 url 对应的缓存。

1.在 http {} 上下文中创建新变量,例如 $purge_method, 他依赖于 $request_method 变量:

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

2.在 location {} 块中,已经配置缓存的前提下,引入 proxy_cache_purge 参数来指定清除缓存请求的条件。例如在上一步指定的 $request_method

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

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

  proxy_cache_purge $purge_method;
 }
}

配置完并使之生效之后,就可以发送一条 purge 请求来让缓存失效了,例如:

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

在该示例中,将清除具有公共 url 部分(由星号通配符指定)的资源。但这些缓存条目不会从缓存中完全删除:它们会保留在磁盘上,直到它们被视为不活动(由proxy_cache_path 中的 inactive参数决定)的时候才完全删除,或缓存清除器(由 proxy_cache_path 中的 purge 决定),或客户端尝试访问它们的时候。

以上是Nginx內容快取怎麼配置及常見參數配置有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除