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

Nginx缓存基础

1 nginx缓存的流程

在这里插入图片描述
客户端需要访问服务器的数据时,如果都直接向服务器发送请求,服务器接收过多的请求,压力会比较大,也比较耗时;而如果在nginx缓存一定的数据,使客户端向基于nginx的代理服务器发送请求,可以有效节省时间。
如图所示,基于nginx缓存,客户端访问的流程是:客户端向nginx发送请求url。nginx检查自身缓存目录里有无要访问的数据,如果有则将缓存的数据发送给客户端。如果没有,则nginx向服务器发送请求,向服务器请求数据;服务器将数据发送给nginx后,nginx自身缓存的同时将数据转发给客户端。那么下一次有客户端有相同的数据请求时,就可以像有的情况一样,直接由nginx发送给客户端。

2 必备基础知识

2.1 listen和server_name

用户请求发来之后,同server{}下的listen和server_name进行匹配,如果匹配成功,那么将请求交给当前server里的location块来处理。
这里的listen和server_name自然是nginx所在服务器的端口和地址。如果nginx部署在内网服务器,虽然客户端发送请求的是外部地址和端口,但是这里还是要设置成内网的地址。

2.2 location块

2.2.1基本配置

server块可以同时配置多个location

server{listen port;server_name localhost;location /{}location /abc{}...
}

location:用来设置请求的URI

2.2.2 匹配

uri变量是待匹配的请求字符串,可以不包含正则表达式,也可以包含正则表达式,那么nginx服务器在搜索匹配location的时候,是先使用不包含正则表达式进行匹配,找到匹配度最高的一个,然后在通过包含正则表达式的进行匹配,如果能匹配到直接访问,匹配不到,就使用刚才匹配度最高的那个location来处理请求。
=:用于不包含正则表达式的uri前,必须与指定的模式精确匹配

/:只要以ip:port/abc开头的全部都能访问

location /abc{}
location =/abc{}
# 精确匹配
# ip:port/abc、ip:port/abc?p1=TOM可以匹配
# ip:port/abcd不能匹配

~:正则匹配

location ~/abc{}

root:

