官方文檔:https://nginx.org/en/docs/http/ngx_http_proxy_module.html
1. 代理緩沖 proxy_buffer
代理緩沖用于臨時存儲從后端服務(wù)器返回的響應(yīng)數(shù)據(jù)。通過使用代理緩沖,Nginx可以在接收完整的響應(yīng)后再將其發(fā)送給客戶端,從而提高性能和效率。
① 客戶端往往是用戶網(wǎng)絡(luò),情況復(fù)雜,可能出現(xiàn)網(wǎng)絡(luò)不穩(wěn)定,速度較慢的情況。而nginx到后端server一般處于同一個機(jī)房或者區(qū)域,網(wǎng)速穩(wěn)定且速度極快。
② 如果禁用了緩沖,則在客戶端從代理服務(wù)器接收響應(yīng)時,響應(yīng)將同步發(fā)送到客戶端。對于需要盡快開始接收響應(yīng)的快速交互式客戶端,此行為可能是可取的。這就會帶來一個問題:因?yàn)榭蛻舳说?nginx 的網(wǎng)速過慢,導(dǎo)致 nginx 只能以一個較慢的速度將響應(yīng)傳給客戶端;進(jìn)而導(dǎo)致后端server也只能以同樣較慢的速度傳遞響應(yīng)給nginx,造成一次請求連接耗時過長。
③ 啟用緩沖后,nginx先將后端的請求響應(yīng)放入緩沖區(qū)中,等到整個響應(yīng)完成后,再發(fā)給客戶端。
開啟代理緩沖后,nginx 可以用較快的速度盡可能將響應(yīng)體讀取并緩沖到本地內(nèi)存或磁盤中,同時根據(jù)客戶端的網(wǎng)絡(luò)質(zhì)量以合適的網(wǎng)速將響應(yīng)傳遞給客戶端。這樣既解決了server端連接過多的問題,也保證了能持續(xù)穩(wěn)定的像客戶端傳遞響應(yīng)。
1. proxy_buffering 指令
當(dāng) proxy_buffering 設(shè)置為 off 時,Nginx 將禁用代理緩沖。這意味著當(dāng) Nginx 作為代理服務(wù)器轉(zhuǎn)發(fā)請求時,它將立即將響應(yīng)從上游服務(wù)器傳遞給客戶端,而不會先將響應(yīng)緩存到 Nginx 服務(wù)器上。
使用 proxy_buffering 啟用和禁用緩沖,nginx默認(rèn)為 on 啟用緩沖,若要關(guān)閉,設(shè)置為 off 。
proxy_buffering off;
禁用代理緩沖可以提高實(shí)時性和響應(yīng)速度,特別適用于實(shí)時通信、流媒體或需要立即將數(shù)據(jù)傳遞給客戶端的應(yīng)用程序。然而,禁用代理緩沖也可能增加上游服務(wù)器的負(fù)載,因?yàn)樗鼈冃枰磿r響應(yīng)每個請求。
禁用代理緩沖可以提高實(shí)時性和響應(yīng)速度,特別適用于實(shí)時通信、流媒體或需要立即將數(shù)據(jù)傳遞給客戶端的應(yīng)用程序。然而,禁用代理緩沖也可能增加上游服務(wù)器的負(fù)載,因?yàn)樗鼈冃枰磿r響應(yīng)每個請求。
2. proxy_buffers 與 proxy_buffer_size 指令
proxy_buffers 指令用于設(shè)置代理服務(wù)器緩存響應(yīng)的緩沖區(qū)大小和數(shù)量。它的語法如下:
proxy_buffers number size;
其中,number 表示緩沖區(qū)的數(shù)量,size 表示每個緩沖區(qū)的大小。例如,如果設(shè)置為 proxy_buffers 4 32k; 則會為每個客戶端連接分配 4 個緩沖區(qū),每個緩沖區(qū)的大小為 32KB。
通常情況下,來自后端服務(wù)器響應(yīng)的第一部分存儲在單獨(dú)的緩沖區(qū)中,這個緩沖區(qū)存儲的是相對較小的響應(yīng)頭部信息,大小通過 proxy_buffer_size 指令進(jìn)行設(shè)置 ,建議將 proxy_buffer_size 設(shè)置為小于默認(rèn)值。默認(rèn)情況下,proxy_buffer_size 的大小為4k,但可以根據(jù)實(shí)際需求進(jìn)行調(diào)整。
location / {
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_pass http://localhost:8088;
}
2. 代理緩存
啟用緩存后,nginx將響應(yīng)保存在磁盤中,返回給客戶端的數(shù)據(jù)首先從緩存中獲取,這樣子相同的請求不用每次都發(fā)送給后端服務(wù)器,減少到后端請求的數(shù)量。
1. proxy_cache_path 指令
proxy_cache_path 指令用于指定緩存文件存儲的路徑、緩存文件的格式、緩存文件的最大大小等參數(shù)。以下是 proxy_cache_path 的常用參數(shù):
- path: 緩存文件存儲的路徑。
- levels: 緩存文件存儲的目錄層數(shù)。
- keys_zone: 緩存文件的鍵值對存儲區(qū)域。
- inactive: 緩存文件的過期時間,單位為秒。
- max_size: 緩存文件的最大大小。
- use_temp_path: 是否使用臨時文件夾存儲緩存文件。
例如,以下配置將緩存文件存儲在 /var/cache/nginx 目錄下,緩存文件的鍵值對存儲區(qū)域?yàn)?my_cache,緩存文件的過期時間為 10 分鐘,緩存文件的最大大小為 1GB:
proxy_cache_path /var/cache/nginx keys_zone=my_cache:10m inactive=10m max_size=1g;
在配置反向代理時,可以使用 proxy_cache 指令啟用緩存,例如:
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 10m;
}
以上配置將啟用緩存,并設(shè)置緩存文件的過期時間為 10 分鐘。當(dāng) Nginx 收到客戶端請求時,如果緩存中存在對應(yīng)的響應(yīng),Nginx 將直接返回緩存中的響應(yīng),而不是向后端服務(wù)器發(fā)起請求。
2. proxy_cache_valid 指令
proxy_cache_valid 指令用于設(shè)置緩存的有效期。
proxy_cache_valid [code ...] time;
其中,code是HTTP響應(yīng)狀態(tài)碼,可以是一個或多個,用空格分隔。如果省略code參數(shù),則表示適用于所有狀態(tài)碼。time是緩存的有效期,可以是一個時間段,也可以是一個時間戳。
如果要設(shè)置不同狀態(tài)碼的不同緩存時間,可以使用多個proxy_cache_valid指令,例如:
proxy_cache_valid 200 10m;
proxy_cache_valid 404 1m;
這樣就表示緩存200狀態(tài)碼的響應(yīng)10分鐘,緩存404狀態(tài)碼的響應(yīng)1分鐘。
3. proxy_cache_min_uses 指令
可以使用 proxy_cache_min_uses 設(shè)置相同的key的請求,訪問次數(shù)超過指定數(shù)量才會被緩存。
proxy_cache_min_uses 指令用于設(shè)置在緩存服務(wù)器中緩存一個響應(yīng)所需的最小請求數(shù)。當(dāng)一個請求被代理到后端服務(wù)器時,如果該請求的響應(yīng)已經(jīng)被緩存,Nginx 會將緩存的響應(yīng)返回給客戶端,而不是將請求轉(zhuǎn)發(fā)到后端服務(wù)器。proxy_cache_min_uses 指令可以控制在緩存服務(wù)器中緩存一個響應(yīng)所需的最小請求數(shù),以避免緩存不必要的響應(yīng)。當(dāng)一個響應(yīng)被緩存時,Nginx 會記錄該響應(yīng)被緩存的時間,并在一定時間后將其從緩存中刪除。如果一個響應(yīng)被緩存的時間太短,那么它可能會被頻繁地從緩存中刪除和重新緩存,這會浪費(fèi)緩存服務(wù)器的資源。因此,通過設(shè)置 proxy_cache_min_uses 指令,可以確保只有經(jīng)過多次訪問的響應(yīng)才會被緩存,從而提高緩存服務(wù)器的效率。文章來源:http://www.zghlxwxcb.cn/news/detail-679977.html
proxy_cache_min_uses 5;
默認(rèn)情況下,響應(yīng)無限期地保留在緩存中。僅當(dāng)緩存超過最大配置大小時,按照時間刪除最舊的數(shù)據(jù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-679977.html
3. 應(yīng)用
proxy_cache_path /var/cache/nginx/data keys_zone=mycache:10m;
server {
listen 8001;
server_name ruoyi.localhost;
location / {
#設(shè)置buffer
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_pass http://localhost:8088;
}
location ~ \.(js|css|png|jpg|gif|ico) {
#設(shè)置cache
proxy_cache mycache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_valid any 5m;
proxy_pass http://localhost:8088;
}
location = /html/ie.html {
proxy_cache mycache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_valid any 5m;
proxy_pass http://localhost:8088;
}
location ^~ /fonts/ {
proxy_cache mycache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_valid any 5m;
proxy_pass http://localhost:8088;
}
}
到了這里,關(guān)于分布式 - 服務(wù)器Nginx:一小時入門系列之代理緩沖與緩存的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!