Nginx缓存之代理缓存配置

        Nginx 的缓存功能是集成在代理模块中的,当启用缓存功能时,Nginx 将请求返回的响应数据持久化在服务器磁盘中,响应数据缓存的相关元数据、有效期及缓存内容等信息将被存储在定义的共享内存中。当收到客户端请求时,Nginx 会在共享内存中搜索缓存信息,并把查询到的缓存数据从磁盘中快速交换到操作系统的页面缓存(Page Cache)中,整个过程的速度非常快。
        Nginx 缓存会缓存加载进程(Cache Loader Process)和库存管理(Cade Manger Process)进行管理。缓存加载进程只在 Nginx 启动时执行一次,将上一次 Nginx 运行时缓存有关数据的元数据加载到共享内存区域,加载结束后它将自动退出。
        为了避免缓存因加载缓存降低 Nginx 的性能,缓存加载进程会采用周期性迭代式加载缓存数据,且迭代加载的时间间隔、每次最大消耗时间和每次迭代加载的数量可以由配置指令 proxy_cache_path 的指令值参数设置。缓存管理进程则周期性的检查缓存的状态,负责清除在一段时间内未被访问的缓存文件,并对超出缓存存储最大值的缓存对象进行删除,缓存管理进程的删除操作也是周期性迭代执行的,并由配置指令 proxy_cache_path 的指令值参数设置。

1.缓存处理流程及状态

        当客户端发起请求到 Nginx 缓存服务器时,Nginx 会先检查本地是否已经有该请求的内容缓存,有的话会直接返回数据,缓存请求状态会被标记为 HIT,否则该缓存请求状态就会被标记为 MISS。
        如果指令 proxy_cache_lock 未被启用,则会直接向源服务器发起访问请求,如果被启用,则会先确认当前请求是不是第一个发起的请求,若不是,则等待;若是,则向源服务器发起访问请求。服务器响应数据返回后会先被存储在本地缓存,然后再返回给客户端。缓存处理流程如下图所示。

        Nginx 在处理缓存过程中,客户端请求的缓存请求状态会被记录在变量 $upstream_cache_status 中,缓存请求状态如下表所示:

缓存请求状态状态说明
MISS缓存未命中,从源服务器获取响应数据
HIТ缓存命中,从本地缓存获取数据
BYPASSproxy_cache_bypass 生效,直接从源服务器获取响应数据
REVALIDATED启用 proxy_cache_revalidate 指令后,缓存将被源服务器服务端验证为有效状态,从本地缓存获取数据
EXPIRED缓存过期,从源服务器获取响应数据
UPDATING正在更新缓存,当前返回为旧缓存内容,在配置指令 proxy_cache_use_stale updating 时会存在该状态
STALE源服务器无法正常返回更新的内容,当前返回为旧缓存内容,在配置指令 proxy_cache_use_stale error timeout 时会存在该状态
SCARCE缓存节点被查询次数未达到配置指令 proxy_cache_min_uses 设定的值时,对此请求无法启用缓存机制,将从源服务器获取响应数据

2.缓存配置指令 

        Nginx 缓存配置指令如下表所示:

