Nginx——缓存配置

article/2025/5/6 18:14:40

缓存配置

对于一个含有大量内容的网站来说,随着访问量的增多,对于经常被用户访问的内容,若每一次都要到后端服务器中获取,会给服务器造成很大的压力。为此,利用反向代理服务器对访问频率较多的内容进行缓存,有利于节省后端服务器的资源。Nginx 提供了两种Web缓存方式,一种是永久性缓存,另一种是临时性缓存。

缓存实现原理

Web缓存服务器位于内容源Web服务器和客户端之间,当客户端用户访问一个URL时,Web缓存服务器就会请求相应的内容源Web服务器,并将响应的信息缓存至内存或磁盘;然后,当下一个请求到来时,如果访问的是相同的URL, Web缓存服务器会直接将已缓存的内容输出给客户端,而不用再次向内容源Web服务器发送请求。

利用缓存服务器,可以有效降低内容源服务器和数据库的负载,提高用户访问的响应速度:
在这里插入图片描述

当用户向Web缓存服务器中发送请求时,缓存服务器要检查一下当前URL请示是否已经存在缓存,若存在则直接返回给用户。否则,向内容源Web服务器发送请求,获取响应结果,将其缓存并返回给发送请求的客户端。

永久缓存配置

Nginx提供的proxy_store指令可以用于将内容源服务器响应的内容缓存到本地,若不手动删除,该缓存文件会一直生效。因此,永久缓存方式适用于缓存网站中几乎不会更改的一些内容。

准备服务器:

Nginx使用80端口反向代理Tomcat8080端口。

缓存配置:

