Nginx實(shí)現(xiàn)清除緩存內(nèi)容
NGINX可以從緩存中刪除舊的和過期的緩存文件。刪除過期的緩存內(nèi)容是強(qiáng)制性的,以防止同時(shí)提供新舊版本的網(wǎng)頁。收到包含自定義HTTP標(biāo)頭或HTTP PURGE方法的特殊"purge"請(qǐng)求后,將清除緩存。
配置緩存清除
讓我們?cè)O(shè)置一個(gè)配置,該配置用于識(shí)別使用HTTP PURGE方法的請(qǐng)求并刪除匹配的URL。
1.在http {}上下文中,添加一個(gè)新變量,例如$purge_method,該變量取決于$request_method變量:
http {
...
map $request_method $purge_method {
PURGE 1;
default 0;
}
}
2.在配置緩存的location{}塊中,添加proxy_cache_purge指令以指定用于緩存清除請(qǐng)求的條件。在我們的示例中,它是在上面的步驟中配置的$ purge_method:
server {
listen 80;
server_name www.example.com;
location/{
proxy_pass https://localhost:8002;
proxy_cache mycache;
proxy_cache_purge $purge_method;
}
}
發(fā)送清除命令
當(dāng)proxy_cache_purge指令的配置完成時(shí),我們需要發(fā)送一個(gè)特殊的cache-purge請(qǐng)求來清除緩存。我們可以使用一系列工具發(fā)出清除請(qǐng)求,包括以下示例中的curl命令:
$ curl -X PURGE -D - "https://www.example.com/*" HTTP/1.1 204 No Content Server: nginx/1.15.0 Date: Sat, 19 May 2018 16:33:04 GMT Connection: keep-alive
在上面的示例中,將清除具有由星號(hào)通配符指定的公共URL部分的資源。但是,此類高速緩存條目不會(huì)完全從高速緩存中刪除:它們會(huì)一直保留在磁盤上,直到因不活動(dòng)而被刪除,或者被高速緩存清除程序(已將proxy_cache_path的purger參數(shù)啟用)刪除,或者被客戶端嘗試訪問它們。
限制清除命令訪問
我們建議您限制允許發(fā)送緩存清除請(qǐng)求的IP地址數(shù)量:
geo $purge_allowed {
default 0; # deny from other
10.0.0.1 1; # allow from localhost
192.168.0.0/24 1; # allow from 10.0.0.0/24
}
map $request_method $purge_method {
PURGE $purge_allowed;
default 0;
}
在上面的示例中,NGINX檢查請(qǐng)求中是否使用了PURGE方法,如果是,則分析客戶端IP地址。如果IP地址已列入白名單,則$ purge_method設(shè)置為$ purge_allowed:1允許清除,0拒絕清除。
完全刪除文件
要完全刪除與星號(hào)(*)匹配的緩存文件,該過程將永久性地遍歷所有緩存條目,并刪除與通配符匹配的條目。在http{}上下文中將purger參數(shù)包括到proxy_cache_path指令中:
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m purger=on;
緩存清除配置示例
http {
...
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=mycache:10m purger=on;
map $request_method $purge_method {
PURGE 1;
default 0;
}
server {
listen 80;
server_name www.example.com;
location/{
proxy_pass https://localhost:8002;
proxy_cache mycache;
proxy_cache_purge $purge_method;
}
}
geo $purge_allowed {
default 0;
10.0.0.1 1;
192.168.0.0/24 1;
}
map $request_method $purge_method {
PURGE $purge_allowed;
default 0;
}
}
Byte-Range緩存
有時(shí),初始高速緩存填充操作會(huì)花費(fèi)很長時(shí)間,尤其是對(duì)于大型文件。例如,當(dāng)視頻文件開始下載以滿足部分文件的初始請(qǐng)求時(shí),后續(xù)請(qǐng)求必須等待整個(gè)文件被下載并放入緩存中。
在Nginx中,可以緩存這樣的范圍請(qǐng)求,并使用"Cache Slice"模塊逐漸填充緩存,該模塊將文件分成較小的"slices"。每個(gè)范圍請(qǐng)求都選擇覆蓋所請(qǐng)求范圍的特定切片,如果仍未緩存該范圍,則將其放入緩存。這些切片的所有其他請(qǐng)求都從緩存中獲取數(shù)據(jù)。
啟用byte-range緩存:
- 首先,確保使用緩存切片模塊編譯了NGINX。
- 使用slice指令定義切片的大小:
location/{
slice 1m;
}
- 選擇切片的大小,以使切片下載更快。如果大小太小,則內(nèi)存使用可能會(huì)過多,并且會(huì)打開大量文件描述符。如果大小很大,則處理請(qǐng)求可能會(huì)導(dǎo)致延遲。將$slice_range變量添加到緩存鍵:
proxy_cache_key $uri$is_args$args$slice_range;
- 啟用具有206狀態(tài)代碼的響應(yīng)緩存:
proxy_cache_valid 200 206 1h;
- 通過在Range標(biāo)頭字段中設(shè)置變量(即$ slice_range),將范圍請(qǐng)求傳遞到代理服務(wù)器:
proxy_set_header Range $slice_range;
這里是完整的配置:
location/{
slice 1m;
proxy_cache cache;
proxy_cache_key $uri$is_args$args$slice_range;
proxy_set_header Range $slice_range;
proxy_cache_valid 200 206 1h;
proxy_pass http://localhost:8000;
}
請(qǐng)注意,如果啟用了切片緩存,則不得更改初始文件。
組合配置示例
http {
...
proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300
loader_files=200 max_size=200m;
server {
listen 8080;
proxy_cache mycache;
location/{
proxy_pass http://backend1;
}
location /some/path {
proxy_pass http://backend2;
proxy_cache_valid any 1m;
proxy_cache_min_uses 3;
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
}
}
}到此這篇關(guān)于Nginx實(shí)現(xiàn)清除緩存內(nèi)容的文章就介紹到這了,更多相關(guān)Nginx 清除緩存 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
配置Nginx出現(xiàn)403(Forbidden)靜態(tài)文件加載不出來的解決方法
本文主要介紹了配置Nginx出現(xiàn)403(Forbidden)靜態(tài)文件加載不出來的解決方法,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
nginx從安裝到配置詳細(xì)說明(安裝,安全配置,防盜鏈,動(dòng)靜分離,配置 HTTPS,性能優(yōu)化)
這篇文章主要介紹了nginx從安裝到配置詳細(xì)說明(安裝,安全配置,防盜鏈,動(dòng)靜分離,配置 HTTPS,性能優(yōu)化,緩存,url重寫),需要的朋友可以參考下2022-01-01
prometheus監(jiān)控nginx的實(shí)現(xiàn)步驟
本文主要介紹了prometheus監(jiān)控nginx的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-05-05
Nginx負(fù)載均衡下的webshell連接的實(shí)現(xiàn)
在解決shell文件上傳問題、命令執(zhí)行漂移等困難后,可實(shí)現(xiàn)正常的webshell上傳,本文主要介紹了Nginx負(fù)載均衡下的webshell連接的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
Docker部署nginx實(shí)現(xiàn)過程圖文詳解
這篇文章主要介紹了Docker部署nginx實(shí)現(xiàn)過程圖文詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
nginx實(shí)現(xiàn)數(shù)據(jù)庫端口轉(zhuǎn)發(fā)
本文主要介紹了nginx實(shí)現(xiàn)數(shù)據(jù)庫端口轉(zhuǎn)發(fā),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
重啟或殺掉Nginx進(jìn)程后丟失nginx.pid的解決辦法
在重啟或殺掉nginx進(jìn)程后,會(huì)丟失nginx.pid文件,導(dǎo)致nginx無法正常啟動(dòng),這里分享下解決方法2014-01-01

