Nginx緩存在服務(wù)端 代理和客戶端的區(qū)別深入探索
Nginx緩存
一般情況下系統(tǒng)用到的緩存有三種
- 服務(wù)端緩存:緩存存在后端服務(wù)器,如redis
- 代理緩存:緩存存儲(chǔ)在代理服務(wù)器或中間件,內(nèi)容從后端服務(wù)器獲取,保存在本地
- 客戶端緩存:緩存在瀏覽器
[ ] 什么時(shí)候會(huì)出現(xiàn)304? 服務(wù)器響應(yīng)中包含有ETag和last-modified,瀏覽器下次去請(qǐng)求時(shí)會(huì)發(fā)送這兩個(gè)標(biāo)簽,直接返回304 Not Modified來告訴瀏覽器該資源沒有修改,不需要從服務(wù)器獲取最新的,瀏覽器就會(huì)直接使用本地緩存
Nginx使用的緩存屬于代理緩存
cache配置
Nginx通過proxy_cache來實(shí)現(xiàn)緩存。Buffer(緩沖)主要用于傳輸效率不同步或者優(yōu)先級(jí)不相同的設(shè)備之間傳輸數(shù)據(jù),通過對(duì)一方數(shù)據(jù)進(jìn)行臨時(shí)存放,在統(tǒng)一發(fā)送的方式傳遞給另一方,以降低進(jìn)程間的等待時(shí)間;Cache(緩存)主要用于將硬盤上已有的數(shù)據(jù)在內(nèi)存中建立緩存數(shù)據(jù),提高數(shù)據(jù)的訪問效率。
而proxy_cache只有在Proxy Buffer機(jī)制開啟的情況下Proxy Cache的配置才會(huì)發(fā)揮作用
相關(guān)配置
- proxy_zone:zone | off 默認(rèn)是off,即關(guān)閉proxy_cache功能,zone為用于存放緩存的內(nèi)存區(qū)域名稱,可以在http/server、location塊內(nèi)使用
proxy_cache_path: path [levels=levels] keys_zone-name:size [inactive=time] [max_size=size] 只能在http塊內(nèi)使用
- path設(shè)置緩存數(shù)據(jù)存放的路徑
- levels設(shè)置目錄層級(jí),如levels=1:2,表示有兩個(gè)子目錄
- keys_zone 設(shè)置內(nèi)存zone的名稱和大小,如keys_zone=my:10m
- inactive設(shè)置緩存多長時(shí)間失效,當(dāng)磁盤上的緩存數(shù)據(jù)在該時(shí)間段內(nèi)沒有被訪問過,就會(huì)失效,數(shù)據(jù)將被刪除,默認(rèn)10s
- max_size 設(shè)置硬盤中最多緩存多少數(shù)據(jù),數(shù)據(jù)超出,則刪除最少訪問的數(shù)據(jù)
- proxy_cache_methods GET HEAD POST 設(shè)置緩存哪些方法
- proxy_cache_min_uses 1 設(shè)置緩存的最小使用次數(shù)
- proxy_cache_valid code time 對(duì)不同的狀態(tài)碼緩存不同的時(shí)間
- proxy_cache_key line 設(shè)置緩存的key值
示例
http { proxy_cache_path /var/www/cache #緩存地址 levels=1:2 #目錄分級(jí) keys_zone=test_cache:10m #開啟的keys空間名字:空間大小(1m可以存放8000個(gè)key) max_size=10g #目錄最大大小(超過時(shí),不常用的將被刪除) inactive=60m #60分鐘內(nèi)沒有被訪問的緩存將清理 use_temp_path=off; #是否開啟存放臨時(shí)文件目錄,關(guān)閉默認(rèn)存儲(chǔ)在緩存地址 server { # 使用緩存 location / { proxy_cache test_cache; #開啟緩存對(duì)應(yīng)的名稱,在keys_zone命名好 proxy_cache_valid 200 304 12h; #狀態(tài)碼為200 304的緩存12小時(shí) proxy_cache_valid any 10m; #其他狀態(tài)緩存10分鐘 proxy_cache_key $host$uri$is_args$args; #設(shè)置key值 add_header Nginx-Cache "$upstream_cache_status"; } #不使用緩存 if ($request_uri ~ ^/(login|register) ) { #當(dāng)請(qǐng)求地址有l(wèi)ogin或register時(shí) set $nocache = 1; #設(shè)置一個(gè)自定義變量為true } location / { proxy_no_cache $nocache $arg_nocache $arg_comment; proxy_no_cache $http_pragma $http_authoriztion; } } }
expires配置
location ~ .*.(jpg|jpeg|gif|png)$ { # 設(shè)置圖片緩存過期時(shí)間 expires 1d; } # 匹配靜態(tài)目錄 location ~^ /(|css|js) / { expires 2h; }
響應(yīng)會(huì)返回給瀏覽器Expires屬性,展示的是過期時(shí)間,之后再次請(qǐng)求該資源時(shí),如果沒有超過響應(yīng)返回的Expires時(shí),則不需要向服務(wù)器訪問,直接從緩存中獲取
靜態(tài)資源緩存
# 緩存zone levels表示緩存層級(jí)以及目錄位數(shù) keys_zone表示緩存內(nèi)存大小 inactive有效期 max_size所占用的最大磁盤大小 proxy_cache_path /data/nginx/cache_ad levels=1:2 keys_zone=cache_cache_ad:100m inactive=7d max_size=200m; server { location / { # 緩存zone proxy_cache cache_ad; # 緩存key 進(jìn)行md5 proxy_cache_key $host$uri$is_args$args; # 什么情況下進(jìn)行緩存存儲(chǔ) proxy_cache_valid 200 304 12h; } }
以上就是Nginx緩存在服務(wù)端 代理和客戶端的區(qū)別深入探索的詳細(xì)內(nèi)容,更多關(guān)于Nginx緩存服務(wù)端代理客戶端的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Nginx代理Partainer的實(shí)現(xiàn)
本文主要介紹了Nginx代理Partainer的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07詳細(xì)聊聊K8s容器內(nèi)nginx帶變量的域名解析
這篇文章主要給大家介紹了關(guān)于K8s容器內(nèi)nginx帶變量域名的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01封80端口應(yīng)對(duì)策略 Nginx反向代理For WIN2003超級(jí)傻瓜式配置
封80應(yīng)對(duì)策略,Nginx反向代理ForWIN2003超級(jí)傻瓜式配置!2010-03-03解決Nginx + PHP(FastCGI)遇到的502 Bad Gateway錯(cuò)誤
昨日,有朋友問我,他將Web服務(wù)器換成Nginx 0.6.31 + PHP 4.4.7(FastCGI)后,有時(shí)候訪問會(huì)出現(xiàn)“502 Bad Gateway”錯(cuò)誤,如何解決。2009-10-10Nginx配置二級(jí)域名的方法實(shí)現(xiàn)
本文主要介紹了Nginx配置二級(jí)域名的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03