Proxy緩存
緩存類型
網頁緩存 (公網)CDN
數(shù)據庫緩存 memcache redis
網頁緩存 nginx-proxy
客戶端緩存 瀏覽器緩存
模塊
ngx_http_proxy_module
語法
緩存開關
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,通過唯一key來進行hash存取,緩存文件名
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location
緩存過期
Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
啟動緩存
1 延續(xù)代理實驗
2 設置nginx-2為緩存服務器
vim /etc/nginx/conf.d/default.conf
http {
...
proxy_cache_path /app/qianfeng/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;
proxy_cache_path命令中的參數(shù)及對應配置說明如下:
1.用于緩存的本地磁盤目錄是/app/tianyun.me/cache
2.levels在/app/tianyun.me/cache/設置了一個兩級層次結構的目錄。
將大量的文件放置在單個目錄中會導致文件訪問緩慢,所以針對大多數(shù)部署,我們推薦使用兩級目錄層次結構。
如果levels參數(shù)沒有配置,則NGINX會將所有的文件放到同一個目錄中。
3.keys_zone設置一個共享內存區(qū),該內存區(qū)用于存儲緩存鍵和元數(shù)據,有些類似計時器的用途。將鍵的拷貝放入內存可以使NGINX在不檢索磁盤的情況下快速決定一個請求是`HIT`還是`MISS`,這樣大大提高了檢索速度。一個1MB的內存空間可以存儲大約8000個key,那么上面配置的10MB內存空間可以存儲差不多80000個key。
4.max_size設置了緩存的上限(在上面的例子中是10G)。這是一個可選項;如果不指定具體值,那就是允許緩存不斷增長,占用所有可用的磁盤空間。當緩存達到這個上線,處理器便調用cache manager來移除最近最少被使用的文件,這樣把緩存的空間降低至這個限制之下。
5.inactive指定了項目在不被訪問的情況下能夠在內存中保持的時間。在上面的例子中,如果一個文件在60分鐘之內沒有被請求,則緩存管理將會自動將其在內存中刪除,不管該文件是否過期。該參數(shù)默認值為10分鐘(10m)。注意,非活動內容有別于過期內容。NGINX不會自動刪除由緩存控制頭部指定的過期內容(本例中Cache-Control:max-age=120)。過期內容只有在inactive指定時間內沒有被訪問的情況下才會被刪除。如果過期內容被訪問了,那么NGINX就會將其從原服務器上刷新,并更新對應的inactive計時器。
6.NGINX最初會將注定寫入緩存的文件先放入一個臨時存儲區(qū)域, use_temp_path=off命令指示NGINX將在緩存這些文件時將它們寫入同一個目錄下。我們強烈建議你將參數(shù)設置為off來避免在文件系統(tǒng)中不必要的數(shù)據拷貝。use_temp_path在NGINX1.7版本和NGINX Plus R6中有所介紹。
...
}
location / {
...
proxy_cache proxy_cache;
Proxy_cache 使用名為 的對應緩存配置
proxy_cache_valid 200 304 12h;
proxy_cache_valid 200 206 304 301 302 12h; 對httpcode為200…的緩存12小時
proxy_cache_valid any 10m;
proxy_cache_valid 設置不同相應碼的緩存時間,除了上面的,其他的的存10分鐘
proxy_cache_key $host$uri$is_args$args;
proxy_cache_key $uri 定義緩存唯一key,通過唯一key來進行hash存取
add_header Nginx-Cache "$upstream_cache_status";
add_header:緩存命中情況如何在http頭中體現(xiàn),以及在nginx日志中查看
proxy_cache_path 緩存文件路徑
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_next_upstream 出現(xiàn)502-504或錯誤,會跳過此臺服務器訪問下一臺服務器
本實驗只有一個真實服務器
(擴展)結合LB功能的設置
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
...
}
mkdir -p /app/qianfeng/cache
準備緩存文件的存放目錄
systemctl restart nginx
重啟服務器
3 使用PC客戶機,再次訪問nginx-2服務器
4 通過PC客戶機瀏覽器開發(fā)者功能。觀察是否命中緩存。
命中hit
未命中miss
提示:新創(chuàng)建的網頁文件,初次訪問均為miss。
nginx緩存工作原理
未啟動緩存
啟動緩存第一次查詢
第一次訪問,proxy_cache并沒有找到對應的緩存文件(未命中緩存MISS),所以當?shù)谝淮握埱笸瓿傻耐瑫r,proxy_cache會保持緩存:
啟動緩存第二次查詢
同一個url第二次訪問,當同一個文件再次到達源站,proxy_cache就會找到其對應的緩存文件(命中緩存HIT)直接返回給請求端,無需再執(zhí)行php程序
文章來源地址http://www.zghlxwxcb.cn/news/detail-785547.html
文章來源:http://www.zghlxwxcb.cn/news/detail-785547.html
到了這里,關于Nginx Proxy服務器 Proxy緩存模塊的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!