Nginx 緩存系統 proxy_cache詳解

系列文章目錄

提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加
例如:第一章 Python 機器學習入門之pandas的使用


提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 系列文章目錄
  • 前言
    • 功能特點
    • proxy_cache工作原理
    • 示意圖
    • 配置文件示例
    • 參數詳盡說明
    • 性能優化方案
  • 總結


前言

Nginx 的 proxy_cache 模塊是 Nginx 代理功能的一部分,它允許 Nginx 緩存來自后端服務器的響應,以便在后續的請求中可以直接從緩存中提供內容,而無需再次向后端服務器請求。這種機制可以顯著提高靜態內容的響應速度,減輕后端服務器的負載,并提高網站的可擴展性。

功能特點

減少后端負載:通過緩存靜態內容,減少對后端服務器的請求,降低負載。
提高響應速度:緩存的內容可以快速響應后續相同的請求,提高用戶體驗。
靈活的緩存策略:可以根據不同的 HTTP 響應狀態碼設置不同的緩存有效期。
緩存控制:提供了豐富的指令來控制哪些請求可以被緩存,哪些請求應該繞過緩存。

`

proxy_cache工作原理

Nginx 的 proxy_cache 模塊允許 Nginx 作為反向代理服務器時緩存后端服務器的響應。以下是 proxy_cache 模塊的工作原理:

  1. 請求到達:客戶端向 Nginx 發送請求。
  2. 緩存查找:Nginx 首先檢查請求是否命中緩存。這是通過查找共享內存中的緩存鍵(由 proxy_cache_key 定義)來完成的。
  3. 緩存命中:如果請求命中緩存,Nginx 直接從緩存中讀取響應并返回給客戶端。
  4. 緩存未命中:如果請求未命中緩存,Nginx 將請求轉發到后端服務器。
  5. 后端響應:后端服務器處理請求并返回響應給 Nginx。
  6. 緩存存儲:Nginx 將后端服務器的響應存儲在本地文件系統中,同時在共享內存中更新緩存鍵和元數據。
  7. 返回響應:Nginx 將后端服務器的響應返回給客戶端,并根據 proxy_cache_valid 指令設置的規則決定緩存時間。

示意圖

+--------+     +---------+     +-----------+     +----------+
| 客戶端  | --> |   Nginx  | --> | 后端服務器 | --> |   Nginx   |
|         |--> |  (查找緩存) |     |           | <-- |  (返回    |
|         |    |  (緩存命中) |     |           |     |  響應)   |
|         |    |  (緩存未命中) |     |           |     +----------+
+---+----+    +---------+     +-----+---+---+|                |              ||                |              | (緩存存儲)|                |              |+----------------+--------------+

配置文件示例

# 定義 http 塊,Nginx 的主要配置都在這個塊內
http {# 設置緩存路徑及其參數proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=7d use_temp_path=off;# levels 定義緩存目錄的層級,1:2 表示兩層# keys_zone 定義緩存鍵和大小,my_cache:10m 表示名稱為 my_cache,大小為 10MB# max_size 控制緩存區域的最大磁盤空間,這里設置為 10GB# inactive 定義緩存數據在指定時間內未被訪問則自動清除的時間,這里設置為 7 天# use_temp_path 設置為 off,表示緩存文件直接寫到 cache 中而不使用 temp_path,避免文件拷貝導致影響性能# 定義 server 塊,用于監聽 80 端口并處理對 example.com 的請求server {# 監聽 80 端口listen 80;# 設置服務器名,這里為 example.comserver_name example.com;# 定義 location 塊,用于處理根路徑下的請求location / {# 將請求代理到后端服務器,這里為 http://backendproxy_pass http://backend;# 啟用緩存,并指定緩存區域為 my_cacheproxy_cache my_cache;# 設置緩存鍵,這里包括請求方法、主機和請求 URIproxy_cache_key "$request_method$host$request_uri";# 設置不同 HTTP 狀態碼的緩存有效期,200 和 302 狀態碼的響應緩存 10 分鐘proxy_cache_valid 200 302 10m;# 設置 404 狀態碼的響應緩存 1 分鐘proxy_cache_valid 404 1m;# 定義條件跳過緩存,如果請求中包含 no_cache 參數或特定的 HTTP 頭,則不使用緩存proxy_cache_bypass $cookie_no_cache $arg_no_cache$http_pragma$http_authorization;# 定義條件不緩存響應,如果請求中包含 no_cache 參數或特定的 HTTP 頭,則不緩存響應proxy_no_cache $cookie_no_cache $arg_no_cache$http_pragma$http_authorization;}}
}

這段配置注釋詳細解釋了 Nginx 配置文件中的每個指令和它們的參數,以便更好地理解配置文件的作用和行為。

參數詳盡說明

  • proxy_cache_path:定義緩存文件存儲路徑和參數。

    • levels:定義緩存目錄的層級。
    • keys_zone:定義共享內存中用于緩存鍵的區域。
    • max_size:定義緩存的最大磁盤空間。
    • inactive:定義緩存數據在指定時間內未被訪問則自動清除的時間。
    • use_temp_path:定義是否使用臨時路徑。
  • proxy_cache:啟用緩存并指定緩存區域。

  • proxy_cache_key:定義緩存的鍵,用于識別緩存數據。

  • proxy_cache_valid:為不同的響應狀態碼設置緩存時間。

  • proxy_cache_bypassproxy_no_cache:定義條件跳過緩存和避免緩存特定響應。

性能優化方案

  1. 緩存策略優化:合理配置 proxy_cache_valid 指令,為不同的響應狀態碼設置不同的緩存時間。
  2. 緩存空間管理:通過 proxy_cache_path 指令合理設置緩存空間的大小和有效期。
  3. 緩存鍵優化:使用 proxy_cache_key 指令定制緩存鍵,減少緩存沖突,提高緩存命中率。
  4. 緩存鎖定:通過 proxy_cache_lockproxy_cache_lock_timeout 指令,控制同時對同一緩存項的請求,減少對后端的并發請求。
  5. 使用 CDN:結合 CDN 使用 Nginx 緩存,可以將靜態資源緩存到離用戶更近的節點。
  6. 監控和調整:定期監控緩存命中率和響應時間,根據實際情況調整緩存配置。

總結

通過以上配置和優化方案,可以有效地管理 Nginx 的緩存行為,提高網站的性能,同時保證敏感或動態數據的實時性和安全性。

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

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

相關文章

mysql時間戳格式化yyyy-mm-dd

格式化到 年月日 # 將時間換成列名就行&#xff1b;當前是秒級時間戳&#xff0c;如果是毫秒的 / 1000即可 # SELECT FROM_UNIXTIME(1602668106666.777888999 / 1000,%Y-%m-%d) AS a; # SELECT FROM_UNIXTIME(列名 / 1000,%Y-%m-%d) AS a; SELECT FROM_UNIXTIME(1602668106.666…

PDFMathTranslate,PDF多語言翻譯,批量處理,學術論文,雙語對照(WIN/MAC)

分享一個非常實用的PDF文檔翻譯項目——PDFMathTranslate。作為一個經常逛GitHub的開發者&#xff0c;我總喜歡翻看各種項目附帶的論文&#xff0c;雖然大多時候是瞎研究&#xff0c;但卻樂在其中。該項目能夠完美保留公式、圖表、目錄和注釋&#xff0c;對于需要閱讀外文文獻的…

網絡藥理學:(待更)Alphafold3和批量分子動力學模擬(Desmond、AutoMD)

批量動力學模擬 注意全都需要在類linux平臺上進行 安裝Desmond模塊&#xff1a; https://github.com/Wang-Lin-boop/Schrodinger-Script 安裝AutoMD模塊&#xff1a; Wang-Lin-boop/CADD-Scripts: Scripts for virtual screening, cross docking and protein relax using Sc…

爬蟲基礎之代理的基本原理

在做爬蟲的過程中經常會遇到一種情況&#xff0c;就是爬蟲最初是正常運行、正常抓取數據的&#xff0c;一切看起來都是那么美好&#xff0c;然而一杯茶的工夫就出現了錯誤&#xff0c;例如 403 Forbidden&#xff0c;這時打開網頁一看&#xff0c;可能會看到“您的IP訪問頻率太…

第十七屆山東省職業院校技能大賽 中職組“網絡安全”賽項資源任務書樣題③

第十七屆山東省職業院校技能大賽 中職組“網絡安全”賽項資源任務書樣題③ 模塊A 基礎設施設置與安全加固(200分)A-1 登錄安全加固&#xff08;Windows, Linux&#xff09;A-2 Nginx安全策略&#xff08;Linux&#xff09;A-3日志監控&#xff08;Windows&#xff09;A-4中間件…

鯤鵬麒麟安裝Kafka-v1.1.1

因項目需要在鯤鵬麒麟服務器上安裝Kafka v1.1.1&#xff0c;因此這里將安裝配置過程記錄下來。 環境說明 # 查看系統相關詳細信息 [roottest kafka_2.12-1.1.1]# uname -a Linux test.novalocal 4.19.148 #1 SMP Mon Oct 5 22:04:46 EDT 2020 aarch64 aarch64 aarch64 GNU/Li…

群控系統服務端開發模式-應用開發-登錄退出發送郵件

一、登錄成功發送郵件 在根目錄下app文件夾下controller文件夾下common文件夾下&#xff0c;修改Login.php&#xff0c;代碼如下 <?php /*** 登錄退出操作* User: 龍哥三年風水* Date: 2024/10/29* Time: 15:53*/ namespace app\controller\common; use app\controller\Em…

[游戲開發] Unity中使用FlatBuffer

什么是FlatBuffer 官網&#xff1a; GitHub - google/flatbuffers: FlatBuffers: Memory Efficient Serialization LibraryFlatBuffers: Memory Efficient Serialization Library - google/flatbuffershttps://github.com/google/flatbuffers 為什么用FloatBuffer&#xff0c…

MySQL其一,概念學習,可視化軟件安裝以及增刪改查語句

目錄 MySQL 1、數據庫的概念 2、數據庫分類 3、MySQL的安裝 4、安裝過程中的問題 DataGrip的使用&#xff1a; SQLynx的使用&#xff1a; 5、編寫SQL語句 6、DDL語句 7、DML 新增數據&#xff1a; 刪除數據&#xff1a; 修改數據&#xff1a; MySQL SQL其實是一門…

05 在 Linux 使用 AXI DMA

DMA簡介 DMA 是一種采用硬件實現存儲器與存儲器之間或存儲器與外設之間直接進行高速數據傳輸的技術&#xff0c;傳輸過程無需 CPU 參與&#xff08;但是CPU需要提前配置傳輸規則&#xff09;&#xff0c;可以大大減輕 CPU 的負擔。 DMA 存儲傳輸的過程如下&#xff1a; CPU 向…

linux 安裝 vsftpd 服務以及配置全攻略,vsftpd 虛擬多用戶多目錄配置,為每個用戶配置不同的使用權限

linux 安裝 vsftpd 服務以及配置全攻略&#xff0c;vsftpd 虛擬多用戶多目錄配置&#xff0c;為每個用戶配置不同的使用權限。 linux 安裝 vsftpd 服務以及配置全攻略 FTP 是 File Transfer Protocol 的簡稱&#xff0c;用于 Internet 上的控制文件的雙向傳輸。同時&#xff0…

SQL語句在MySQL中如何執行

MySQL的基礎架構 首先就是客戶端&#xff0c;其次Server服務層&#xff0c;大多數MySQL的核心服務都在這一層&#xff0c;包括連接、分析、優化、緩存以及所有的內置函數&#xff08;時間、日期、加密函數&#xff09;&#xff0c;所有跨存儲引擎功能都在這一層實現&#xff1…

ragflow連不上ollama的解決方案

由于前期wsl默認裝在C盤&#xff0c;后期部署好RagFlow后C盤爆紅&#xff0c;在連接ollama的時候一直在轉圈圈&#xff0c;問其他人沒有遇到這種情況&#xff0c;猜測是因為內存不足無法加載模型導致&#xff0c;今天重新在E盤安裝wsl 使用wsl裝Ubuntu Win11 wsl-安裝教程 如…

力扣-漢明距離

1.兩個整數之間的 漢明距離 指的是這兩個數字對應二進制位不同的位置的數目。 給你兩個整數 x 和 y&#xff0c;計算并返回它們之間的漢明距離。 看到這題&#xff0c;當然想到了按位異或^,并且c內置了計算二進制數中1數量的函數__builtin_popcount() class Solution { publ…

關于成功插入 SQLite 但沒有數據的問題

背景 技術棧&#xff1a;SpringBoot Mybatis-flex SQLite 項目中集成了SQLite&#xff0c;配置如下&#xff1a; spring:datasource:url: jdbc:sqlite::resource:db/project.dbdriver-class-name: org.sqlite.JDBC在進行測試時&#xff0c;使用Mybatis-flex往表中插入數據&…

C#常見錯誤—空對象錯誤

System.NullReferenceException&#xff1a;未將對象引用設置到對象的實例 在C#編程中&#xff0c;System.NullReferenceException是一個常見的運行時異常&#xff0c;其錯誤信息“未將對象引用設置到對象的實例”意味著代碼試圖訪問一個未被初始化或已被設置為null的對象的成…

沁恒CH32V208藍牙串口透傳例程:修改透傳的串口;UART-CH32V208-APP代碼分析;APP-CH32V208-UART代碼分析

從事嵌入式單片機的工作算是符合我個人興趣愛好的,當面對一個新的芯片我即想把芯片盡快搞懂完成項目賺錢,也想著能夠把自己遇到的坑和注意事項記錄下來,即方便自己后面查閱也可以分享給大家,這是一種沖動,但是這個或許并不是原廠希望的,盡管這樣有可能會犧牲一些時間也有哪天原…

Scala的隱式對象

Scala中&#xff0c;隱式對象&#xff08;implicit object&#xff09;是一種特殊的對象&#xff0c;它可以使得其成員&#xff08;如方法和值&#xff09;在特定的上下文中自動可用&#xff0c;而無需顯式地傳遞它們。隱式對象通常與隱式參數和隱式轉換一起使用&#xff0c;以…

矩陣的乘(包括乘方)和除

矩陣的乘分為兩種&#xff1a; 一種是高等代數中對矩陣的乘的定義&#xff1a;可以去這里看看包含矩陣的乘。總的來說&#xff0c;若矩陣 A s ? n A_{s*n} As?n?列數和矩陣 B n ? t B_{n*t} Bn?t?的行數相等&#xff0c;則 A A A和 B B B可相乘&#xff0c;得到一個矩陣 …

DVWA親測sql注入漏洞

LOW等級 我們先輸入1 我們加上一個單引號&#xff0c;頁面報錯 我們看一下源代碼&#xff1a; <?php if( isset( $_REQUEST[ Submit ] ) ) { // Get input $id $_REQUEST[ id ]; // Check database $query "SELECT first_name, last_name FROM users WHERE user_id …