指令名称指令值格式默认值指令说明
proxy_storeon、off 或 stringoff设置是否将被代理服务器的响应数据在本地按照请求的 URL 建立目录结构镜像。当指令值为 on 时,存储路径的设置为 root 或 alias,响应数据先存储到临时文件后再复制或重命名保存
proxy_store_accessusers:permissions...user:rw设置创建本地镜像存储路径的文件夹权限
proxy_cachezone 或 offoff设置一个用以做缓存管理的共享内存区域
proxy_cache_pathpath 参数--设置缓存文件存储路径及参数。缓存数据以 URL 的 MD5 值命名存储在缓存目录中
proxy_cache_keystring$scheme
$proxy_host
$request_uri
设置缓存的关键字
proxy_cache_lockon 或 offoff是否启用缓存锁指令。当启用缓存锁机制时,每次只允许个向被代理服务器转发的请求,按照 proxy_cache_key 指令设置的标识增添新的缓存数据,其他相同的请求则将等待缓存中出现响应数据或该缓存锁被释放,其等待时间由 proxy_cache_lock_timeout 指令设置
proxy_cache_lock_agetime5s缓存锁有效时间。当启用缓存锁机制时,如果一个请求在该指令的时间内没有完成响应数据缓存的添加,缓存锁将会被释放,获取缓存锁的请求将被转发给被代理服务器由代理服务器负责生成缓存
proxy_cache_lock_timeouttime5s缓存锁等待超时时间。当启用缓存锁机制时,等待超过该时间的请求将直接从被代理服务器中读取响应,该请求响应不会被添加到缓存中
proxy_cache_max_range_offsetnumber--用以设置范围请求(byte-range)请求时的最大偏移量。超出该偏移量的请求将直接从被代理服务器中读取响应数据
proxy_cache_methodsGET 或 HEAD 或 POST...GET HEAD指定可被缓存的请求方法
proxy_cache_convert_headon 或 offon开启或禁用将请求方法 HEAD 转换为 GET,如果该功能被禁用,配置指令 proxy_cache_key 的指令值应该添加变量 $request_method
proxy_cache_min_usesnumberstring1响应数据超过设置请求次数后将被缓存
proxy_no_cachestring...--设置不生成缓存数据的条件,指定字符串的值不为空或不等于 0,则不将当前请求返回的响应数据进行缓存
proxy_cache_bypassstring...--设置不使用缓存数据的条件,指令值中至少有一个值不为空或不等于 0 时,当前请求不使用缓存中的响应数据,直接访问源应用服务器。它可以与 proxy_no_cache 指令一起使用
proxy_cache_revalidateon 或 offoff启用该指令后,如果缓存过期,则通过在 HTTP 头中添加字段属性 If-Modified-Since 和 If-None-Match 的方式发送给源服务器,从而进行缓存的服务端校验
proxy_cache_use_staleerror、timeout、
invalid_header、
updating、http_500、
http_503、http_403、
http_404、http_429、
off...
off当出现指定的条件时,使用已经过期的缓存响应数据
proxy_cache_background_updateon 或 offoff允许使用过期的响应数据时,设置是否启用后台子请求更新过期缓存,同时向客户端返回过期的缓存响应数据
proxy_cache_valid[code...] time--根据响应码设置缓存时间
proxy_cache_purgestring...--定义清除缓存请求条件,若指定的字符串不为空或 0,则将 proxy_cache_key 设置的标识的缓存进行清除。清除成功则返回状态码 204,仅商业版有效

关于上表有以下几点需要说明。

  • 该模块指令列表中指令的指令域范围都是 http、server、location;
  • proxy_cache_path 指令只能编写在 http 指令域中;
  • proxy_cache 与 proxy_store 指令不能在同一指令域中同时使用;
  • proxy_cache_path 指令值参数如下表所示。
参数名参数格式默认值参数说明
levelslevels--设置缓存目录的层级及命名方式
use_temp_pathon 或 offon参数值为 on,则使用 proxy_temp_path 设置作为临时文件目录。参数值为 off 时,则使用缓存目录做临时文件目录
keys_zonename:size--设置存储 cache_key 的共享内存 zone 及大小,1MB 可以存储 8000 个 key
inactivetime10 分钟设置时间内未被访问的缓存将被删除
max_sizesize--缓存数据的最大值,超出这个最大值时,缓存管理进程将执行迭代更新,即删除最近最少使用的缓存
manager_filesnumber100缓存管理进程执行一次迭代更新时,删除文件的最大数
manager_sleeptime50ms缓存管理进程每次更新缓存的迭代间隔时间
manager_thresholdtime200ms缓存管理进程执行一次迭代更新时,最大执行的时间,单位为 ms
loader_thresholdtime200ms缓存加载进程每次迭代加载时,加载数据的最大执行时间
loader_filesnumber100缓存加载进程每次迭代加载时,加载缓存目录中缓存数据的最大文件数
loader_sleeptime50ms缓存加载进程每次迭代的间隔时间
purgeron 或 offoff是否启用缓存清除功能。仅商业版有效
purger_filesnumber10每次迭代清除时,清除缓存目录中缓存数据的最大文件数。仅商业版有效
purger_sleeptime50ms连续两次迭代清除间的最少间隔时间。仅商业版有效
purger_thresholdtime50ms每次迭代清除时,最大执行的时间。仅商业版有效

