当前位置: 首页 > news >正文

架构设计 - Nginx Proxy Cache 缓存配置

摘要:

web 应用业务缓存通常3级:

一级缓存:JVM 本地缓存

二级缓存:Redis集中式缓存

三级缓存:Nginx Proxy Cache 缓存 或 Nginx Lua 缓存

本文主要分享 Nginx Proxy Cache 缓存

缓存方式举例 配置 nginx.conf 文件

    ......# 配置cache缓存节点 levels可以有2级目录 key2_zone键值对存储区域 inactive文件有效期 max_size文件容量proxy_cache_path /data/nginx/tmp-test levels=1:2 keys_zone=tmp-test:100m inactive=7d max_size=10g;# 配置https访问server {listen  8443 ssl;server_name order.abc.com;ssl_certificate /data/order/fullchain.pem;ssl_certificate_key /data/order/privkey.pem;ssl_session_timeout 1d;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;location / {#将IP和端口改为DataEase服务器的访问地址和端口proxy_pass   http://172.16.16.16:9995/;server_name_in_redirect off;# 缓存节点proxy_cache tmp-test;proxy_cache_key $request_uri;# 只有请求返回以下状态码才会缓存 有效期是7天proxy_cache_valid 200 206 304 302 7d;# websocket 代理proxy_http_version      1.1;proxy_set_header        Upgrade         $http_upgrade;proxy_set_header        Connection "upgrade";proxy_redirect             http:// https://;proxy_set_header           Host $host:$server_port;proxy_set_header           X-Real-IP $remote_addr;proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header           X-Forwarded-Proto $scheme;}}
......

实际项目应用

在Nginx端配置proxy cache缓存节点并非不常见,但在某些场景下可能会较少使用,这主要取决于特定的使用场景和配置需求。以下是一些可能导致这种情况的原因:

资源考虑

  • 内存和磁盘空间:配置proxy cache需要分配一定的内存(用于缓存元数据)和磁盘空间(用于存储实际缓存内容)。如果服务器资源有限,或者不希望将过多资源用于缓存,可能会选择不配置或配置较小的缓存。
  • 性能考虑:虽然缓存可以提高性能,但过多的缓存数据也可能导致缓存失效、查找和更新等操作的性能下降。

数据源特性

  • 动态内容:对于经常变动的动态内容,如实时数据、用户信息等,配置缓存可能不是最佳选择,因为缓存内容很快就会过时。
  • 第三方服务:当Nginx代理的是第三方服务时,可能由于服务协议、响应头或其他因素导致缓存策略不易控制或无效。

配置复杂性

  • 配置细节:Nginx的proxy cache配置相对复杂,需要考虑多个指令和参数,如proxy_cache_pathproxy_cacheproxy_cache_valid等,这可能会增加配置和管理的复杂性。
  • 缓存失效:缓存失效策略需要根据实际情况进行配置,如基于时间、请求次数等,这可能需要额外的考虑和配置。

默认行为

  • Nginx默认不缓存:Nginx默认不会为代理的请求启用缓存,这可能是因为Nginx希望将缓存控制权留给用户或后端服务器。

其他缓存策略

  • CDN缓存:在实际应用中,可能会使用CDN(内容分发网络)进行缓存,CDN通常具有更丰富的缓存策略和功能,可以更有效地处理缓存相关问题。
  • 应用层缓存:有些应用可能会在自己的代码中实现缓存逻辑,以更直接地控制缓存内容和行为。
  • Nignx Lua缓存:以高效的协程机制可以实现远超过 Nginx Proxy Cache 的效果。Nginx Proxy Cache还是以读取/写入磁盘文件的方式来实现数据缓存,速度和效率与内存相比相差很多。

安全性考虑

  • 缓存敏感数据可能会带来安全风险,因此,在某些情况下,为了避免敏感数据的泄露,可能会选择不配置或谨慎配置Nginx的proxy cache。

综上所述,是否在Nginx端配置proxy cache缓存节点取决于多种因素,包括资源考虑、数据源特性、配置复杂性、默认行为、其他缓存策略以及安全性考虑等。在实际应用中,需要根据具体情况进行权衡和选择。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 胡说八道(24.6.17)——STM32以及通信杂谈
  • vue修改node_modules打补丁步骤和注意事项_node_modules 打补丁
  • 数据库系统概述选择简答概念复习
  • 如何实现ElementUI动态表头?
  • TikTok账号养号的流程分享
  • windows修改hosts文件、windows刷新dns缓存
  • 【硬件开发】振铃
  • PHP框架详解:Symfony框架讲解
  • [C#]使用深度学习算法opencvsharp部署RecRecNet广角图像畸变矫正校正摄像广角镜头畸变图像
  • [保姆级教程]uniapp实现页面路由配置
  • 基于python的三维装箱可视化
  • ArcGIS Pro SDK (四)框架 2
  • Harbor本地仓库搭建002_Harbor负载均衡节点搭建_nginx安装配置_harbor安装---分布式云原生部署架构搭建002
  • pdf怎么压缩到2m以内或5m以内的方法
  • 贪心算法——赶作业(C++)
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • android图片蒙层
  • ECMAScript入门(七)--Module语法
  • HTTP中GET与POST的区别 99%的错误认识
  • IP路由与转发
  • js如何打印object对象
  • PHP的类修饰符与访问修饰符
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Zsh 开发指南(第十四篇 文件读写)
  • 二维平面内的碰撞检测【一】
  • 前端学习笔记之观察者模式
  • 使用agvtool更改app version/build
  • 项目管理碎碎念系列之一:干系人管理
  • 用jQuery怎么做到前后端分离
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 自制字幕遮挡器
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 通过调用文摘列表API获取文摘
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • # Maven错误Error executing Maven
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #{}和${}的区别?
  • (10)ATF MMU转换表
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (转)socket Aio demo
  • .NET C# 配置 Options
  • .net framework profiles /.net framework 配置
  • .Net mvc总结
  • .Net Web项目创建比较不错的参考文章
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .Net程序帮助文档制作
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @ResponseBody
  • @Transaction注解失效的几种场景(附有示例代码)