Nginx學習筆記(八)—— Nginx緩存集成

🗄🗄 Nginx緩存集成

📌📌 一、緩存核心價值
緩存命中
緩存未命中
客戶端請求
Nginx緩存
直接返回緩存內容
轉發到后端服務器
后端響應
存入緩存并返回

? 核心優勢

  • 🚀 響應加速:減少后端請求延遲,靜態資源響應提升10倍+
  • ? 負載分流:緩存層吸收60%-90%的靜態資源請求
  • 🔋 資源節省:降低后端服務器CPU/內存消耗
  • 🛡 故障緩沖:后端故障時仍可提供緩存內容
??? 二、緩存配置語法

基礎配置結構

http {# 定義緩存路徑和參數proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off max_size=1g;server {location / {# 啟用緩存并指定緩存區proxy_cache my_cache;# 緩存有效性判斷proxy_cache_valid 200 302 10m;  # 成功響應緩存10分鐘proxy_cache_valid 404      1m;  # 404響應緩存1分鐘# 緩存行為控制proxy_cache_min_uses 3;     # 至少請求3次才緩存proxy_cache_lock on;        # 防止緩存雪崩proxy_pass http://backend;}}
}

核心指令詳解

指令默認值作用描述
proxy_cache_path-緩存存儲定義 levels目錄層級 keys_zone內存鍵區 inactive不活躍刪除時間
proxy_cacheoff啟用緩存區 指定keys_zone名稱
proxy_cache_valid-響應碼緩存時長 200 302 10m格式
proxy_cache_min_uses1最小請求次數 達到次數才緩存
proxy_cache_lockoff緩存鎖機制 防止重復更新緩存
proxy_cache_use_staleoff過時緩存使用 error timeout updating參數
🔄🔄 三、實戰配置案例
🗃 案例1:基礎靜態資源緩存
proxy_cache_path /cache/static levels=1:2 keys_zone=static_cache:50m max_size=10g;server {location ~* \.(jpg|png|css|js)$ {proxy_cache static_cache;proxy_cache_valid 200 304 30d;  # 圖片/CSS/JS緩存30天proxy_cache_valid any 5m;       # 其他響應緩存5分鐘add_header X-Cache-Status $upstream_cache_status;expires 30d;                    # 瀏覽器緩存控制proxy_pass http://static_server;}
}

📌 效果

  • 首次請求:X-Cache-Status: MISS
  • 二次請求:X-Cache-Status: HIT
🔀 案例2:動態內容緩存
proxy_cache_path /cache/dynamic keys_zone=dynamic_cache:100m;map $request_method $skip_cache {default     0;"POST"      1;  # POST請求不緩存
}server {location /api/ {proxy_cache dynamic_cache;proxy_cache_valid 200 5m;   # 接口數據緩存5分鐘proxy_cache_bypass $skip_cache;  # 根據條件跳過緩存# 緩存鍵生成規則(區分不同用戶)proxy_cache_key "$scheme$request_method$host$request_uri$cookie_userid";proxy_pass http://api_server;}
}

? 關鍵機制

  • 🧩 proxy_cache_key:精細化緩存鍵控制
  • 🚫 proxy_cache_bypass:按條件跳過緩存
🧩 案例3:分層緩存策略
HIT
MISS
響應慢
正常響應
客戶端
緩存狀態檢查
直接返回緩存
后端服務器
返回過時緩存
更新緩存

location /news/ {proxy_cache news_cache;proxy_cache_valid 200 10m;# 高級容錯策略proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;# 后臺更新機制proxy_cache_background_update on;proxy_cache_revalidate on;
}

🛠 策略優勢

  • ? updating:在緩存更新時返回舊內容
  • 🔄 background_update:后臺異步更新緩存
  • 🔍 revalidate:使用If-Modified-Since驗證
🧹🧹 四、緩存清除機制

主動清除方案

# 清除指定URL緩存
location ~ /purge(/.*) {allow 192.168.1.0/24;  # 限制管理IPdeny all;proxy_cache_purge dynamic_cache "$scheme$request_method$host$1";
}# 定時清除腳本(crontab)
0 3 * * * find /cache/ -type f -mtime +7 -delete

被動清除策略

proxy_cache_path /cache/ levels=1:2 keys_zone=cache_zone:100minactive=2h  # 2小時未訪問自動清除max_size=20g # 總量達20G觸發LRU清除
🚫🚫 五、頁面不緩存設置

多維度禁用緩存

location /private/ {# 方法1:關閉緩存指令proxy_cache off;# 方法2:設置0秒有效期proxy_cache_valid 0;# 方法3:添加無緩存頭add_header Cache-Control "no-cache, no-store, must-revalidate";proxy_pass http://private_server;
}# 根據Cookie動態禁用
map $cookie_session $no_cache {default       0;"active"      1;  # 登錄用戶不緩存
}location /account/ {proxy_cache_bypass $no_cache;  # 跳過緩存proxy_no_cache $no_cache;      # 不存儲緩存
}
??? 六、高階技巧與陷阱規避
🔧 技巧1:緩存分片優化
proxy_cache_path /cache/ levels=1:2 keys_zone=main:100mmax_size=50g inactive=30d use_temp_path=off;# 多磁盤負載均衡
split_clients $request_uri $disk {50%         "/disk1/cache";50%         "/disk2/cache";
}proxy_cache_path $disk levels=1:2 keys_zone=split_cache:100m;
🎭 技巧2:緩存狀態可視化
location /cache-status {stub_status on;access_log off;allow 127.0.0.1;deny all;
}

監控指標

  • cache_hits:緩存命中次數
  • cache_misses:緩存未命中次數
  • cache_expired:過期緩存數量
? 常見陷阱解決方案:
  1. 緩存穿透問題

    # 空結果緩存策略
    proxy_cache_valid 404 10m;  
    proxy_cache_valid 502 5m;# 請求合并機制
    proxy_cache_lock on;
    proxy_cache_lock_timeout 5s;
    
  2. 緩存雪崩預防

    # 隨機過期時間
    proxy_cache_valid 200 302 10m+$(request_time);# 后端保護機制
    proxy_cache_use_stale updating;
    
  3. 內存溢出處理

    # 限制keys_zone大小
    keys_zone=my_zone:100m;# 啟用文件緩存
    open_file_cache max=10000 inactive=30s;
    
📊 七、調試與監控方案

日志增強配置

log_format cache_log '$remote_addr - $upstream_cache_status ''$upstream_response_time "$request"';location / {access_log /var/log/nginx/cache.log cache_log;add_header X-Cache $upstream_cache_status;
}

監控指標采集

# 實時命中率計算
tail -f cache.log | awk '{print $3}' | sort | uniq -c# 緩存磁盤使用
du -sh /cache/
find /cache/ -type f -printf "%T@ %p\n" | sort -n

🔍 診斷命令集

# 檢查緩存配置
nginx -T | grep -A15 "proxy_cache"# 強制清除緩存
curl -X PURGE http://nginx-host/purge/resource.jpg# 實時命中率監控
watch -n 1 "grep -o 'HIT' cache.log | wc -l"

📚 總結圖譜

緩存核心
基礎配置
存儲策略
清除機制
性能優化
proxy_cache_path
proxy_cache_valid
內存分片
磁盤分級
主動清除
被動淘汰
緩存鎖
后臺更新

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93027.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93027.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93027.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

httpx 設置速率控制 limit 時需要注意 timeout 包含 pool 中等待時間

假設通過 httpx.Client 設置 limit 速率控制后,同時發起多個請求訪問 youtube。并且由于科學原因一直連接不上 假設一共 4 個連接,max_connection2,timeout5s。 默認會發生的情況不是前兩個連接 tcp 握手 timeout,后兩個連接再發起…

【網絡】TCP/UDP總結復盤

1.UDP的格式2.TCP的格式3.TCP是來解決什么問題的?答:解決IP層的不可靠傳輸問題,可能數據包丟失、損壞、重復等為上層應用層提高可靠有序的數據傳輸服務通過校驗和、確認應答機制、序列號來解決不可靠傳輸和無序性問題通過流量控制--->>…

Nginx 配置中,root 和 alias 區別

在 Nginx 配置中,root 和 alias 都用于定義文件路徑,但它們的行為有重要區別,特別是 路徑拼接方式 和 末尾斜杠 (/) 的影響。1. root 和 alias 的區別 (1) root 指令 作用:root 會將 location 的 URI 拼接到 root 路徑后面&#x…

基于vue.js的無縫滾動

方法一&#xff1a;基于requestAnimationFrame demo <template><h-page-container class"hoem-page"><h1>無縫滾動</h1><h2>垂直方向</h2><div class"container1"><AutoScroll :data"list" :item-…

【Linux學習|黑馬筆記|Day4】IP地址、主機名、網絡請求、下載、端口、進程管理、主機狀態監控、環境變量、文件的上傳和下載、壓縮和解壓

【DAY4】 今天看的是Linux第四章剩余部分 至此Linux暫時學到這&#xff0c;第五章還包含很多軟件的安裝&#xff0c;但是等我要用的時候再裝吧 我現在只裝了MySQL8.0&#xff0c;具體教程請看筆記安裝教程 內容包含更換鏡像源和安裝配置步驟 文章目錄【DAY4】6&#xff09;IP地…

【合新通信】射頻光纖傳輸模塊詳解

射頻光纖傳輸模塊是一種將射頻(RF)信號通過光纖進行傳輸的關鍵設備&#xff0c;廣泛應用于通信、軍事、廣播電視等領域。以下是關于射頻光纖傳輸模塊的全面介紹&#xff1a;基本原理與組成射頻光纖傳輸模塊主要由以下幾部分組成&#xff1a;電光轉換單元&#xff1a;將輸入的射…

【信息收集】從GET到POST:破解登錄表單的全流程

目標&#xff1a;將瀏覽器數據代理至BP的proxy模塊。將個人PHP的留言板項目首頁登錄數據包代理至BP&#xff0c;并轉發至intrder模塊&#xff0c;進行暴力破解。免責聲明&#xff1a;本文章內容僅用于個人網絡安全知識學習與研究&#xff0c;嚴禁用于任何未經授權的攻擊或非法活…

【辦公自動化】如何使用Python操作PPT和自動化生成PPT?

在現代商業和教育環境中&#xff0c;PowerPoint演示文稿是信息傳遞的重要工具。通過Python自動化PPT創建和編輯過程&#xff0c;可以大幅提高工作效率&#xff0c;特別是在需要批量生成或更新演示文稿的場景下。本文將介紹如何使用python-pptx庫實現PPT自動化&#xff0c;并提供…

18 ABP Framework 模塊管理

ABP Framework 模塊管理 概述 該頁面詳細介紹了在 ABP Framework 解決方案中使用 ABP CLI 及相關工具添加、更新和管理模塊的方法。模塊管理是 ABP 模塊化架構的核心&#xff0c;支持可重用業務和基礎設施功能的集成。模塊通常以 NuGet 和/或 NPM 包的形式分發&#xff0c;有時…

外觀模式C++

外觀模式&#xff08;Facade Pattern&#xff09;是一種結構型設計模式&#xff0c;它為復雜系統提供一個簡化的接口&#xff0c;隱藏系統內部的復雜性&#xff0c;使客戶端能夠更輕松地使用系統。這種模式通過創建一個外觀類&#xff0c;封裝系統內部的交互邏輯&#xff0c;客…

Go 微服務限流與熔斷最佳實踐:滑動窗口、令牌桶與自適應閾值

&#x1f31f; Hello&#xff0c;我是蔣星熠Jaxonic&#xff01; &#x1f308; 在浩瀚無垠的技術宇宙中&#xff0c;我是一名執著的星際旅人&#xff0c;用代碼繪制探索的軌跡。 &#x1f680; 每一個算法都是我點燃的推進器&#xff0c;每一行代碼都是我航行的星圖。 &#x…

Java面試寶典:JVM性能優化

一、運行時優化 Java虛擬機(JVM)的運行時優化是提升Java應用性能的核心環節。JIT(Just-In-Time)編譯器在程序運行過程中,通過分析熱點代碼的執行模式,動態地進行一系列高級優化。這些優化技術對開發者透明,但了解其原理能幫助我們編寫出更易于優化的代碼,從而顯著提升…

Day55--圖論--107. 尋找存在的路徑(卡碼網)

Day55–圖論–107. 尋找存在的路徑&#xff08;卡碼網&#xff09; 今天學習并查集。先過一遍并查集理論基礎。再做下面這一道模板題&#xff0c;就可以結束了。體量不多&#xff0c;但是理解并查集&#xff0c;并使用好&#xff0c;不容易。 后續再找相關的題目來做&#xff0…

C++中的鏈式操作原理與應用(三):專注于異步操作延的C++開源庫 continuable

目錄 1.簡介 2.安裝與集成 3.快速入門 4.完整示例 5.優勢與適用場景 1.簡介 continuable 是一個專注于 異步操作延續&#xff08;continuation&#xff09; 的現代 C 開源庫&#xff0c;旨在簡化異步編程流程&#xff0c;解決 “回調地獄” 問題&#xff0c;提供直觀、靈活…

STM32--寄存器與標準庫函數--通用定時器--輸出比較(PWM生成)

目錄 前言 通用定時器類型 向上計數、向下計數、中心對齊 輸入捕獲與輸出比較概念 輸出比較典型例子&#xff1a;驅動舵機旋轉 通用定時器的輸出比較庫函數 代碼 通用定時器的輸出比較寄存器操作 代碼 這里提供數據手冊的寄存器 后言 前言 使用平臺:STM32F407ZET6 使…

91、23種設計模式

設計模式是軟件設計中反復出現的解決方案的模板&#xff0c;用于解決特定問題并提高代碼的可維護性、可擴展性和可復用性。23種經典設計模式可分為創建型、結構型和行為型三大類&#xff0c;以下是具體分類及模式概述&#xff1a; 一、創建型模式&#xff08;5種&#xff09; 關…

力扣(串聯所有單詞的子串)

串聯所有單詞的子串問題&#xff1a;多滑動窗口與哈希表的實戰應用。 一、題目分析&#xff08;一&#xff09;問題定義 給定字符串 s 和字符串數組 words&#xff08;words 中所有單詞長度相同 &#xff09;&#xff0c;找出 s 中所有“串聯子串”的起始索引。串聯子串指包含 …

RH134 管理基本存儲知識點

1. 對 Linux 磁盤進行分區時有哪兩種方案&#xff1f;分別加以詳細說明。答&#xff1a;MBR分區&#xff1a;主引導記錄(MBR)分區方案是運行BIOS固件的系統上的標準方案。此方案支持最 多四個主分區。在Linux系統上&#xff0c;您可以使用擴展分區和邏輯分區來創建最多…

【JS 異步】告別回調地獄:Async/Await 和 Promise 的優雅實踐與錯誤處理

【JS 異步】告別回調地獄&#xff1a;Async/Await 和 Promise 的優雅實踐與錯誤處理 所屬專欄&#xff1a; 《前端小技巧集合&#xff1a;讓你的代碼更優雅高效 上一篇&#xff1a; 【JS 數組】數組操作的“瑞士軍刀”&#xff1a;精通 Array.reduce() 的騷操作 作者&#xff…

23.Linux : ftp服務及配置詳解

Linux &#xff1a; ftp服務及配置詳解 FTP 基本概念 定義&#xff1a;文件傳輸協議&#xff08;File Transfer Protocol&#xff09;&#xff0c;采用 C/S 模式工作。端口&#xff1a; 控制端口&#xff1a;21數據端口&#xff1a;20FTP 工作原理模式工作流程連接發起方主動模…