如何利用Nginx的緩衝 快取優化提公升效能

2021-06-28 07:09:28 字數 4146 閱讀 1882

使用緩衝釋放後端伺服器

反向**的乙個問題是**大量使用者時會增加伺服器程序的效能衝擊影響。在大多數情況下,可以很大程度上能通過利用nginx的緩衝和快取功能減輕。

當**到另一台伺服器,兩個不同的連線速度會影響客戶的體驗:

從客戶機到nginx**的連線。

從nginx**到後端伺服器的連線。

nginx具有優化這些連線調整其行為的能力。

如果沒有緩衝,資料從**的伺服器傳送並立即開始被傳送到客戶。如果假定客戶端很快,緩衝可以關閉而盡快使資料到客戶端,有了緩衝,nginx **將暫時儲存後端的響應,然後按需供給資料給客戶端。如果客戶端是緩慢的,允許nginx伺服器關閉到後端的連線。然後,它可以處理資料分配到客戶端, 以任何可能的速度。

nginx預設有緩衝設計,因為客戶端往往有很大的不同的連線速度。我們可以用以下指令調節緩衝行為。可以在http,server或 location位置來設定。重要的是要記住,大小size指令是針對每個請求配置的,所以增加超出你需求會影響你的效能,如果這時有許多客戶端請求:

proxy_buffering:該指令控制緩衝是否啟用。預設情況下,它的值是「on」。

proxy_buffers:該指令控制**響應緩衝區的數量(第乙個引數)和大小(第二個引數)。預設配置是8個緩衝區大小等於乙個記憶體頁(4k或者8k)。增加緩衝區的數目可以讓你緩衝更多資訊。

proxy_buffer_size:從後端伺服器的響應頭緩衝區大小,它包含headers,和其他部分響應是分開的。該指令設定響應部分的緩衝區大小。預設情況下,它和proxy_buffers是相同的尺寸,但因為這是用於頭資訊,這通常可以設定為乙個較低的值。

proxy_busy_buffers_size:此指令設定標註「client-ready」緩衝區的最大尺寸。而客戶端可以一次讀取來自乙個緩衝區的資料,緩衝被放置在佇列中,批量傳送到客戶端。此指令控制允許是在這種狀態下的緩衝空間的大小。

proxy_max_temp_file_size:這是每個請求能用磁碟上臨時檔案最大大小。這些當上游響應太大不能裝配到緩衝區時被建立。

proxy_temp_file_write_size:這是當被**伺服器的響應過大時nginx一次性寫入臨時檔案的資料量。

proxy_temp_path:當上游伺服器的響應過大不能儲存到配置的緩衝區域時,nginx儲存臨時檔案硬碟路徑。

正如你所看到的,nginx提供了相當多的不同的指令來調整緩衝行為。大多數時候,你不必擔心太多,但它對於調整一些值可能是有用的。可能最有用的調整是proxy_buffers和proxy_buffer_size指令。

乙個例子:、

proxy_busy_buffers_size 8k;

proxy_max_temp_file_size 2048m;

proxy_temp_file_write_size 32k;

proxy_pass

配置**服務快取來減少響應時間

儘管緩衝可以幫助釋放後端伺服器以處理更多的請求,nginx還提供了一種方法來快取從後端伺服器的內容,對於許多請求無需連線到上游。

配置**快取

要設定快取用於**內容,我們可以使用proxy_cache_path指令。這將建立區域儲存來自被**伺服器返回的資料。該proxy_cache_path指令必須在http上下文部分進行設定。

在下面的例子中,我們將配置一些相關的指令來建立我們的快取系統。

用proxy_cache_path指令,我們首先應該已經定義在檔案系統中希望儲存快取的目錄。在這個例子中,我們選擇在/var/lib/nginx/cache目錄。如果該目錄不存在,你可以用正確的許可權和所有權建立它:

sudo mkdir -p /var/lib/nginx/cache

sudo chown www-data /var/lib/nginx/cache

sudo chmod 700 /var/lib/nginx/cache

levels=引數指定快取將如何組織。 nginx將通過雜湊鍵(下方配置)的值來建立乙個快取鍵。我們選擇了上述的levels決定了單個字元目錄(這是雜湊值的最後乙個字元)配有兩個字元的 子目錄(下兩個字元取自雜湊值的末尾)將被建立。你通常不必對這個細節關注,但它可以幫助nginx快速找到相關的值。

keys_zone=引數定義快取區域的名字,我們稱之為backcache。這也是我們定義多少元資料儲存的地方。在這個例子裡,我們是儲存8 mb的key。對於每兆位元組,nginx可儲存8000左右的條目。max_size引數設定實際快取資料的最大尺寸。