server {listen 80;server_name localhost;location / {root cache;proxy_store on;proxy_store_access user:rw group:rw all:r;proxy_temp_path cache_tmp;proxy_pass http://localhost:8080;}
}

上述第5行配置,用于指定缓存文件的保存目录,这里将其设定在Nginx安装目录下的cache目录中,需要用户手动创建,创建后修改此目录的用户权限,要求与Nginx工作进.程的用户相同(如nobody)。第6行用于开启本地缓存,第7行设置缓存的读写规则,第8行设置反向代理时接收的数据临时存储文件的目录,该目录会由Nginx在配置生效后自动创建。
在这里插入图片描述
需要注意的是,上述配置虽然能够将文件缓存在本地,但是客户端每次请求时,Nginx仍然会向后端服务器获取文件。为了避免这种情况的发生,需要先判断缓存文件是否存在,具体配置如下:

#利用正则表达式匹配缓存目录中的文件、目录或符号链接是否存在
if (!-e $request_filename){proxy_pass http://localhost:8080;
}#注意:if和(之间有一个空格!!!!

上述配置中,!-e表示检查一个文件、目录或符号链接是否存在,当不存在时就执行{}中的指令。其中,内置变量$request filename表示当前请求的文件路径或URI。例如,当客户端向Web缓存服务器发送http://192. 168. 78.3/test/index. html请求时,变量$request_filename的值为/test/index.html,如果缓存目录cache中没有用户请求的缓存文件,Nginx会到后端服务器http://192. 168. 78. 128/test/index. html中请求,然后将响应结果进行缓存。

验证测试:

在tomcat下的webapp目录下新建edu目录,新建一个a.html文件:

<h1>tomcat9 8080</h1>

访问:http://localhost/edu/a.html
在这里插入图片描述

进入cache目录查看缓存命中结果:
在这里插入图片描述

临时缓存配置

Nginx服务器中,还有一种使用proxy_cache指令设置的临时缓存配置,它采用md5算法将请求链接进行哈希(hash)后,根据具体配置生成缓存文件目录,保存响应的数据。

缓存配置:

#代理临时目录
proxy_temp_path /usr/local/nginx/proxy_tmp_dir;
#web缓存目录和参数设置
proxy_cache_path /usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1m max_size=500m;

上述第2行指令,用于设置缓存服务器(192.168.78.3)接收内容源服务器响应内容时使用的临时目录。第4行指令,用于设置缓存目录。其中,proxy_ cache_ path 指令相关参数的含义如下。

  • /usr/local/nginx/proxy_cache_ dir参数:表示用户自定义的缓存文件保存目录。
  • levels参数:表示缓存目录下的层级目录结构,它是根据哈希后的请求URL地址创建的,目录名称从哈希后的字符串结尾处开始截取。
    假设哈希后的请求链接地址为af7098a15e430326197 ee01516fdace0,则levels= 1:2表示,第1层子目录的名称是长度为1的字符0,第2层子目录的名称是长度为2的字符 ce。
  • keys_ zone参数:指定缓存区名称及大小,例如,cache_one:50m表示缓存区名称为cache_ one, 在内存中的空间是50MB。
  • inactive 参数:表示主动清空在指定时间内未被访问的缓存。例如,1m清空在1分钟内被访问过的缓存,1h标识1小时,1d标识1天等。
  • max_size参数:标识指定磁盘空间代销。例如,500m、10g。

需要注意的是,Nginx在进行缓存时,首先会被写人proxy_ temp_ path 指定的临时目录中,因此建议proxy_ cache_ path 和proxy_ temp_ path 指令设置的目录应在同一个文件系统中,避免不同文件系统之间的磁盘I/O消耗。

在server块中添加临时缓存的相关配置:

server {listen 80;server_name localhost;#增加两个响应头信息,用于获知访问的服务器地址与缓存是否成功add_header X-Via $server_addr;add_header X-Cache $upstream_cache_status;location / {#设置缓存区域名称proxy_cache cache_one;#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希proxy_cache_key $host$uri$is_args$args;#对不同的HTTP状态码设置不同的缓存时间proxy_cache_valid 200 10m; #200缓存10分钟proxy_cache_calid 304 1m;  #304缓存1分钟proxy_cache_calid 301 302 1h; #301、302缓存1小时proxy_cache_valid any 1m; #其他未设置的状态码缓存1分钟#设置反向代理proxy_pass http://localhost:8080;}
}

上述第9行,用于设置缓存区域名称;第11行用于设置hash的Key值组成规则,在省略的情况下,Nginx将使用默认的Key值组成规则。第13~16行设置,通过proxy_ cache_valid指令对不同的HTTP状态码设置不同的缓存时间,该指令的第1个参数表示状态码,第2个参数表示缓存时间。
关于proxy_cache_key指令参数中使用的具体内置变量的说明如下:

  • $host:服务器的域名,如 test. ng. test。
  • $uri:域名和参数之间的部分,如/index.html。
  • $is_ args:有URL参数时,则值为?,否则为空字符串。
  • $args: 保存URL参数,如a=1&b=2,没有参数时为空字符串。
  • 利用$is_ _args和$args,可以实现根据不同URL参数缓存不同文件。

为了便于在浏览器端查看是否正确缓存,第5~6行配置通过add_ header 指令添加了两个响应消息头。其中X-Via表示服务器地址,利用内置变量$server_addr 获取,另一个X-Cache表示资源缓存状态,利用内置变量$upstream_ cache_ status获取。$upstream_cache_ status的返回值有7个,如表:

在这里插入图片描述

需要注意的是,对于用户的请求,仅在处理成功的情况下,才会在浏览器的ResponseHeaders中查看到add_header指令设置的响应消息头。

常用缓存配置指令:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/pALldKH8.shtml

相关文章

React 前端 Nginx 缓存配置

React 前端 Nginx 缓存配置 最新开发钉钉微应用&#xff0c;上线后发现 2 个问题&#xff1a; 1.每次更新后&#xff0c;需要用户手动刷新获取最新的 HTML 和最新的 js&#xff0c;经常被客户吐槽为什么 bug 还没改&#xff0c;其实早已经改了&#xff0c;客户手机上跑的还是…

nginx缓存设置(expires)

一.expires功能说明 nginx缓存的设置可以提高网站性能&#xff0c;对于网站的图片&#xff0c;尤其是新闻网站&#xff0c;图片一旦发布&#xff0c;改动的可能是非常小的&#xff0c;为了减小对服务器请求的压力&#xff0c;提高用户浏览速度&#xff0c;我们可以通过设置ngin…

nginx缓存配置及开启gzip压缩

一&#xff1a;nginx缓存配置 在前一篇文章&#xff0c;我们理解过http缓存相关的知识点, 请看这篇文章. 今天我们来学习下使用nginx服务来配置缓存的相关的知识。 nginx配置缓存的优点&#xff1a;可以在一定程度上&#xff0c;减少服务器的处理请求压力。比如对一些图片&am…

nginx配置浏览器缓存(强缓存、协商缓存、无缓存)

&#x1f3c6;nginx下载安装及使用 &#x1f49b;nginx下载安装 下载地址&#xff1a;点击下载nginx 根据系统选择要下载的安装包&#xff0c;这里最好选择稳定版&#xff08;stable version&#xff09;。 下载好后解压该zip&#xff0c;将解压后的文件夹放在自己喜欢的目录…

nginx proxy_cache 缓存配置

前言&#xff1a; 由于本人工作原因&#xff0c;涉及到网络直播领域&#xff0c;其中视频的回放下载&#xff0c;涉及到了一些视频下载方面的技术。针对于一个完整视频的下载&#xff0c;目前市面上的主流做法是&#xff0c;先将整个视频流切片&#xff0c;存储到文件服务器中&…

Nginx缓存配置,以及nginx ngx_cache_purge模块的使用,ngx_slowfs_cache模块构建本地缓存

最近接触到Nginx缓存&#xff0c;网上查了下&#xff0c;这里记录一下&#xff0c;学习学习。 1 缓存 Web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL&#x…

Nginx高级(九):nginx缓存配置、nginx proxy_cache缓存模块指令详解

一、nginx缓存 1、什么是缓存&#xff1f; 1.缓存的基本概述 缓存的基本思想是利用客户端访问的时间局限性&#xff0c;将客户端访问过的内容做一个副本&#xff0c;在一定时间内存放到本地&#xff0c;当改数据下次被访问时&#xff0c;不必连接到后端服务器反复去查询数据…

Nginx缓存配置(简易实现CDN功能)

环境推荐使用openresty&#xff0c;自带了挺多模块的&#xff0c;如果直接使用nginx&#xff0c;需要对缺少的模块进行添加&#xff0c;添加教程参照百度或者OpenResty教程 1、本地站点ETag缓存 示范开启静态文件缓存 环境&#xff1a; nginx -v nginx version: openresty/1.15…

Nginx缓存配置教程

问题引出 假设某电商平台商品详情页需要实现 700 QPS&#xff08;假设宽带是千兆宽带&#xff09; 千M局域网宽带网卡速率按照1000进位&#xff0c;所以1Gbps1,000,000,000bps125,000,000Bps≈119.21MB/s 当达到500QPS 的时候很难继续压测上去。 假设每个页面主体渲染所需要的…

Nginx缓存配置

Nginx缓存配置 一、Nginx缓存介绍二、具体操作三、实例1 一、Nginx缓存介绍 Nginx 不仅仅是一个 Web 服务器&#xff0c;它还可以作为一个缓存服务器使用。通过 Nginx 缓存&#xff0c;可以对一些静态资源或者数据更新频率较低的后端服务做缓存&#xff0c;降低静态资源或后端…

nginx 缓存配置详解都是干货

一、缓存类型 1、服务端缓存 2、代理缓存 3、客户端缓存 4、代理缓存的工作流程&#xff1a; 二、代理缓存配置语法 1、代理缓存路径 配置语法 Syntax: proxy_cache_path path [levelslevels] [use_temp_pathon|off] keys_zonename:size [inactivetime] [max_sizesize] […

微信那些词语发不出去

在写文章的时候&#xff0c;会遇到以下3种情况&#xff1a; 1、你所编辑的图文消息可能含有敏感内容&#xff0c;你可以继续保存或发布该图文消息&#xff08;发布等待时长约3-4小时&#xff09;&#xff0c;若保存或发布后&#xff0c;经核实含有敏感内容的&#xff0c;将可能…

微信公众号文章存在敏感词被屏蔽

在写文章的时候&#xff0c;会遇到以下3种情况&#xff1a; 1、你所编辑的图文消息可能含有敏感内容&#xff0c;你可以继续保存或发布该图文消息&#xff08;发布等待时长约3-4小时&#xff09;&#xff0c;若保存或发布后&#xff0c;经核实含有敏感内容的&#xff0c;将可能…

微信公众平台有哪些敏感词不准发

在写文章的时候&#xff0c;会遇到以下3种情况&#xff1a; 1、你所编辑的图文消息可能含有敏感内容&#xff0c;你可以继续保存或发布该图文消息&#xff08;发布等待时长约3-4小时&#xff09;&#xff0c;若保存或发布后&#xff0c;经核实含有敏感内容的&#xff0c;将可能…

微信公众号敏感词检测工具

在写文章的时候&#xff0c;会遇到以下3种情况&#xff1a; 1、你所编辑的图文消息可能含有敏感内容&#xff0c;你可以继续保存或发布该图文消息&#xff08;发布等待时长约3-4小时&#xff09;&#xff0c;若保存或发布后&#xff0c;经核实含有敏感内容的&#xff0c;将可能…

微信公众号文章是否违规怎么检测?

在写文章的时候&#xff0c;会遇到以下3种情况&#xff1a; 1、你所编辑的图文消息可能含有敏感内容&#xff0c;你可以继续保存或发布该图文消息&#xff08;发布等待时长约3-4小时&#xff09;&#xff0c;若保存或发布后&#xff0c;经核实含有敏感内容的&#xff0c;将可能…

微信小程序发布需要校验敏感信息(内容、图片)-Java后端实现

精选30云产品&#xff0c;助力企业轻松上云&#xff01;>>> 前端只需要将图片和内容传过来即可 pom依赖 HttpClient的依赖和json转换的依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><versio…

SpringBoot调用微信小程序敏感词拦截接口

SpringBoot调用微信小程序敏感词拦截接口 获取接口调用凭据 | 微信开放文档 (qq.com) 在调用微信小程序安全识别接口时需要先拿到&#xff0c;小程序的token令牌&#xff0c;需要调用下面这个接口 https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&am…

微信小程序通过云函数调用安全api,实现敏感词校验

如题&#xff0c;话不多说&#xff0c;直接上代码 1.首先需要在小程序中引入云函数框架 1.1在project.config.json中添加设置&#xff0c;同时在小程序根目录新建cloudfunctions文件夹 "cloudfunctionRoot": "cloudfunctions/" 1.2在app.json中添加设置…

php屏蔽词库,PHP调用微信过滤敏感词汇API

之前写过一篇过滤敏感词汇的文章,但是最近临近国庆,小程序提高了安全能力得检测,审核变得更加严格,要求自定义昵称、头像、签名等必须要有过滤敏感词汇得机制,严格上之前那边文章也可以过滤,但是具体微信过滤得内容就不得而知了,所以,今天就分享一下PHP利用微信小程序的…