3.HTTP 范围请求

        范围请求允许服务器只发送请求的一部分响应数据给客户端,通常对大文件传输时,用以实现断点续传、多线程下载等功能。若服务端响应信息头中包含字段 Accept-Ranges:bytes,则表示服务端支持范围请求,且节点范围的单位为字节(bytes)。
        在 Nginx 缓存默认配置下,Nginx 处理完一个大文件的初始请求后,后续的用户请求必须等待整个文件下载结束并存入缓存后才可以继续被处理,整个过程非常耗时。为解决这个问题,Nginx 提供了 ngx_http_slice_module 模块,用以缓存范围请求的支持。该模块将文件分成更小的切片(slices),客户端每个范围请求覆盖特定的切片,如果该范围没有缓存,则从源服务器请求后存入缓存,否则就从缓存中返回数据。
        http_slice 模块配置指令如下表所示:

名称切片指令
指令slice
作用域http、server、location
默认值0
指令说明设定范围请求切片的大小。默认为不启用该功能

         配置样例如下:

location / {
    slice             1m;                               # 切片大小为1MB
    proxy_cache       cache;                            # 缓存共享内存名称为cache
    proxy_cache_key   $uri$is_args$args$slice_range;    # 设置缓存key
    proxy_set_header  Range $slice_range;               # 添加头字段Range的字段值为
                                                        # $slice_range
    proxy_cache_valid 200 206 1h;                       # 响应状态码为200及206的内容缓存有效期为1h
    proxy_pass        http://localhost:8000;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/721751.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

联邦学习周记|第四周

论文:Active Federated Learning 链接 将主动学习引入FL,每次随机抽几个Client拿来train,把置信值低的Client概率调大,就能少跑几次。 论文:Active learning based federated learning for waste and natural disast…

全新AI图像擦处理工具上线,手机电脑版资源合集下载

下载地址: 安卓手机版: 点击下载 苹果手机版: 点击下载 电脑版(支持Mac和Windows): 点击下载 图像处理技术在当今迅速发展,为了满足广大用户的需求,我们推出了一款强大的图像优化…

京东健康·全球医疗AI创新大赛开启!32万奖金池等你来拿!

京东健康全球医疗AI创新大赛是由京东健康发起,以探索医疗行业前沿技术与创新应用为导向、携手产学研各界力量,通过AI创新促进医疗服务行业高质量发展的一场大赛。 本次大赛聚焦“睡眠监测智能算法”与“医疗大模型创新应用”两个课题方向,面…

【ARM-Linux篇】POSIX消息队列

System V消息队列POSIX 消息队列主 要 函 数#include <sys/msg.h> int msgget(key_t key, int oflag) int msgsnd(int msqid, const void * ptr, size_t length, int flag) ssize_t msgrcv (int msqid, void *ptr, size_t length, long type, int flag) int msgctl(int m…

HTML入门教程:深度解析HTML,开启你的前端技术之旅

一、引言 HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是前端开发的基础&#xff0c;它负责构建网页的结构和内容。作为前端技术栈的基石&#xff0c;HTML的掌握程度直接影响到网页的开发效率和用户体验。本教程将带你从零开始&#xff…

计算机网络——传输层重要协议(TCP、UDP)

一、常见名词解释 IP地址&#xff1a;IP地址主要用于标识网络主机、其他网络设备&#xff08;如路由器&#xff09;的网络地址&#xff0c;即IP地址用于定位主机的网络地址&#xff1b; IP地址是一个32位的二进制数&#xff0c;通常被分割为4个 8位⼆进制数&#xff08;也就是…

vite项目配置高德api定位功能

项目场景&#xff1a; 用vite项目集成了一个H5页面的小程序&#xff0c;需要调用高德的定位API&#xff0c;在浏览器中测试的时候&#xff0c;出现了一系列定位失败的情况。 问题1 Get ipLocation failed、Geolocation permission denied 本地http访问下&#xff0c;定位失败…

切割游戏介绍

简介 上大学时&#xff0c;在学校实验室里玩过一个貌似使用VC写的小游戏&#xff0c;一个小球在界面上四处游荡&#xff0c;玩家使用鼠标切割背景&#xff0c;将背景切割剩余到一定的百分比后&#xff0c;就胜利了&#xff0c;后边的背景图会全部展示出来。 使用qt的qml技术&a…

C++类与对象、类的6个默认成员函数、构造函数、析构函数等的介绍

文章目录 前言一、类的6个默认成员函数二、构造函数1. 概念2. 特性1. 无参构造函数2. 带参构造函数3. 编译器默认生成的无参构造函数 3. 构造函数的初始化4. 默认构造函数 三、析构函数1. 概念2. 特性3. 编译器默认生成的析构函数的作用4. 构造函数的使用 总结 前言 C类与对象…

Scikit-Learn支持向量机回归

Scikit-Learn支持向量机回归 1、支持向量机回归1.1、最大间隔与SVM的分类1.2、软间隔最大化1.3、支持向量机回归1.4、支持向量机回归的优缺点2、Scikit-Learn支持向量机回归2.1、Scikit-Learn支持向量机回归API2.2、支持向量机回归初体验2.3、支持向量机回归实践(加州房价预测…

PLC通过Profibus协议转Modbus协议网关接LED大屏通讯

一、背景 Modbus协议和Profibus协议是两种常用于工业控制系统的通信协议&#xff0c;它们在自动化领域中起着重要的作用。Modbus是一种串行通信协议&#xff0c;被广泛应用于各种设备之间的通信&#xff0c;如传感器、执行器、PLC等。而Profibus则是一种现场总线通信协议&…

随想录Day63 | 单调栈 42. 接雨水 84.柱状图中最大的矩形

随想录Day63 | 单调栈 42. 接雨水 84.柱状图中最大的矩形 42. 接雨水 题目链接 42 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 第一次提交 class Solution { public:int trap(vector<int>…

Harbor本地仓库搭建002_Harbor负载均衡节点搭建_nginx安装配置_harbor安装---分布式云原生部署架构搭建002

负载均衡的机器. 可以看到上面是安装nginx的过程 首先去编辑一下yum仓库地址,配置一下nginx的仓库地址 然后这个是配置的内容 然后在进行安装之前最好yum makecache fast 更新一下缓存,这样安装的时候 会安装最新的包 然后就可以安装nginx yum -y install nginx 然后去

解锁微信客服的潜力:提升客户满意度与忠诚度

随着全球数字化进程的加速&#xff0c;企业如何有效利用数字化工具提升服务质量和客户满意度&#xff0c;成为了企业国际化、数字化出海的关键。在这一大背景下&#xff0c;微信客服以其卓越的功能和广泛的用户基础&#xff0c;成为了企业数字化转型的重要助力。 一、微信客服…

西班牙的人工智能医生

西班牙的人工智能医生 西班牙已将自己定位为欧洲负责任人工智能领域的领导者。然而&#xff0c;透明度的承诺往往落空&#xff0c;公共监督机构一直难以获得对司法和福利系统中部署的算法的有效访问。这使得西班牙成为一种日益增长的趋势的一部分&#xff0c;即政府悄悄地试验预…

fastapi修改docs文档页面favicon.ico图标

如下图&#xff0c;文档页面默认使用的是tiangolo大神的Logo 如果打开的标签比较多&#xff0c;就不好区分了&#xff0c;想要修改这个logo&#xff0c;可以用fastapi-cdn-host一行代码搞定 fastapi_cdn_host.patch_docs(app, favicon_url/static/logo.png) 例如&#xff1a;…

SSM名城养老院管理系统-计算机毕业设计源码03948

目 录 摘要 1 绪论 1.1选题的意义 1.2研究现状 1.3Vue.js 主要功能 1.4ssm框架介绍 2 1.5论文结构与章节安排 3 2 名城养老院管理系统分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据增加流程 5 2.3.2数据修改流程 5 2.3.3数据删除流程 5 2.3 系统功能分析 5 2.3.…

YOLOv10改进 | 主干篇 | YOLOv10引入FasterNeT替换Backbone

1. FasterNeT介绍 1.1 摘要: 为了设计快速神经网络,许多工作一直致力于减少浮点运算(FLOP)的数量。 然而,我们观察到,FLOP 的减少并不一定会导致延迟的类似程度的减少。 这主要源于每秒浮点运算 (FLOPS) 效率低下。 为了实现更快的网络,我们重新审视流行的算子,并证明…

字节豆包大模型API吞吐、函数调用能力、长上下文能力测试总结

离开模型能力谈API价格都是耍流氓&#xff0c;豆包大模型作为API最便宜的模型之一&#xff0c;最近向个人开发者开放了&#xff0c;花了300元和一些时间对模型的API吞吐、函数调用能力、长上下文能力等进行了深度测试&#xff0c;看看它的能力究竟适合做 AI 应用开发吗&#xf…

Mysql事务传播机制

都知道事务传播机制有七种&#xff0c;但是都是 面试背的&#xff0c;实际应用中从来没注意过。这次同事写的时候没注意就给我留了个坑。 有这样一个情况&#xff0c;事务A里边嵌套了事务B&#xff0c;在事务的传播机制上&#xff0c;同事写成了PROPAGATION_REQUIRES_NEW&#…