當前位置:首頁 » 文件管理 » 如何清理nginx緩存

如何清理nginx緩存

發布時間: 2025-05-20 22:23:23

A. Nginx緩存設置教程

| 這篇文章主要介紹了Nginx緩存設置案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下 |

在開發調試web的時候,經常會碰到因瀏覽器緩存(cache)而經常要去清空緩存或者強制刷新來測試的煩惱,提供下apache不緩存配置和nginx不緩存配置的設置。在常用的緩存設置裡面有兩種方式,都是使用add_header來設置:分別為Cache-Control和Pragma。

對於站點中不經常修改的靜態內容(如圖片,JS,CSS),可以在伺服器中設置expires過期時間,控制瀏覽器緩存,達到有效減小帶寬流量,降低伺服器壓力的目的。

以Nginx伺服器為例:

【背景】:Expires是Web伺服器響應消息頭欄位,在響應http請求時告訴瀏覽器在過期時間前瀏覽器可以直接從瀏覽器緩存取數據,而無需再次請求。

【相關資料】

1、Cache-control策略

Cache-Control與Expires的作用一致,都是指明當前資源的有效期,控制瀏覽器是否直接從瀏覽器緩存取數據還是重新發請求到伺服器取數據。只不過Cache-Control的選擇更多,設置更細致,如果同時設置的話,其優先順序高於Expires。

http協議頭Cache-Control :

值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age

各個消息中的指令含義如下:

Last-Modified/If-Modified-Since

其最終達到的就是等效於設置這三類html緩存技術:

B. nginx緩存(proxy_cache模塊)

緩存的基本思想是利用客戶端訪問的時間局限性,將客戶端訪問過的內容做一個副本,在一定時間內存放到本地,當改數據下次被訪問時,不必連接到後端伺服器反復去查詢數據,而是由本地保存的副本響應數據。

保存在本地的這些副本具有一個過期時間,超過該時間將會更新。判斷一個副本數據是否為過期數據的辦法有很多,可以使用保留時間來判斷,也可以使用數據完整度來判斷。

許多Web伺服器還具有校驗功能,就是當某些副本數據過期以後,先向後端伺服器發送校驗請求,後端伺服器對這些數據進行校驗,如果發現原數據和副本沒有差別,則將過期副本重新置為可用副本。

以上nginx配置結合使用:

proxy_params文件的配置如下:

訪問一次頁面,並向 http://www.blogs-s.com:8080/api/ 發起一個介面數據請求,查看/cache/nginx目錄下的緩存結果:

ngx_cache_purge是nginx的第三方模塊,能夠幫助我清除nginx中的緩存。

在之前的nginx編譯安裝中我們是沒有把緩存的清除模塊ngx_cache_purge編譯進去的,如果啟動了緩存,沒有安裝這個模塊,在之後的調試中我們嘗試去清除緩存時,將會出現異常:

這個異常是在指示我們,找不到該指令的驅動,需要按照相關模塊。

ngx_cache_purge只是nginx的第三方模塊,並不是某個特殊的軟體,所以我們需要對nginx重新進行編譯,操作如下:

配置nginx:

再一次啟動nginx成功;

接下來進行緩存清除測試,訪問: http://blogs.com/clear_cache/api/index.php , 訪問這個連接將會清除介面: http://blogs.com/api/index.php 的緩存數據。

結果如下:

在項目開發中,不可能出現什麼都需要緩存的數據,緩存僅僅適合去緩存查詢頻繁,但是不需要實時更新的數據,這個是它適合的場景,而我們上面的配置,只要是訪問api介面目錄就會緩存介面的數據,這樣對於一些需要實時更新的介面數據來說是不合理的,需要控制好nginx的緩存去緩存什麼以及不緩存什麼

set 指令為變數設置,proxy_no_cache參數中的值可以設置多個,但是多個值中,只要有一個是不為0的,就會通過緩存響應數據。

該指令用於配置一塊公用的內存區域的名稱,該區域可以存放緩存的索引數據。這些數據在Nginx伺服器啟動時由緩存索引重建進程負責建立,在Nginx伺服器的整個運行過程中由緩存管理進程負責定時檢測過期數據,檢索等管理工作。

該指令用於配置Nginx伺服器向客戶端發送響應數據時,不從緩存中獲取的條件。這些條件支持使用Nginx 配置的常用變數。

看一個例子:

其中,Scookie_nocache、Sarg_nocache、Sarg_comment、Shttp_pragma 和Shttp_authorization 都是Nginx配置文件的變數,

該指令用於設置Nginx伺服器在內存中為緩存數據建立索引時使用的關鍵字

如果我們希望緩存數據包含伺服器主機名稱等關鍵字,則可以將該指令設置為:

