- 分布式系統(tǒng)架構(gòu):技術(shù)棧詳解與快速進階
- 張程
- 968字
- 2020-08-13 13:45:36
4.5 Nginx緩存
使用Nginx代理緩存可以減少后端服務(wù)端壓力,提升網(wǎng)站性能,減小并發(fā)延時。Nginx設(shè)置緩存的代碼如代碼清單4-13所示。
代碼清單4-13 Nginx設(shè)置緩存
upstream zachary.sh.cn{ server 192.168.10.1:8081; server 192.168.10.2:8082; } proxy_cache_path /cache levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; server_name zachary.sh.cn; index index.html; location / { proxy_pass http:// zachary.sh.cn; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_cache cache; proxy_cache_valid 200 304 6h; proxy_cache_valid any 6m; proxy_cache_key $uri$request_body; proxy_cache_methods GET POST; add_header Nginx-Cache "$upstream_cache_status"; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; } }
在代碼清單4-13中,proxy_cache_path /cache用于設(shè)置Nginx緩存資源的存放地址。各參數(shù)說明如下。
1)levels:按照兩層目錄分層。
2)key_zone:在共享內(nèi)存中設(shè)置一塊存儲區(qū)域來存放緩存的key和metadata(類似使用次數(shù)),Nginx可以快速判斷一個請求是否命中緩存,1MB可以存儲8000個key,10MB可以存儲80000個key。
3)max_size:最大緩存空間,如果不指定,會使用所有硬盤空間,當(dāng)達到配額后,會刪除最少使用的緩存文件。
4)inactive:未被訪問文件在緩存中的保留時間。如果文件60分鐘未被訪問,則不論狀態(tài)是否為expired,緩存控制程序都會刪掉文件。inactive默認是10分鐘。需要注意的是,inactive和expired配置項的含義是不同的,expired只是使緩存過期,但不會刪除緩存文件,inactive是刪除指定時間內(nèi)未被訪問的緩存文件。
5)use_temp_path:如果為off,則Nginx會將緩存文件直接寫入指定的緩存文件中,而不是使用temp_path存儲。official建議為off,因為這可以避免文件在不同文件系統(tǒng)中被不必要拷貝。
6)proxy_cache:用于啟用proxy緩存,并指定key_zone。另外,如果proxy_cache為off,則表示關(guān)閉緩存。
7)proxy_cache_valid:狀態(tài)碼200|304的過期時間為6h,其余狀態(tài)碼6分鐘過期。
8)proxy_cache_key:緩存的key,一般為URL+請求參數(shù)。
9)proxy_cache_methods:支持緩存的請求方式。
10)add_header:增加頭信息,觀察客戶端responce是否命中。
11)proxy_next_upstream:出現(xiàn)502~504或其他錯誤,會跳過此臺服務(wù)器訪問下一臺服務(wù)器。
其中,$upstream_cache_status的可能值如下。
- MISS:響應(yīng)在緩存中找不到,所以需要在服務(wù)器中取得。
- HIT:響應(yīng)包含來自緩存的最新且有效的內(nèi)容。
- STALE:內(nèi)容陳舊是因為原始服務(wù)器不能正確響應(yīng)。需要配置proxy_cache_use_stale。
- UPDATING:內(nèi)容過期了,是因為相對于之前的請求,響應(yīng)的入口(entry)已經(jīng)更新,并且proxy_cache_use_stale的updating已被設(shè)置。
- EXPIRED:緩存中的某一項過期了,來自原始服務(wù)器的響應(yīng),包含最新的內(nèi)容。
- REVALIDATED:proxy_cache_revalidate命令被啟用,經(jīng)過Nginx檢測得知當(dāng)前的緩存內(nèi)容依然有效(If-Modified-Since或者If-None-Match)。
清除Nginx緩存的方法如下:
- 手動刪除已緩存的數(shù)據(jù),如:rm -rf /cache/*。
- 通過ngx_cache_purge擴展模塊指定URL來清理緩存。
安裝ngx_cache_purge,如代碼清單4-14所示。
代碼清單4-14 安裝ngx_cache_purge
wget http:// labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz tar -zxvf ngx_cache_purge-2.3.tar.gz ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=../ngx_cache_purge-2.3 make make install
查看Nginx插件進程,如代碼清單4-15所示。
代碼清單4-15 查看Nginx插件進程
ps -ef|grep nginx nginx:master process /usr/local/nginx/sbin/nginx nginx:worker process nginx:cache manager process // 插件進程 nginx:cache loader process // 插件進程
此時可以通過URL路線來清除緩存。
- Web前端開發(fā)簡明教程(HTML+CSS+JavaScript+jQuery)
- 網(wǎng)絡(luò)化聯(lián)合仿真的時間同步
- TMS320C55x DSP原理及應(yīng)用(第3版)
- 網(wǎng)絡(luò)工程設(shè)計與系統(tǒng)集成(第2版)
- ARM嵌入式體系結(jié)構(gòu)與接口技術(shù)(Cortex-A8版)
- 新型網(wǎng)絡(luò)體系結(jié)構(gòu)
- 計算思維的結(jié)構(gòu)
- TMS 320 F28x源碼解讀
- 大學(xué)計算機基礎(chǔ)(第6版)
- GPU高性能運算之CUDA
- 計算機體系結(jié)構(gòu)基礎(chǔ)(第3版)
- 大模型時代的基礎(chǔ)架構(gòu):大模型算力中心建設(shè)指南
- 嵌入式系統(tǒng)開發(fā)基礎(chǔ)與實踐教程
- 兼容ARM9的軟核處理器設(shè)計:基于FPGA
- 計算機組成原理(基于x86-64架構(gòu))