反向**的乙個問題是**大量使用者時會增加伺服器程序的效能衝擊影響。在大多數情況下,可以很大程度上能通過利用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位置,我們可以配置使用這個快取:
使用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 / {
expires 60m;
location /check-me {
expires -1;
在上面的例子中,第乙個塊允許快取乙個小時的內容。第二塊設定cache-control頭為「無快取」。要設定其他值,可以使用add_header指令,就像這樣:
location /private {
expires -1;
add_header cache-control "no-store";
如何利用Nginx的緩衝 快取優化提公升效能
使用緩衝釋放後端伺服器 反向 的乙個問題是 大量使用者時會增加伺服器程序的效能衝擊影響。在大多數情況下,可以很大程度上能通過利用nginx的緩衝和快取功能減輕。當 到另一台伺服器,兩個不同的連線速度會影響客戶的體驗 從客戶機到nginx 的連線。從nginx 到後端伺服器的連線。nginx具有優化這...
nginx快取優化
一般情況下容易造成 響應速度慢的原因 1 由於伺服器硬體資源使用量過高,而造成的響應速度慢 2 由程式自身,因為訪問量過大等原因造成的響應速度慢,如php解析器程序數量過少,導致很多請求不能及時被處理,或者tomcat併發連線過高,記憶體使用嚴重,都有可能使 響應速度慢 3 資料庫對資料的操作速度過...
nginx 優化之快取技術
利用nginx 的expire 快取技術,可以將伺服器端的 的一些內容或資料儲存在客戶端,當客戶端再向伺服器端發出請求的時候,伺服器端可以給客戶端頭資訊,告訴它哪幾個檔案,是上次還沒過期的,或是現在還沒修改的,讓客戶端直接呼叫原來的快取。這樣可以大大減少對伺服器的資料請求。expire可寫在loca...