該指令用於設置是否開啟緩存的鎖功能。在緩存中,某些數據項可以同時被多個請求返回的響應數據填充。開啟該功能後,Nginx伺服器同時只能有一個請求填充緩存中的某一數據項,這相當於給該數據項上鎖,不允許其他請求操作。其他的請求如果也想填充該項,必須等待該數據項的鎖被釋放。這個等待時間由 proxy_cache_lock_timeout 指令配置。

該指令用於設置緩存的鎖功能開啟以後鎖的超時時間。具體細節參見proxy_cache_lock 指令的相關內容

其中,time為設置的時間,默認為5s。

該指令用於設置客戶端請求發送的次數,當客戶端向被代理伺服器發送相同請求達到該指令設定的次數後,Nginx伺服器才對該請求的響應數據做緩存。合理設置該值可以有效地降低硬碟上緩存數據的數量,並提高緩存的命中率。

其中,number為設置的次數。默認設置為1。

該指令用於設置Nginx伺服器存儲緩存數據的路徑以及和緩存索引相關的內容

該指令設置比較復雜,一般需要設置前面三個指令的情形比較多,後面的幾個變數與Nginx伺服器緩存索引重建進程及管理進程的性能相關,一般情況下保持默認設置就可以了。我們來看幾個簡單的配置實例:

如果Nginx在訪問被代理伺服器過程中出現被代理的伺服器無法訪問或者訪問錯誤等現象時,Nginx伺服器可以使用歷史緩存響應客戶端的請求,這些數據不一定和被代理伺服器上最新的數據相一致,但對於更新頻率不高的後端伺服器來說,Nginx伺服器的該功能在一定程度上能夠為客戶端提供不間斷訪問。該指令用來設置一些狀態,當後端被代理的伺服器處於這些狀態時,Nginx伺服器啟用該功能。

該指令可以支持的狀態如語法結構中所示。

該指令可以針對不同的HTTP響應狀態設置不同的緩存時間,

該指令同於配置在什麼情況下不使用cache功能

該指令配置是否在本地磁碟緩存來自被代理伺服器的響應數據。這是Nginx伺服器提供的另一種緩存數據的方法,但是該功能相對 Proxy Cache簡單一些,它不提供緩存過期更新、內存索引建立等功能,不佔用內存空間,對靜態數據的效果比較好。

Proxy Store方法多使用在被代理伺服器端發生錯誤的情況下,用來緩存被代理伺服器的響應數據。

該指令用於設置用戶或用戶組對Proxy Store緩存的數據的訪問許可權,

有關Proxy Store方法的使用,我們通過官方給出的實例加深理解,在該實例中筆者通過注釋對配置做了說明:

C. Nginx緩存&優雅清除緩存

Nginx作為高性能的web伺服器,其緩存功能對於提升頁面響應速度和減輕後端壓力至關重要。瀏覽器緩存流程涉及用戶本地存儲,當緩存失效時,Nginx作為緩存伺服器能從web緩存獲取數據。Nginx的緩存配置主要包括以下幾點:


1. Nginx緩存配置



  • proxy_cache和proxy_cache_path: 定義緩存存放路徑和相關參數,如proxy_cache zone默認關閉,而proxy_cache_path用於指定路徑和緩存策略。

  • proxy_cache_valid: 設置緩存有效期,區分緩存過期和刪除,inactive參數決定緩存未訪問的清理時間,proxy_cache_valid則控制緩存時間。

  • proxy_cache_bypass和proxy_no_cache: 分別配置不走緩存和不緩存的條件,如資源更新、緩存使用次數等。


2. Nginx緩存管理


以一個示例說明:配置Nginx緩存伺服器和服務端,通過訪問緩存路徑測試緩存狀態(如初次訪問為MISS,後續為HIT,過期後為EXPIRED)。如果服務端內容變更,需要清除對應緩存,可以使用ngx_cache_purge模塊。


3. Nginx緩存清除


使用ngx_cache_purge模塊可刪除特定緩存,例如訪問/purge/路徑刪除指定緩存。

D. nginx緩存性能怎麼樣

