Nginx 緩存系統(tǒng) proxy_cache工作原理解析
系列文章目錄
提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動(dòng)添加
例如:第一章 Python 機(jī)器學(xué)習(xí)入門之pandas的使用
提示:寫完文章后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
前言
Nginx 的 proxy_cache 模塊是 Nginx 代理功能的一部分,它允許 Nginx 緩存來自后端服務(wù)器的響應(yīng),以便在后續(xù)的請(qǐng)求中可以直接從緩存中提供內(nèi)容,而無需再次向后端服務(wù)器請(qǐng)求。這種機(jī)制可以顯著提高靜態(tài)內(nèi)容的響應(yīng)速度,減輕后端服務(wù)器的負(fù)載,并提高網(wǎng)站的可擴(kuò)展性。
功能特點(diǎn)
減少后端負(fù)載:通過緩存靜態(tài)內(nèi)容,減少對(duì)后端服務(wù)器的請(qǐng)求,降低負(fù)載。
提高響應(yīng)速度:緩存的內(nèi)容可以快速響應(yīng)后續(xù)相同的請(qǐng)求,提高用戶體驗(yàn)。
靈活的緩存策略:可以根據(jù)不同的 HTTP 響應(yīng)狀態(tài)碼設(shè)置不同的緩存有效期。
緩存控制:提供了豐富的指令來控制哪些請(qǐng)求可以被緩存,哪些請(qǐng)求應(yīng)該繞過緩存。
proxy_cache工作原理
Nginx 的 proxy_cache
模塊允許 Nginx 作為反向代理服務(wù)器時(shí)緩存后端服務(wù)器的響應(yīng)。以下是 proxy_cache
模塊的工作原理:
- 請(qǐng)求到達(dá):客戶端向 Nginx 發(fā)送請(qǐng)求。
- 緩存查找:Nginx 首先檢查請(qǐng)求是否命中緩存。這是通過查找共享內(nèi)存中的緩存鍵(由
proxy_cache_key
定義)來完成的。 - 緩存命中:如果請(qǐng)求命中緩存,Nginx 直接從緩存中讀取響應(yīng)并返回給客戶端。
- 緩存未命中:如果請(qǐng)求未命中緩存,Nginx 將請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)器。
- 后端響應(yīng):后端服務(wù)器處理請(qǐng)求并返回響應(yīng)給 Nginx。
- 緩存存儲(chǔ):Nginx 將后端服務(wù)器的響應(yīng)存儲(chǔ)在本地文件系統(tǒng)中,同時(shí)在共享內(nèi)存中更新緩存鍵和元數(shù)據(jù)。
- 返回響應(yīng):Nginx 將后端服務(wù)器的響應(yīng)返回給客戶端,并根據(jù)
proxy_cache_valid
指令設(shè)置的規(guī)則決定緩存時(shí)間。
示意圖
+--------+ +---------+ +-----------+ +----------+ | 客戶端 | --> | Nginx | --> | 后端服務(wù)器 | --> | Nginx | | |--> | (查找緩存) | | | <-- | (返回 | | | | (緩存命中) | | | | 響應(yīng)) | | | | (緩存未命中) | | | +----------+ +---+----+ +---------+ +-----+---+---+ | | | | | | (緩存存儲(chǔ)) | | | +----------------+--------------+
配置文件示例
# 定義 http 塊,Nginx 的主要配置都在這個(gè)塊內(nèi) http { # 設(shè)置緩存路徑及其參數(shù) proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=7d use_temp_path=off; # levels 定義緩存目錄的層級(jí),1:2 表示兩層 # keys_zone 定義緩存鍵和大小,my_cache:10m 表示名稱為 my_cache,大小為 10MB # max_size 控制緩存區(qū)域的最大磁盤空間,這里設(shè)置為 10GB # inactive 定義緩存數(shù)據(jù)在指定時(shí)間內(nèi)未被訪問則自動(dòng)清除的時(shí)間,這里設(shè)置為 7 天 # use_temp_path 設(shè)置為 off,表示緩存文件直接寫到 cache 中而不使用 temp_path,避免文件拷貝導(dǎo)致影響性能 # 定義 server 塊,用于監(jiān)聽 80 端口并處理對(duì) example.com 的請(qǐng)求 server { # 監(jiān)聽 80 端口 listen 80; # 設(shè)置服務(wù)器名,這里為 example.com server_name example.com; # 定義 location 塊,用于處理根路徑下的請(qǐng)求 location / { # 將請(qǐng)求代理到后端服務(wù)器,這里為 http://backend proxy_pass http://backend; # 啟用緩存,并指定緩存區(qū)域?yàn)?my_cache proxy_cache my_cache; # 設(shè)置緩存鍵,這里包括請(qǐng)求方法、主機(jī)和請(qǐng)求 URI proxy_cache_key "$request_method$host$request_uri"; # 設(shè)置不同 HTTP 狀態(tài)碼的緩存有效期,200 和 302 狀態(tài)碼的響應(yīng)緩存 10 分鐘 proxy_cache_valid 200 302 10m; # 設(shè)置 404 狀態(tài)碼的響應(yīng)緩存 1 分鐘 proxy_cache_valid 404 1m; # 定義條件跳過緩存,如果請(qǐng)求中包含 no_cache 參數(shù)或特定的 HTTP 頭,則不使用緩存 proxy_cache_bypass $cookie_no_cache $arg_no_cache$http_pragma$http_authorization; # 定義條件不緩存響應(yīng),如果請(qǐng)求中包含 no_cache 參數(shù)或特定的 HTTP 頭,則不緩存響應(yīng) proxy_no_cache $cookie_no_cache $arg_no_cache$http_pragma$http_authorization; } } }
這段配置注釋詳細(xì)解釋了 Nginx 配置文件中的每個(gè)指令和它們的參數(shù),以便更好地理解配置文件的作用和行為。
參數(shù)詳盡說明
proxy_cache_path
:定義緩存文件存儲(chǔ)路徑和參數(shù)。levels
:定義緩存目錄的層級(jí)。keys_zone
:定義共享內(nèi)存中用于緩存鍵的區(qū)域。max_size
:定義緩存的最大磁盤空間。inactive
:定義緩存數(shù)據(jù)在指定時(shí)間內(nèi)未被訪問則自動(dòng)清除的時(shí)間。use_temp_path
:定義是否使用臨時(shí)路徑。
proxy_cache
:?jiǎn)⒂镁彺娌⒅付ň彺鎱^(qū)域。proxy_cache_key
:定義緩存的鍵,用于識(shí)別緩存數(shù)據(jù)。proxy_cache_valid
:為不同的響應(yīng)狀態(tài)碼設(shè)置緩存時(shí)間。
proxy_cache_bypass
和 proxy_no_cache
:定義條件跳過緩存和避免緩存特定響應(yīng)。
性能優(yōu)化方案
- 緩存策略優(yōu)化:合理配置
proxy_cache_valid
指令,為不同的響應(yīng)狀態(tài)碼設(shè)置不同的緩存時(shí)間。 - 緩存空間管理:通過
proxy_cache_path
指令合理設(shè)置緩存空間的大小和有效期。 - 緩存鍵優(yōu)化:使用
proxy_cache_key
指令定制緩存鍵,減少緩存沖突,提高緩存命中率。 - 緩存鎖定:通過
proxy_cache_lock
和proxy_cache_lock_timeout
指令,控制同時(shí)對(duì)同一緩存項(xiàng)的請(qǐng)求,減少對(duì)后端的并發(fā)請(qǐng)求。 - 使用 CDN:結(jié)合 CDN 使用 Nginx 緩存,可以將靜態(tài)資源緩存到離用戶更近的節(jié)點(diǎn)。
- 監(jiān)控和調(diào)整:定期監(jiān)控緩存命中率和響應(yīng)時(shí)間,根據(jù)實(shí)際情況調(diào)整緩存配置。
總結(jié)
通過以上配置和優(yōu)化方案,可以有效地管理 Nginx 的緩存行為,提高網(wǎng)站的性能,同時(shí)保證敏感或動(dòng)態(tài)數(shù)據(jù)的實(shí)時(shí)性和安全性。
到此這篇關(guān)于Nginx 緩存系統(tǒng) proxy_cache詳解的文章就介紹到這了,更多相關(guān)Nginx 緩存系統(tǒng) proxy_cache內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx-rtmp實(shí)現(xiàn)直播媒體實(shí)時(shí)流效果
這篇文章主要介紹了Nginx-rtmp實(shí)現(xiàn)直播媒體實(shí)時(shí)流效果,文中給出了總體設(shè)計(jì)圖,為了整合平臺(tái),會(huì)自建RTMP流媒體服務(wù)器和使用云廠商SaaS的RTMP流媒體服務(wù),需要的朋友可以參考下2018-08-08Nginx實(shí)現(xiàn)基于請(qǐng)求頭的訪問控制配置的示例
在Nginx中,可以使用"allow"和"deny"指令來實(shí)現(xiàn)IP訪問限制,本文給大家介紹Nginx實(shí)現(xiàn)基于請(qǐng)求頭的訪問控制配置,感興趣的朋友一起看看吧2023-11-11詳解nginx過濾url實(shí)現(xiàn)前臺(tái)js的配置問題
本篇文章主要介紹了nginx過濾url實(shí)現(xiàn)前臺(tái)js的配置問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01nginx-rtmp-module構(gòu)建流媒體直播服務(wù)器實(shí)戰(zhàn)指南
本文主要介紹了nginx-rtmp-module構(gòu)建流媒體直播服務(wù)器實(shí)戰(zhàn)指南,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02nginx配置ssl證書實(shí)現(xiàn)https訪問的示例
這篇文章主要介紹了nginx配置ssl證書實(shí)現(xiàn)https訪問的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03