nginx代理不緩存
① 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方法的使用,我們通過官方給出的實例加深理解,在該實例中筆者通過注釋對配置做了說明:
② Nginx的反向代理:實現靈活的請求轉發和內容緩存
深入探討Nginx的反向代理功能,旨在實現靈活的請求轉發和內容緩存,以優化網站性能和用戶體驗。Nginx作為強大的代理伺服器,不僅能夠將客戶端請求轉發至不同的後端伺服器,還能進行負載均衡和動態請求分發。此外,其內容緩存功能也值得深入研究,通過配置和優化緩存策略,可以顯著提升網站響應速度。
一、代理伺服器的簡介
代理伺服器用於在多個伺服器之間分配負載、展示不同網站的內容,或通過HTTP以外的協議傳遞請求至應用伺服器。通過合理配置,代理伺服器能夠提供高效、流暢的網路服務。
二、請求傳遞給代理的伺服器
通過在Nginx中使用proxy_pass指令,可以將請求轉發至指定的代理伺服器。例如,將請求傳遞至域名或IP地址,甚至包括埠號,實現與外部伺服器的通信。
三、代理多個伺服器
使用upstream指令,Nginx能夠代理多個伺服器。通過調整weight參數實現負載均衡,確保資源在伺服器間均衡分配,提高服務穩定性。
四、實現負載均衡
負載均衡是通過weight參數來調整權重實現的,確保不同伺服器能夠根據權重接收請求,有效利用資源。此外,Nginx還支持代理本機伺服器,靈活性更強。
五、RESTful介紹
RESTful架構簡化了資源訪問地址模式,使得Nginx配置文件更簡潔、易於維護。利用RESTful,可以更高效地管理資源,降低配置復雜性,同時支持模塊化配置,提高可擴展性。
六、Nginx conf中http與server的關系
Nginx配置文件中的http與server塊的關系是N對N,但實際實現過程中通過代碼邏輯細化為1對N,簡化了復雜流程,便於操作和維護。
七、進階:Nginx基礎組件使用
學習Nginx源碼提供的基礎組件,如ngx_str、list、queue、hash、array等,有助於更深入地理解Nginx工作原理。 ngx_str組件提供了字元串操作功能,對於日常開發和配置優化至關重要。
總結
掌握Nginx反向代理的配置與優化,能夠顯著提升網站性能和用戶體驗。關注技術分享公眾號《Lion 萊恩呀》,獲取更多學習資源和深入探討。對C/C++、Linux系統及雲原生技術感興趣的讀者,可訪問鏈接了解白金學習卡,覆蓋從基礎架構到高性能技術的全面學習內容。
③ 請問Nginx緩存不起作用的原因,感謝大家。
200:伺服器已成功處理了請求,這表示伺服器提供了請求的內容。=== 如果不想讓代理或瀏覽器緩存,加no-cache參數 add_header Cache-Control no-cache;這樣瀏覽器F5...
④ Nginx作為緩存服務
上一篇文章講了Nginx作為代理服務的使用方式,這篇文章我們講一講Nginx作為緩存服務是怎麼工作的,以及實戰的使用。
先看一張圖:
面對第一次客戶端的應用Nginx需要從後端的服務獲取數據,對於後續的請求,Nginx若進行了緩存就不再從後端服務獲取數據。
語法:proxy_cache_path path [levels=levels].只能用在http中。
proxy_cache zone | off。默認是關閉的,可以用在http,server,location中。
訪問zzm這個路徑的時候,會返回配置文件中的spring.s項,具體值可以參考我們的啟動設置:
三個後台金正分別對應6000埠,6001埠,6002埠
所以我們訪問ip:port/zzm的時候會自動去訪問後台
我們首先注釋掉proxy_cache zzm_cache;進行訪問,也就是沒有緩存的情況下,訪問3次:
我們可以看到沒有緩存的情況下,會進行輪詢訪問,每次訪問的結果不一樣,而且我們的緩存路徑什麼都沒有,讓我想起了一首歌空空如也:
好奇的看了下目錄下的文件內容:
add_header Nging-Cache "$upstream_cache_status";
當我們沒有緩存的時候,我們可以看到應答會是MISS:
現在nginx.conf中加入新的配置項:
此時我們怒刷前端頁面,會發現後端日誌如下:
Nginx的緩存服務就講到這里,歡迎大家指正
⑤ 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/路徑刪除指定緩存。
⑥ 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連接數的,如果頻繁出現後端負載過大可以嘗試去掉#。
(6)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";)。
⑦ nginx 緩存機制
Nginx緩存的基本思路
基本思想是利用客戶訪問的時間局部性原理,對客戶已經訪問過的內容在Nginx伺服器本地建立副本,這樣在一段時間內再次訪問該數據,就不需要通過Nginx伺服器再次向後端伺服器發出請求,所以能夠減少Nginx伺服器與後端伺服器之間的網路流量,減輕網路擁塞,同時還能減小數據傳輸延遲,提高用戶訪問速度。同時,當後端伺服器宕機時,Nginx伺服器上的副本資源還能夠回應相關的用戶請求,這樣能夠提高後端伺服器的魯棒性。
對於緩存,我們大概會有以下問題:
(1)緩存文件放在哪兒?
(2)緩存的空間大小是否可以限定?
(3)如何指定哪些請求被緩存?
(4)緩存的有效期是多久?
(5)對於某些請求,是否可以不走緩存?
解決這些問題後,nginx的緩存也就基本配置完成了,下面看詳細配置過程
開啟緩存
要使用緩存,首先要使用 proxy_cache_path 這個指令(必須放在 http 上下文的頂層位置),然後在目標上下文中使用 proxy_cache 指令
配置示例
proxy_cache_path 有兩個必填參數,第一個參數為 緩存目錄,第二個參數keys_zone指定緩存名稱和佔用內存空間的大小(註:示例中的10m是對內存中緩存內容元數據信息大小的限制,如果想限制緩存總量大小,需要用 max_size 參數)
proxy_cache 的參數為之前指定的緩存名稱
緩存管理的相關進程
在緩存工作中有兩個附加進程:
(1)緩存管理器
定期檢查緩存狀態,看緩存總量是否超出限制,如果超出,就移除其中最少使用的部分
(2)緩存載入器
載入器只在nginx啟動後運行一次,把緩存內容的元數據信息載入到內存空間,如果一次性載入全部緩存信息,會大量消耗資源,使nginx在啟動後的幾分鍾里變慢,為避免此問題,有3種載入策略:
loader_threshold – 指定每次載入執行的時間
loader_files – 每次最多載入的數量
loader_sleeps – 每次載入的延時
例如:
proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;
指定緩存哪些請求
nginx默認會緩存所有 get 和 head 方法的請求結果,緩存的key默認使用請求字元串
(1)自定義key
例如 proxy_cache_key " request_uri cookie_nocache arg_comment;
如果任何一個參數值不為空,或者不等於0,nginx就不會查找緩存,直接進行代理轉發
綜合示例
nginx 緩存機制
三分鍾看懂Nginx伺服器的緩存原理和機制