Nginx緩存對於不少人來說都不是很明朗的一個知識。那麼好我們就借介紹有關優點和缺點的機會把大家帶進Nginx緩存的世界。希望大家在文中能找到自己相關的使用方法。
兩種Nginx緩存都有著基本一樣的優點和缺點:
缺點1:不支持帶參數的動態鏈接,比如read.php?id=1,因為Nginx緩存只保存文件名,所以這個鏈接只在文件系統下保存為read.php,這樣用戶訪問read.php?id=2時會返回不正確的結果。同時不支持http://www.sudone.com/這種形式的首頁和二級目錄http://www.sudone.com/download/,因為Nginx緩存非常老實,會將這樣的請求照鏈接寫入文件系統,而這個鏈接顯然是一個目錄,所以保存失敗。這些情況都需要寫rewrite才能正確保存。
缺點2:Nginx緩存內部沒有緩存過期和清理的任何機制,這些緩存的文件會永久性地保存在機器上,如果要緩存的東西非常多,那就會撐暴整個硬碟空間。為此可以使用一個shell腳本定期清理,同時可以撰寫php等動態程序來做實時更新。
缺點3:只能緩存200狀態碼,因此後端返回301/302/404等狀態碼都不會緩存,假如恰好有一個訪問量很大的偽靜態鏈接被刪除,那就會不停穿透導致後端承載不小壓力。
缺點4:Nginx不會自動選擇內存或硬碟作為存儲介質,一切由配置決定,當然在當前的操作系統里都會有操作系統級的文件緩存機制,所以存在硬碟上也不需要過分擔心大並發讀取造成的io性能問題。
Nginx傳統緩存的缺點也是它和squid等緩存軟體的不同之特色,所以也可看作其優點。在生產應用中它常常用作和squid的搭檔,squid對於帶?的鏈接往往無法阻擋,而Nginx能將其訪問攔住,例如:http://sudone.com/?和http://sudone.com/在squid上會被當做兩個鏈接,所以會造成兩次穿透;而Nginx只會保存一次,無論鏈接變成http://sudone.com/?1還是http://sudone.com/?123,均不能透過Nginx緩存,從而有效地保護了後端主機。
Nginx緩存會非常老實地將鏈接形式保存到文件系統中,這樣對於一個鏈接,可以很方便地查閱它在緩存機器上的緩存狀態和內容,也可以很方便地和別的文件管理器如rsync等配合使用,它完完全全就是一個文件系統結構。
這兩種傳統緩存都可以在linux下將文件保存到/dev/shm里,一般我也是這么做的,這樣可以利用系統內存來做緩存,利用內存的話,清理過期內容速度就會快得多。使用/dev/shm/時除了要把tmp目錄也指向到/dev/shm這個分區外,如果有大量小文件和目錄,還要修改一下這個內存分區的inode數量和最大容量:
mount -o size=2500M -o nr_inodes=480000 -o noatime,nodiratime -o remount /dev/shm
上面的命令在一台有3G內存的機器上使用,因為/dev/shm默認最大內存是系統內存的一半就是1500M,這條命令將其調大成2500M,同時shm系統inode數量默認情況下可能是不夠用的,但有趣的是它可以隨意調節,這里調節為480000保守了點,但也基本夠用了。

E. nginx 反代里緩存怎麼清理

最簡單的反代+全緩存腳本:

#新建2個目錄,放置緩存文件:

mkdir -p /home/cache/path

mkdir /home/cache/temp

修改/usr/local/nginx/conf/nginx.conf的http層,添加以下代碼:

client_body_buffer_size 512k;

proxy_connect_timeout 5;

proxy_read_timeout 60;

proxy_send_timeout 5;

proxy_buffer_size 16k;

proxy_buffers 4 64k;

proxy_busy_buffers_size 128k;

proxy_temp_file_write_size 128k;

proxy_temp_path /home/cache/temp;

proxy_cache_path /home/cache/path levels=1:2 keys_zone=cache_one:10m inactive=7d max_size=30g;

#500m是內存佔用,7d是7天無訪問刪除,30g是緩存占具硬碟空間

#limit_zone crawler $binary_remote_addr 10m; #這段是用於限制單ip連接數的,如果頻繁出現後端負載過大可以嘗試去掉#。

(5)如何清理nginx緩存擴展閱讀:

nginx僅僅處理靜態頁面,動態的頁面(php請求)統統都交付給後台的兩台apache來處理。也就是說,可以把網站的靜態頁面或者文件放置到nginx的目錄下;動態的頁面和資料庫訪問都保留到後台的apache伺服器上。

假設前端nginx(為127.0.0.1:8080)僅僅包含一個靜態頁面index.html;後 台的兩個apache伺服器(分別為localhost:80和158.37.70.143:80),一台根目錄放置phpMyAdmin文件夾和 test.php(裡面測試代碼為print "server1";),另一台根目錄僅僅放置一個test.php(裡面測試代碼為print "server2";)。

熱點內容
虛幻4編譯著色器很慢進不去 發布:2025-05-21 02:57:22 瀏覽:256
存儲檔案的機構 發布:2025-05-21 02:56:05 瀏覽:701
gcc編譯時間 發布:2025-05-21 02:55:57 瀏覽:866
樹莓派ftp服務 發布:2025-05-21 02:52:43 瀏覽:89
文字型腳本 發布:2025-05-21 02:42:58 瀏覽:314
安卓手機照相解析度怎麼設置 發布:2025-05-21 02:31:20 瀏覽:969
西門子編程技巧 發布:2025-05-21 02:26:20 瀏覽:276
java的垃圾回收機制 發布:2025-05-21 02:13:53 瀏覽:364
安卓手機如何連接捷豹 發布:2025-05-21 02:06:49 瀏覽:475
掃碼槍能否用手機信息存儲 發布:2025-05-21 02:02:19 瀏覽:797