Nginx (一) 快取使用指南

2021-08-19 13:30:05 字數 4625 閱讀 5799

參考: 

nginx其他優化

nginx快取使用官方指南

使用nginx的proxy_cache快取功能取代squid[原創]

nginx proxy cache官方解釋

為nginx安裝清快取模組——優化nginx伺服器效能

nginx

乙個web快取坐落於客戶端和「原始伺服器(origin server)」中間,它保留了所有可見內容的拷貝。如果乙個客戶端請求的內容在快取中儲存,則可以直接在快取中獲得該內容而不需要與伺服器通訊。這樣一來,由於web快取距離客戶端「更近」,就可以提高響應效能,並更有效率的使用應用伺服器,因為伺服器不用每次請求都進行頁面生成工作。 

在瀏覽器和應用伺服器之間,存在多種「潛在」快取,如:客戶端瀏覽器快取、中間快取、內容分發網路(cdn)和伺服器上的負載平衡和反向**。快取,僅在反向**和負載均衡的層面,就對效能提高有很大的幫助。

nginx從0.7.48版本開始,支援了類似squid的快取功能。這個快取是把url及相關組合當作key,用md5編碼雜湊後儲存在硬碟上,所以它可以支援任意url鏈結,同時也支援404/301/302這樣的非200狀態碼。雖然目前官方的nginx web快取服務只能為指定url或狀態碼設定過期時間,不支援類似squid的purge指令,手動清除指定快取頁面,但是,通過乙個第三方的nginx模組,可以清除指定url的快取。

nginx的web快取服務主要由proxy_cache相關指令集和fastcgi_cache相關指令集構成,前者用於反向**時,對後端內容源伺服器進行快取,後者主要用於對fastcgi的動態程式進行快取。兩者的功能基本上一樣。

最新的nginx 0.8.32版本,proxy_cache和fastcgi_cache已經比較完善,加上第三方的ngx_cache_purge模組(用於清除指定url的快取),已經可以完全取代squid。我們已經在生產環境使用了 nginx 的 proxy_cache 快取功能超過兩個月,十分穩定,速度不遜於 squid。

在功能上,nginx已經具備squid所擁有的web快取加速功能、清除指定url快取的功能。而在效能上,nginx對多核cpu的利用,勝過squid不少。另外,在反向**、負載均衡、健康檢查、後端伺服器故障轉移、rewrite重寫、易用性上,nginx也比squid強大得多。這使得一台nginx可以同時作為「負載均衡伺服器」與「web快取伺服器」來使用。

我們只需要兩個命令就可以啟用基礎快取: proxy_cache_path和proxy_cache

proxy_cache_path用來設定快取的路徑和配置,proxy_cache用來啟用快取。

proxy_cache_path /path/to/cache levels=1:2keys_zone=my_cache:10mmax_size=10ginactive=60m

use_temp_path=off;

server}

proxy_cache_path命令中的引數及對應配置說明如下:

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可以分發快取中的陳舊(stale,編者注:即過期內容)內容。這種情況一般發生在關聯快取內容的原始伺服器宕機或者繁忙時。比起對客戶端傳達錯誤資訊,nginx可傳送在其記憶體中的陳舊的檔案。nginx的這種**方式,為伺服器提供額外級別的容錯能力,並確保了在伺服器故障或流量峰值的情況下的正常執行。為了開啟該功能,只需要新增proxy_cache_use_stale命令即可:

location /

按照上面例子中的配置,當nginx收到伺服器返回的error,timeout或者其他指定的5xx錯誤,並且在其快取中有請求檔案的陳舊版本,則會將這些陳舊版本的檔案而不是錯誤資訊傳送給客戶端。

nginx提供了豐富的可選項配置用於快取效能的微調。下面是使用了幾個配置的例子:

proxy_cache_path /path/to/cache levels=1:2keys_zone=my_cache:10mmax_size=10ginactive=60m

use_temp_path=off;

server}

配置解釋如下:

proxy_cache_revalidate指示nginx在重新整理來自伺服器的內容時使用get請求。如果客戶端的請求項已經被快取過了,但是在快取控制頭部中定義為過期,那麼nginx就會在get請求中包含if-modified-since欄位,傳送至伺服器端。這項配置可以節約頻寬,因為對於nginx已經快取過的檔案,伺服器只會在該檔案請求頭中last-modified記錄的時間內被修改時才將全部檔案一起傳送。

proxy_cache_min_uses設定了在nginx快取前,客戶端請求乙個條目的最短時間。當快取不斷被填滿時,這項設定便十分有用,因為這確保了只有那些被經常訪問的內容才會被新增到快取中。該項預設值為1。

當proxy_cache_lock被啟用時,當多個客戶端請求乙個快取中不存在的檔案(或稱之為乙個miss),只有這些請求中的第乙個被允許傳送至伺服器。其他請求在第乙個請求得到滿意結果之後在快取中得到檔案。如果不啟用proxy_cache_lock,則所有在快取中找不到檔案的請求都會直接與伺服器通訊。

預設情況下,nginx需要考慮從原始伺服器得到的cache-control標頭。當在響應頭部中cache-control被配置為private,no-cache,no-store或者set-cookie,nginx不進行快取。nginx僅僅快取get和head客戶端請求。你也可以參照下面的解答覆蓋這些預設值。

1、cache-control頭部可否被忽略? 

可以,使用proxy_ignore_headers命令。如下列配置:

ocation /images/

nginx會忽略所有/images/下的cache-control頭。proxy_cache_valid命令強制規定快取資料的過期時間,如果忽略cache-control頭,則該命令是十分必要的。nginx不會快取沒有過期時間的檔案。

2、nginx能否快取post 請求? 

可以,使用proxy_cache_methods命令:

proxy_cache_methods get head post;

3、nginx 可以快取動態內容嗎?

可以,提供的cache-control頭部可以做到。快取動態內容,甚至短時間內的內容可以減少在原始資料庫和伺服器中載入,可以提高第乙個位元組的到達時間,因為頁面不需要對每個請求都生成一次。

4、可以使用cookie作為快取鍵的一部分嗎? 

可以,快取鍵可以配置為任意值,如:

proxy_cache_key $proxy_host$request_uri$cookie_jessionid;

5、nginx 如何處理位元組範圍請求?

Nginx使用指南 一

nginx 的安裝遵循 automake 規則,所以安裝過程簡單,但如果需要使用 pcre 正規表示式庫,則稍點有曲折,本節主要講解如果帶 pcre 安裝,最好有 pcre 庫的源 包,這樣安裝相對簡單得多,本節的安裝方法也是基於 pcre 源 上的安裝。pcre nginx 1 先將pcre 和n...

Nginx使用指南 一

nginx 安裝方法 nginx 的安裝遵循 automake 規則,所以安裝過程簡單,但如果需要使用 pcre 正規表示式庫,則稍點有曲折,本節主要講解如果帶 pcre 安裝,最好有 pcre 庫的源 包,這樣安裝相對簡單得多,本節的安裝方法也是基於 pcre 源 上的安裝。pcre nginx ...

nginx使用指南

注意訪問不用加images 上傳需要加 win子系統ubuntu mnt 下有c盤d盤等,不可以直接找到c盤下子系統根目錄copy檔案 因為它只能讀,不可寫入,就算可以寫入,系統也是無法找到這個檔案的。去cd mnt 下copy檔案到ubuntu系統目錄是可以成功得 server root opt ...