location /abc{root html;# root为资源存放的目录inedx index.html;}

2.2.3 地址匹配优先级

location / {
}
因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求 比如访问 / 和 /abc, 则 / 匹配, /abc 也匹配,\n但后面前缀路径会和最长字符串优先匹配(最长匹配)
location /abc/ {
}
匹配任何以 /abc/ 开头的地址,匹配符合以后,还要继续往下搜索其它 location只有其它 location后面的前缀路径没有匹配到时,才会采用这一条
location /abc/def {
}
匹配任何以 /abc/def 开头的地址,匹配符合以后,还要继续往下搜索其它 location只有其它 location后面的前缀路径没有匹配到时,才会采用这一条。
因此匹配优先级:精准=>一般/
都是一般的情况下,哪个location后跟的地址长度长,哪个优先级高,比如:
location /abc/def {}>location /abc {}>location / {}

3 指令解析

3.1 proxy_cache_path指令

3.1.1 语法

proxy_cache_path path [levels=a:b:c] keys_zone=zone_name:zone_size [inactive=time] [max_size=sizes]

path可以是/usr/local/proxy_cache

3.1.2 levels

levels可以将字符串密文与缓存目录进行结合,指定缓存空间对应的目录,最多可以设置三层,每层取值为1或2:
levels=1:2 缓存空间有两层目录,一层是1个字母,二层是2个字母
如果字符串密文为dsciwbdciow87y8hwdh29
那么levels=1:2最终的存储目录为:/usr/local/proxy_cache/9/h2

3.1.3 keys_zone

可以指定缓存区的名称与大小
keys_zone=impar:300m
缓存区名称为impar,大小为300m.

3.1.4 inactive

指定缓存的数据多久未被访问会被删除的时间
inactive =2d
2d表示2天

3.1.5 max_size

设置最大的缓存空间,如果缓存空间存满,会覆盖目前缓存时间最长的数据
max_size=10g

3.1.6 配置位置

http中,server外

3.3 proxy_cache

该指令用来开启或关闭缓存,如果是开启则自定使用哪个缓存区来缓存
开启

proxy_cache zone_name

关闭

proxy_cache off

位置:http、server、location里

3.4 proxy_cache_key

该指令用来设置web缓存中的key值,nginx会根据key值的MD5进行哈希缓存
位置同上

3.5 proxy_cache_valid

该指令用来对不同返回状态码的URL设置不同的缓存时间
位置同上

proxy_cache_valid 404 1m;
proxy_cache_valid 202 302 1m;
proxy_cache_valid any 1m;

1该设置从上到下进行,如果在上面的步骤中被设置(如404,202,302),就不会更改,最后的any只能设置除404,202,302以外的状态。
2nginx缓存代理中常有情况:nginx尚未缓存某数据,但是客户端发出请求该数据的信息,nginx往往只能先回复404。但是稍后nginx从服务器请求到了该数据后,客户端再请求该数据那按照原理必然要返回该数据,而不是404。因此,之前请求对应的返回状态码应该有一个“限定有效的时间”。这就需要靠proxy_cache_valid来设置了。

3.6 proxy_cache_min_uses

该指令用来设置资源被访问多少次后会被缓存

proxy_cache_min_uses number

位置同上

3.7 proxy_cache_methods

该指令用户设置缓存哪些http方法

proxy_cache_methods method

method可选方式为GET, HEAD, POST.
默认方式为GET, HEAD。
位置同上。

4 add_header 可选项

1下面的可选项不是必须的,只是方便在测试的时候查看是否命中缓存

add_header nginx-cache $upstream_cache_status;

效果:
在这里插入图片描述
2add_header Access-Control-Allow-Methods
明确了客户端所要访问的资源允许使用的方法或方法列表,可以是"GET,OPTIONS,POST,HEAD,PUT,DELETE"

3add_header Accept-Ranges
此字段的值表示可用于定义范围的单位,可以是"bytes"

4add_header Access-Control-Allow-Origin "*";
表示服务器可以接受所有的请求源(Origin),即接受所有跨域的请求。

5add_header Access-Control-Allow-Headers
可支持的请求首部名字。请求头会列出所有支持的首部列表,用逗号隔开。
示例:

add_header Access-Control-Allow-Headers "*";

注意以下这些特定的首部是一直允许的:Accept, Accept-Language, Content-Language, Content-Type,这些被称作simple headers,无需特意声明它们。

参考

[1]nginx教程nginx教程
[2]Access-Control-Allow-HeadersAccess-Control-Allow-Headers
[3]Access-Control-Allow-Origin
[4]Accept-Ranges
[5]NGINX缓存详解(二)之服务端缓存

相关文章:

Nginx缓存基础

1 nginx缓存的流程 客户端需要访问服务器的数据时,如果都直接向服务器发送请求,服务器接收过多的请求,压力会比较大,也比较耗时;而如果在nginx缓存一定的数据,使客户端向基于nginx的代理服务器发送请求&…...

【数据结构】Lambda

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈数据结构 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 Lambda表达式 1. 背景1.1 语法1.2 函…...

力扣labuladong——一刷day28

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣380. O(1) 时间插入、删除和获取随机元素二、力扣710. 黑名单中的随机数 前言 常数时间删除-查找数组中的任意元素,且随机访问概率一致 如果…...

2023年CCF非专业级别软件能力认证第二轮 (CSP-S)提高级C++语言试题

2023年CCF非专业级别软件能力认证第二轮 (CSP-S)提高级C语言试题 编程题第 1 题 问答题 密码锁(lock) 题目描述 小Y有一把五个拨圈的密码锁。如图所示,每个拨圈上是从0到9的数字。每个拨圈都是从0到9的循环&#xf…...

华为ensp:静态默认路由

静态路由 到r2 上的系统视图模式 下一跳为1.1.1.2 ip route-static 192.168.2.0 255.255.255.0 1.1.1.2 如果找2网段下一跳为1.1.1.2接口 默认路由 到r3上做的是默认路由 ip route-static 0.0.0.0 0 1.1.1.1 所有的流量去找1.1.1.1 查看效果 只要做完完整的路由就可…...

xss 通过秘籍

终极测试代码 <sCr<ScRiPt>IPT>OonN"\/(hrHRefEF)</sCr</ScRiPt>IPT> 第一关&#xff08;没有任何过滤&#xff09; 使用终极测试代码&#xff0c;查看源码 发现没有任何过滤&#xff0c;直接使用javascrupt中的alert弹框 <script>aler…...

Kibana使用Watcher监控服务日志并发送飞书报警(Markdown)

Watcher是什么 Kibana Watcher 是 Elasticsearch 的监控和告警工具&#xff0c;它允许你设置和管理告警规则以监控 Elasticsearch 数据和集群的状态。Kibana Watcher 可以监测各种指标和数据&#xff0c;然后在满足特定条件时触发警报。它提供了一种强大的方式来实时监控 Elas…...

Flutter笔记:光影动画按钮、滚动图标卡片组等

Flutter笔记 scale_design更新&#xff1a;光影动画按钮、滚动图标卡片组 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263…...

【论文】利用移动性的比例公平蜂窝调度测量和算法

&#xff08;一支笔一包烟&#xff0c;一节论文看一天 &#xff09;&#xff08;一张纸一瓶酒&#xff0c;一道公式推一宿&#xff09; 摘要1. 引言2. 相关工作3. 模型和问题公式4. 预测FPF调度 &#xff08; P F &#xff09; 2 S &#xff08;PF&#xff09;^2S &#xff08;…...

内存条选购注意事项(电脑,笔记本)

电脑内存条的作用、选购技巧以及注意事项详解 - 郝光明的个人空间 - OSCHINA - 中文开源技术交流社区 现在的电脑直接和内存条联系 电脑上的所有输入和输出都只能依靠内存条 现在买双条而不是单条 买两个相同的内存条最好 笔记本先分清是低电压还是标准电压&#xff0c;DD…...

ChatGPT 宕机?OpenAI 将中断归咎于 DDoS 攻击

您的 ChatGPT 已关闭吗&#xff1f;您是否遇到 ChatGPT 问题&#xff0c;例如连接问题或遇到“长响应时出现网络错误”&#xff1f;– ChatGPT 遭受了一系列 DDoS 攻击&#xff0c;显然是由匿名苏丹组织策划的。 OpenAI 的 ChatGPT 是一款流行的人工智能聊天机器人&#xff0c;…...

go单元格测试

编写单元测试&#xff08;Unit Test&#xff09;是一种测试方法&#xff0c;用于验证代码中的单个功能单元&#xff08;通常是函数或方法&#xff09;是否按照预期工作。以下是编写单元测试的一般步骤&#xff1a; 1. 创建测试文件&#xff1a;在项目的测试目录中创建一个新的…...

JavaScript理解表达式和语句的含义

JavaScript中的表达式和语句都是用于完成特定计算或操作的语言构件&#xff0c;但它们有着不同的含义和用途&#xff1a; 表达式(expression)是用来计算并返回一个值的代码片段&#xff0c;可以包含变量、数值、函数调用、运算符等。表达式的运算结果可以被赋值给变量、作为函数…...

Visual Studio导入Wiinform项目文件,引用显示黄色感叹号

参考博客 第一步&#xff1a; 开程序包管理控制台 vs->工具->NuGet包管理器->程序包管理控制台 Update-Package –reinstall 第二步&#xff1a; 删除.csproj 文件片段 // 整个模块全部删除 包括标签中所含有的任何内容 <Target Name"EnsureNuGetPackage…...

深入研究SVN代码检查的关键工具:svnchecker vs. SonarQube,选择最适合你的代码检查工具

目录 一、SVN代码检查(整合svnchecker)1、创建SVN代码库2、下载安装包3、修改SVN配置4、新建代码检查配置文件(名称自定义)5、hooks目录添加配置文件6、设置只对Java文件进行检查7、测试 二、SonarQube代码检测1、什么是SonarQube2、MySQL数据库的安装3、SonarQube服务端软件安…...

博客积分上一万一千了

博客积分上一万一千了 充满自信&#xff0c;继续前进。...

docker 构建并运行 python项目

此处不重述docker安装及基本命令&#xff0c;可参考另一篇文章centos7 安装 docker_centos7 docker network rm-CSDN博客文章浏览阅读111次。1、 1.1 docker 官网 Empowering App Development for Developers | DockerLearn how Docker helps developers bring their ideas to …...

django建站过程(4)创建文档显示页面

django建站过程&#xff08;4&#xff09;创建文档显示页面 创建文档显示页面项目主文件夹schoolapps中的文件urls.py在APP“baseapps”中创建url.py文件编写视图模板继承bootstrap创建head.html创建doclist.html创建docdetail.html 使用 markdown 编辑器安装模块Model 模型的d…...

uniapp本地存储的几种方式

在UniApp中&#xff0c;你可以使用本地存储来保存和获取数据&#xff0c;以便在应用的不同页面之间共享数据或在应用关闭后仍然保存数据。UniApp提供了两种主要的本地存储方式&#xff1a;uni.setStorage 和 uni.getStorage&#xff0c;以及 uni.removeStorage 用于删除数据。这…...

74hc595模块参考

74hc595模块参考 8位串行并行输出&#xff08;SIPO&#xff09;移位寄存器 使用74HC595移位寄存器扩展微控制器上的输出引脚数量。如果你需要扩充输入引脚的数量那么你需要74HC165移位寄存器。 SER&#xff08;串行输入&#xff09;引脚用于一次一位地将数据发送到移位寄存器…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG

TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码&#xff1a;HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...