您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“什么是Nginx代理緩存機(jī)制”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
nginx 的 http_proxy 模塊,可實(shí)現(xiàn)類似于 Squid 的緩存功能。
Nginx 對(duì)客戶已經(jīng)訪問(wèn)過(guò)的內(nèi)容在 Nginx 服務(wù)器本地建立副本,這樣在一段時(shí)間內(nèi)再次訪問(wèn)該數(shù)據(jù),就不需要通過(guò) Nginx 服務(wù)器再次向后端服務(wù)器發(fā)出請(qǐng)求,所以能夠減少 Nginx 服務(wù)器與后端服務(wù)器之間的網(wǎng)絡(luò)流量,減輕網(wǎng)絡(luò)擁塞,同時(shí)還能較小數(shù)據(jù)傳輸延遲,提高用戶訪問(wèn)速度。
同時(shí),后端服務(wù)器宕機(jī)時(shí),Nginx 服務(wù)器上的副本資源還能夠回應(yīng)相關(guān)的用戶請(qǐng)求,這樣能夠提高后端服務(wù)器的魯棒性(健壯性)。
proxy_cache_path:Nginx 使用該參數(shù)指定緩存位置。
proxy_cache:該參數(shù)為之前指定的緩存名稱。
proxy_cache_path:有兩個(gè)必填參數(shù)
第一個(gè)參數(shù)weight緩存目錄。
第二個(gè)參數(shù) keys_zone 指定緩存名稱和占用內(nèi)存空間的大小。
user www-data; worker_processes auto; pid /run/nginx.pid; http { proxy_cache_path /data/nginx/cache keys_zone=one:10m max_size=10g; upstream zp.purple.com { server 127.0.0.1:8881; server 127.0.0.1:8882; server 127.0.0.1:8883; } server { listen 80; proxy_cache one; server_name zp.purple.com; location / { proxy_pass http://zp.purple.com; proxy_set_header Host $host; proxy_set_header X-Real_IP $remote_addr; } } }
注:示例中的 10m 是對(duì)內(nèi)存中緩存元數(shù)據(jù)信息大小的限制,如果想限制緩存總量大小,需要用 max_size
參數(shù)。
Nginx 默認(rèn)會(huì)緩存所有 get 和 head 方法的請(qǐng)求結(jié)果,緩存的 key 默認(rèn)使用請(qǐng)求字符串。
自定義 key:例如 proxy_cache_key "$host$request_uri$cookie_user";
指定請(qǐng)求至少被發(fā)送了多少次以上時(shí)才緩存,可以防止低頻請(qǐng)求被緩存。
例如 proxy_cache_min_user 5;
指定哪些方法的請(qǐng)求被緩存
例如 proxy_cache_methods GET HEAD POST;
user www-data; worker_processes auto; pid /run/nginx.pid; http { proxy_cache_path /data/nginx/cache keys_zone=one:10m max_size=10g; upstream zp.purple.com { server 127.0.0.1:8881; server 127.0.0.1:8882; server 127.0.0.1:8883; } server { listen 80; proxy_cache one; server_name zp.purple.com; location / { proxy_pass http://zp.purple.com; proxy_set_header Host $host; proxy_set_header X-Real_IP $remote_addr; proxy_cache_key $host$request_uri$cookie_user; } } }
默認(rèn)情況下,緩存內(nèi)容是長(zhǎng)期存留的,除非緩存的總量超出限制。可以指定緩存有效時(shí)間,例如:
proxy_cache_valid 200 302 10m;
proxy_cache_valid any 5m;
對(duì)任何狀態(tài)碼,5 分鐘有效。
響應(yīng)狀態(tài)碼為 200 302 時(shí),10 分鐘有效。
user www-data; worker_processes auto; pid /run/nginx.pid; http { proxy_cache_path /data/nginx/cache keys_zone=one:10m max_size=10g; upstream zp.purple.com { server 127.0.0.1:8881; server 127.0.0.1:8882; server 127.0.0.1:8883; } server { listen 80; proxy_cache one; server_name zp.purple.com; location / { proxy_pass http://zp.purple.com; proxy_set_header Host $host; proxy_set_header X-Real_IP $remote_addr; proxy_cache_valid 200 302 10m; } } }
proxy_cache_bypass
:該指令響應(yīng)來(lái)自原始服務(wù)器而不是緩存。
例如 proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
如果任何一個(gè)參數(shù)值不為空,或者不等于 0,nginx 就不會(huì)查找緩存,直接進(jìn)行代理轉(zhuǎn)發(fā)。
user www-data; worker_processes auto; pid /run/nginx.pid; http { proxy_cache_path /data/nginx/cache keys_zone=one:10m max_size=10g; upstream zp.purple.com { server 127.0.0.1:8881; server 127.0.0.1:8882; server 127.0.0.1:8883; } server { listen 80; proxy_cache one; server_name zp.purple.com; location / { proxy_pass http://zp.purple.com; proxy_set_header Host $host; proxy_set_header X-Real_IP $remote_addr; proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment; } } }
網(wǎng)頁(yè)的緩存是由 HTTP 消息頭中的“Cache-control”來(lái)控制的,常見(jiàn)的取值有 private、no-cache、max-age、must-revalidate 等,默認(rèn)為 private。其作用根據(jù)不同的重新瀏覽方式分為以下幾種情況。
Cache-durective | 說(shuō)明 |
---|---|
public | 所有內(nèi)容都將被緩存(客戶端和代理服務(wù)器都可緩存) |
private | 內(nèi)容只緩存到私有緩存中(僅客戶端可以緩存,代理服務(wù)器不可緩存) |
no-cache | 必須先與服務(wù)器確認(rèn)返回的響應(yīng)是否被更改,然后才能使用該響應(yīng)來(lái)滿足后續(xù)對(duì)同一個(gè)網(wǎng)址的請(qǐng)求。因此,如果存在合適的驗(yàn)證令牌(ETag),no-cache 會(huì)發(fā)起往返通信來(lái)驗(yàn)證緩存的響應(yīng),如果資源未被修改,可以避免下載。 |
no-store | 所有內(nèi)容都不會(huì)被緩存到緩存或 Internet 臨時(shí)文件中。 |
must-revalidation/proxy-revalidation | 如果緩存的內(nèi)容失效,請(qǐng)求必須發(fā)送到服務(wù)器/代理以進(jìn)行重新驗(yàn)證 |
max-age=xxx(xxx is numeric) | 緩存的內(nèi)容將在 xxx 秒后失效,這個(gè)選項(xiàng)只在 HTTP1.1 可用,并如果和 Last-Modified 一起使用時(shí),優(yōu)先級(jí)較高 |
“什么是Nginx代理緩存機(jī)制”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。