我們使用上面的另乙個指令是proxy_cache_key。這個設定將設定用於儲存快取值的鍵。此鍵用於檢查是否乙個請求可以從快取記憶體提供服務。我們將它設定成方案(http或https),http請求方法,以及被請求的主機和uri的組合。

proxy_cache_valid指令可以被指定多次。它依賴於狀態**值使我們能夠配置多長時間儲存。在我們的例子中,我們對於後端返回200和302儲存10分鐘,404響應的一分鐘過期。

現在,我們已經配置了快取區,但我們仍然需要告訴nginx什麼時候使用快取。

在我們**到後端的location位置,我們可以配置使用這個快取:

# server context

location /proxy-me

使用proxy_cache指令,就可以指定該backcache快取區被用於這個位置。 nginx會在這裡檢查傳遞給後端有效的條目。

上述proxy_cache_bypass指令被設定為$ http_cache_control變數。這將包含乙個指示器,用以指示該客戶端是否被明確地請求乙個最新的,非快取版本。設定此指令允許nginx正確處理這些型別的客戶端請求。無需進行進一步的配置。

我們還增加了被稱為x-proxy-cache的額外頭。我們設定這個頭部為$ upstream_cache_status變數的值。這個設定頭,使我們能夠看到,如果請求導致快取記憶體命中,快取記憶體未命中,或者快取記憶體被明確旁 路。這是對於除錯特別有價值,也對客戶端是有用的資訊。

關於快取結果的注意事項

快取記憶體能夠極大地提高**伺服器的效能。不過,也需要明確的考慮配置快取時候,要記住。

如果你的**有一些動態元素,你將不得不考慮到這一點。你如何處理要看是什麼應用程式或伺服器處理的後端處理。對於私人的內容,你應該設定cache-control頭為「no-cache」,「no-sotre」,或者「private」依賴於資料的性質:

no-cache:

請求: 告知快取者,必須原原本本的**原始請求,並告知任何快取者,需要去**請求,並驗證快取(如果有的話).對應名詞:端對端過載.    

響應: 允許快取者快取副本.那麼其實際價值是,總是強制快取者,校驗快取的新鮮度.一旦確認新鮮,則可以使用快取副本作為響應. no-cache,還可以指定某個包含字段,比如乙個典型應用,no-cache=set-cookie. 這樣做的結果,就是告知快取者,對於set-cookie欄位,你不要使用快取內容.而是使用新滴.其他內容則可以使用快取

no-store:表示在任何時候收到的資料不被快取。這對於私人資料是最安全,因為它意味著,該資料必須從伺服器每次進行檢索。

private:這表明共享的快取空間不能快取此資料。這可以用於指示使用者的瀏覽器高速快取資料,但**伺服器不應當考慮隨後的請求資料有效。

public:這表明該響應是可在連線的任何點被快取記憶體的公共資料。

乙個相關的可以控制此行為報頭是max-age頭,其指示,任何資源應該快取的秒數。

根據內容的敏感性,正確設定這些頭,會幫助你利用快取優勢,同時保持你的私人資料安全,並使您的動態資料最新。

如果你的後端也使用nginx,你可以設定使用過期指令,設定max-age來實現cache-control:

location /

location /check-me

在上面的例子中,第乙個塊允許快取乙個小時的內容。第二塊設定cache-control頭為「無快取」。要設定其他值,可以使用add_header指令,就像這樣:

location /private

nginx優化緩衝快取

反向 的乙個問題是 大量使用者時會增加伺服器程序的效能衝擊影響。在大多數情況下,可以很大程度上能通過利用nginx的緩衝和快取功能減輕。當 到另一台伺服器,兩個不同的連線速度會影響客戶的體驗 從客戶機到nginx 的連線。從nginx 到後端伺服器的連線。nginx具有優化這些連線調整其行為的能力。...

如何利用nginx處理DDOS進行系統優化詳解

防禦ddos是乙個系統工程,攻擊花樣多,防禦的成本高瓶頸多,防禦起來即被動又無奈,下面這篇文章主要給大家介紹了關於如何利用nginx處理ddos進行系統優化的相關資料,文中通過示例 介紹的非常詳細,需要的朋友可以參考下 前言眾所周知ddos很常見,甚至被稱為黑客圈子的准入技能 ddos又很兇猛,搞起...

nginx利用proxy cache來快取檔案

proxy cache是nginx自帶的內建快取模組,配置一下就可以用了,看下面的配置 vi usr local nginx conf nginx.conf 檢視複製列印?動態的放過 location php jsp cgi 上面只是配置的部分內容,反向 的那部分沒有放進去了,參考linux下ngi...