🗄🗄 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 工作原理模式工作流程连接发起方主动模…