Nginx Proxy緩存的具體實(shí)現(xiàn)
Proxy緩存
緩存類型
- 網(wǎng)頁(yè)緩存 (公網(wǎng))CDN
- 數(shù)據(jù)庫(kù)緩存 memcache redis
- 網(wǎng)頁(yè)緩存 nginx-proxy
- 客戶端緩存 瀏覽器緩存
模塊
- ngx_http_proxy_module
語(yǔ)法
緩存開(kāi)關(guān) Syntax: proxy_cache zone | off; Default: proxy_cache off; Context: http, server, location 代理緩存 Syntax: proxy_cache_path path [levels=levels] keys_zone=name:size[inactive=time] [max_size=size] [manager_files=number] Default: — Context: http example:proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m; 緩存維度 Syntax: proxy_cache_key string; 定義緩存唯一key,通過(guò)唯一key來(lái)進(jìn)行hash存取,緩存文件名 Default: proxy_cache_key $scheme$proxy_host$request_uri; Context: http, server, location 緩存過(guò)期 Syntax: proxy_cache_valid [code ...] time; Default: — Context: http, server, location proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;
啟動(dòng)緩存
1 延續(xù)代理實(shí)驗(yàn)
2 設(shè)置nginx-2為緩存服務(wù)器
vim /etc/nginx/nginx.conf
user nginx; worker_processes 1; error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; gzip on; include /etc/nginx/conf.d/*.conf; #開(kāi)啟反向代理緩存 proxy_cache_path /app/limou/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=2h use_temp_path=off; }
proxy_cache_path命令中的參數(shù)及對(duì)應(yīng)配置說(shuō)明如下:
1、proxy_cache_path /app/laochen/cache:
指定了緩存文件存儲(chǔ)的路徑為 /app/laochen/cache。
2、levels=1:2:
設(shè)置了緩存目錄的層級(jí)結(jié)構(gòu)。這里 levels=1:2 表示在緩存目錄下,使用兩個(gè)級(jí)別的子目錄來(lái)存儲(chǔ)緩存文件。第一級(jí)目錄有 1 個(gè)字符(例如 A),第二級(jí)目錄有 2 個(gè)字符(例如 00),這種結(jié)構(gòu)有助于管理大量緩存文件,避免單個(gè)目錄中文件過(guò)多。
3、keys_zone=proxy_cache:10m:
定義了一個(gè)名為 proxy_cache 的共享內(nèi)存區(qū)域,用于存儲(chǔ)緩存鍵的元數(shù)據(jù)(例如緩存的路徑、過(guò)期時(shí)間等)。10m 表示這個(gè)內(nèi)存區(qū)域的大小為 10 兆字節(jié)。
4、max_size=10g:
設(shè)置了緩存的最大總大小為 10 GB。超過(guò)這個(gè)大小的緩存會(huì)被清理,以保持總緩存大小在限制之內(nèi)。
5、inactive=60m:
定義了緩存的過(guò)期時(shí)間。如果緩存項(xiàng)在 60 分鐘內(nèi)沒(méi)有被訪問(wèn),它將被標(biāo)記為過(guò)期并最終被清理。
6、use_temp_path=off:
表示緩存的臨時(shí)文件不使用臨時(shí)路徑。默認(rèn)情況下,Nginx 會(huì)在寫入緩存文件時(shí)先使用臨時(shí)文件,如果設(shè)置為 off,則直接寫入最終緩存路徑。
vim /etc/nginx/conf.d/default.conf
server { listen 80; server_name localhost; access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; #開(kāi)啟反向代理緩存 # Proxy_cache 使用名為 的對(duì)應(yīng)緩存配置 proxy_cache proxy_cache; # proxy_cache_valid 200 206 304 301 302 12h; # 對(duì)http狀態(tài)碼為200、304…的內(nèi)容緩存12小時(shí) proxy_cache_valid 200 304 12h; # 設(shè)置不同相應(yīng)碼的緩存時(shí)間,除了上面配置12小時(shí)的,其他的的存10分鐘 proxy_cache_valid any 10m; # proxy_cache_key $uri 定義緩存唯一key,通過(guò)唯一key來(lái)進(jìn)行hash存取 proxy_cache_key $host$uri$is_args$args; # add_header:判斷數(shù)據(jù)包是否緩存了該信息 #緩存命中情況如何在http頭中體現(xiàn),以及在nginx日志中查看 add_header Nginx-Cache "$upstream_cache_status"; # proxy_next_upstream 出現(xiàn)502-504或錯(cuò)誤,會(huì)跳過(guò)此臺(tái)服務(wù)器訪問(wèn)下一臺(tái)服務(wù)器 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
mkdir -p /app/limou/cache
- 準(zhǔn)備緩存文件的存放目錄
systemctl restart nginx
- 重啟服務(wù)器
3 使用PC客戶機(jī),再次訪問(wèn)nginx-2服務(wù)器
4 通過(guò)PC客戶機(jī)瀏覽器開(kāi)發(fā)者功能。觀察是否命中緩存。
未命中miss
命中hit
提示:新創(chuàng)建的網(wǎng)頁(yè)文件,初次訪問(wèn)均為miss。
nginx緩存工作原理
未啟動(dòng)緩存
啟動(dòng)緩存第一次查詢
- 第一次訪問(wèn),proxy_cache并沒(méi)有找到對(duì)應(yīng)的緩存文件(未命中緩存MISS),所以當(dāng)?shù)谝淮握?qǐng)求完成的同時(shí),proxy_cache會(huì)保持緩存:
啟動(dòng)緩存第二次查詢
- 同一個(gè)url第二次訪問(wèn),當(dāng)同一個(gè)文件再次到達(dá)源站,proxy_cache就會(huì)找到其對(duì)應(yīng)的緩存文件(命中緩存HIT)直接返回給請(qǐng)求端,無(wú)需再執(zhí)行php程序
到此這篇關(guān)于Nginx Proxy緩存的具體實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Nginx Proxy緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx+Tomcat負(fù)載均衡及動(dòng)靜分離群集的實(shí)現(xiàn)
本文主要介紹了Nginx+Tomcat負(fù)載均衡及動(dòng)靜分離群集的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Nginx為已安裝nginx動(dòng)態(tài)添加模塊
本篇文章主要介紹了Nginx之為已安裝nginx動(dòng)態(tài)添加模塊的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04nginx 配置代理服務(wù)地址最后多加反斜杠和不加反斜杠的區(qū)別小結(jié)
在使用Nginx配置代理服務(wù)時(shí),地址最后是否添加反斜杠(/)會(huì)對(duì)代理的URL處理產(chǎn)生影響,下面就來(lái)具體介紹一下,感興趣的可以了解一下2024-08-08Mac M1 Nginx 配置多站點(diǎn)的實(shí)現(xiàn)
這篇文章主要介紹了Mac M1 Nginx 配置多站點(diǎn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Nginx服務(wù)器設(shè)置網(wǎng)站驗(yàn)證訪問(wèn)的方法
這篇文章主要介紹了Nginx服務(wù)器設(shè)置網(wǎng)站驗(yàn)證訪問(wèn)的方法,通過(guò)設(shè)置密碼來(lái)要求登錄網(wǎng)站目錄的用戶進(jìn)行驗(yàn)證,需要的朋友可以參考下2015-07-07詳解Nginx中HTTP的keepalive相關(guān)配置
這篇文章主要介紹了Nginx中HTTP的keepalive相關(guān)配置,以及Nginx的Httpd守護(hù)進(jìn)程相關(guān)的keepalive timeout配置,需要的朋友可以參考下2016-01-01