一個web快取坐落在客戶端和「原始伺服器(origin server)」中間,它保留了所有可見內容的拷貝。如果一個客戶端請求的內容在快取中存儲,則可以直接在快取中獲得該內容而不需要與伺服器通訊。 建議學習中:nginx使用上為 )
這樣一來,因為web快取應用程式使用較近的響應式可提高效能,並能提升距離使用者伺服器,因為伺服器不用每次請求都進行頁面產生工作。
在瀏覽器和應用程式伺服器之間,存在多種「潛在」緩存,如:客戶端瀏覽器快取、中間快取、內容分發網路(CDN)和伺服器上的負載平衡和反向代理。緩存,僅在反向代理和負載平衡的層面,就對效能提高有很大的幫助。
舉個例子說明,去年,我接手了一項任務,這項任務的內容是對一個載入緩慢的網站進行效能優化。
首先引起我注意的事情是,這個網站差不多花了超過1秒鐘才產生了主頁。經過一系列調試,我發現加載緩慢的原因在於頁面被標記為不可緩存,即為了回應每個請求,頁面都是動態生成的。
由於頁面本身並不需要經常性的變更,且不涉及個人化,那麼這樣做其實並沒有必要。
為了驗證我的結論,我將頁面標記為每5秒快取一次,僅僅做了這一個調整,就能明顯的感受到效能的提升。第一個位元組到達的時間降低到幾毫秒,同時頁面的載入明顯要更快。
並不是只有大規模的內容分發網路(CDN)可以在使用快取中受益——快取還可以提高負載平衡器、反向代理和應用伺服器前端web服務的效能。
透過上面的例子,我們看到,快取內容結果,可以更有效率的使用應用程式伺服器,因為不需要每次都去做重複的頁面產生工作。此外,Web快取還可以用來提高網站可靠性。
當伺服器當機或繁忙時,比起返回錯誤訊息給用戶,不如透過配置NGINX將已經快取下來的內容傳送給用戶。這意味著,網站在應用伺服器或資料庫故障的情況下,可以保持部分甚至全部的功能運作。
如何安裝和設定基礎快取
我們只需要兩個指令就可以啟用基礎快取:proxy_cache_path和proxy_cache。 proxy_cache_path用來設定快取的路徑和配置,proxy_cache用來啟用快取。
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_cachemy_cache; proxy_pass http://my_upstream; } }
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快取使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!