Nginx缓存配置教程

article/2025/6/4 1:43:51
  • 问题引出

假设某电商平台商品详情页需要实现 700 QPS(假设宽带是千兆宽带)
千M局域网宽带网卡速率按照1000进位,所以1Gbps=1,000,000,000bps=125,000,000Bps≈119.21MB/s
当达到500QPS 的时候很难继续压测上去。
假设每个页面主体渲染所需要的图片的占用150KB,那么500QPS,500 x 150 / 1000 = 75M/s,再加上各种网络请求和网络传输,几乎达到宽带的性能瓶颈,所以必须减少内网通信。

  • 解决方案
    在这里插入图片描述

在这里插入图片描述

缓存

缓存就是数据交换的缓冲区(称作:Cache),当用户要获取数据的时候,会先从缓存中去查询获取数据,如果缓存中有就会直接返回给用户,如果缓存中没有,则会发请求从服务器重新查询数据,将数据返回给用户的同时将数据放入缓存,下次用户就会直接从缓存中获取数据。
在这里插入图片描述

Nginx的web缓存服务

Nginx是从0.7.48版开始提供缓存功能。Nginx是基于Proxy Store来实现的,其原理是把URL及相关组合当做Key,在使用MD5算法对Key进行哈希,得到硬盘上对应的哈希目录路径,从而将缓存内容保存在该目录中。它可以支持任意URL连接,同时也支持404/301/302这样的非200状态码。Nginx即可以支持对指定URL或者状态码设置过期时间,也可以使用purge命令来手动清除指定URL的缓存。
在这里插入图片描述

Nginx缓存设置的相关指令

Nginx的web缓存服务主要是使用ngx_http_proxy_module模块相关指令集来完成。

proxy_cache_path

该指定用于设置缓存文件的存放路径

语法proxy_cache_path path [levels=number] keys_zone=_name_:_size_ [inactive=time][max_size=size];
默认值
位置http
  • path:缓存路径地址,如:

/home/nginx/proxy_cache

  • levels: 指定该缓存空间对应的目录,最多可以设置3层,每层取值为1|2

    如 : levels=1:2   缓存空间有两层目录,第一层是1个字母,第二层是2个字母
    

举例说明:
song通过MD5加密以后的值为 683eb609607a439b0561dcbb4c8329e8
levels=1:2 最终的存储路径为/usr/local/proxy_cache/8/9e
levels=2:1:2 最终的存储路径为/usr/local/proxy_cache/e8/9/32
levels=2:2:2 最终的存储路径为??/usr/local/proxy_cache/e8/29/83

  • keys_zone:用来为这个缓存区设置名称和指定大小,如:

keys_zone=song:200m 缓存区的名称是song,大小为200M,1M大概能存储8000个keys
inactive:指定缓存的数据多次时间未被访问就将被删除,如:
inactive=1d 缓存数据在1天内没有被访问就会被删除
max_size:设置最大缓存空间,如果缓存空间存满,默认会覆盖缓存时间最长的资源,如:
max_size=20g

  • 案例
proxy_cache_path /home/nginx/proxy_cache levels=2:2:2 keys_zone=song:200m inactive=20m max_size=1k;

proxy_cache

用来开启或关闭代理缓存,如果是开启则自定使用哪个缓存区来进行缓存。

语法proxy_cache zone_name|off;
默认值proxy_cache off;
位置http、server、location

zone_name:指定使用缓存区的名称

proxy_cache_key

用来设置web缓存的key值,Nginx会根据key值MD5哈希存缓存。

语法proxy_cache_key key;
默认值proxy_cache_key s c h e m e scheme schemeproxy_host$request_uri;
位置http、server、location

proxy_cache_valid

用来对不同返回状态码的URL设置不同的缓存时间

语法proxy_cache_valid [code …] time;
默认值
位置http、server、location

如:proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
为200和302的响应URL设置10分钟缓存,为404的响应URL设置1分钟缓存
proxy_cache_valid any 1m;
对所有响应状态码的URL都设置1分钟缓存

proxy_cache_min_uses

用来设置资源被访问多少次后被缓存

语法proxy_cache_min_uses number;
默认值proxy_cache_min_uses 1;
位置http、server、location

proxy_cache_methods

用来设置缓存哪些HTTP方法

语法proxy_cache_methods GET|HEAD|POST;
默认值proxy_cache_methods GET HEAD;
位置http、server、location

默认缓存HTTP的GET和HEAD方法,不缓存POST方法。

配置案例

Nginx代理tomcat访问静态资源,访问到的资源缓存到指定目录

http{proxy_cache_path /home/nginx/proxy_cache levels=2:2:2 keys_zone=song:200m inactive=20m max_size=1k;server {listen 8079;server_name localhost;# 缓存配置proxy_cache song;proxy_cache_key song;proxy_cache_min_uses 1;proxy_cache_methods HEAD GET POST;proxy_cache_valid 200 1d;# 加一个头,方便在header中观察是否命中缓存add_header  Nginx-Cache "$upstream_cache_status";  # 反向代理配置upstream tomcat{server 192.168.28.177:8080;}location /proxy {proxy_pass http://tomcat/js;}}
}

访问http://192.168.28.177:8079/proxy/user.js
观察/home/nginx/proxy_cache目录结构

在这里插入图片描述

  • 命中缓存
    在这里插入图片描述

缓存清除

删除对应的缓存目录

rm -rf /home/nginx/proxy_cache/...

使用第三方扩展模块

使用ngx_cache_purge删除Nginx缓存.
安装ngx_cache_purge模块

  • 下载

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz

  • 解压

tar -xvf ngx_cache_purge-2.3.tar.gz

  • 安装

参考《Nginx基本概念》热部署

  • 删除

在这里插入图片描述

Nginx设置资源不缓存

  • 问题引出

不是所有的数据都适合进行缓存。对于一些经常发生变化的数据。如果进行缓存的话,就很容易出现访问到的数据不是服务器真实的数据。所以对于这些资源在缓存的过程中就需要进行过滤,不进行缓存。

proxy_no_cache

 用来定义数据不缓存的条件。
语法proxy_no_cache string …;
默认值
位置http、server、location
  • 配置实例

proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;

proxy_cache_bypass

 用来设置不从缓存中获取数据的条件。
语法proxy_cache_bypass string …;
默认值
位置http、server、location
  • 配置实例

proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
上述两个指令都有一个指定的条件,这个条件可以是多个,并且多个条件中至少有一个不为空且不等于"0",则条件满足成立(或关系)。里面使用到了三个变量,分别是 c o o k i e n o c a c h e 、 cookie_nocache、 cookienocachearg_nocache、$arg_comment

这三个参数分别代表的含义是

$cookie_nocache

 当前请求的**cookie中键的名称**为nocache对应的值

a r g n o c a c h e 和 arg_nocache和 argnocachearg_comment

 当前请求的参数中**属性名****为nocache和comment对应的属性值**
  • 案例
log_format params $cookie_nocache | $arg_nocache | $arg_comment;
server{listen  8081;server_name localhost;location /{access_log logs/access_params.log params;# 设置cookie的nocache属性add_header Set-Cookie 'nocache=999';root html;index index.html;}
}
  • 访问http://192.168.28.177:8069/?nocache=111&comment=222

日志打印:999|111|222

  • 访问http://192.168.28.177:8069/?nocache=111

日志打印:999|111|-

  • 访问http://192.168.28.177:8069/

日志打印:999|-|-

案例实现

设置访问的文件是js,不缓存资源

server{listen  8080;server_name localhost;location / {if ($request_uri ~ /.*\.js$){# 如果访问的文件是js,设置一个变量nocacheset $nocache 1;}proxy_no_cache $nocache $cookie_nocache $arg_nocache $arg_comment;proxy_cache_bypass $nocache $cookie_nocache $arg_nocache $arg_comment;}
}

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

相关文章

Nginx缓存配置

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

nginx 缓存配置详解都是干货

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

微信那些词语发不出去

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

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

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

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

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

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

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

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

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

微信小程序发布需要校验敏感信息(内容、图片)-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利用微信小程序的…

微信小程序敏感词过滤

当你的小程序有用户提交&#xff08;评论、文章、图片&#xff09;时&#xff0c;如果你的代码没有过滤敏感词汇&#xff0c;将会审核不通过&#xff0c;幸好官方提供了API&#xff0c;方便了很多&#xff0c;废话不多说&#xff0c;干&#xff01; 本文只有文字过滤 本文采用…

企业微信又更新了!聊天敏感词、下载直播回放视频、聊天文件支持10GB...

企业微信版本已更新至3.0.36&#xff0c;还没有更新的速速去升级啦&#xff01; 一、客户联系功能增强 企业可设置聊天敏感词&#xff0c;设置后将下载到成员的企业微信。当成员发送给客户的消息包含敏感词时&#xff0c;将予以提示或发送失败。 登录企业微信管理后台在客户联…

Java实现微信小程序文本内容敏感词检查

1.背景2.策略3.实现1. 调用auth.getAccessToken&#xff0c;获取接口调用凭证2. 调用security.msgSecCheck检测文本内容 4.遇到的问题5.工具类完整代码6.使用方式 1.背景 发布小程序的时候&#xff0c;没有通过审核&#xff0c;审核结果为 提示要完善内容审核机制。 2.策略 …

普通微信如何设置敏感词监控?以及企业微信敏感词监控拦截

微信作为一个广泛使用的社交平台&#xff0c;拥有庞大的用户群体&#xff0c;这使得微信营销在企业的市场推广中扮演着重要的角色。通过微信营销&#xff0c;企业可以获得一定程度的业绩增长。然而&#xff0c;随着企业规模的扩大&#xff0c;微信营销也面临着一些挑战和盲区。…

微信小程序安全系列——文本内容安全识别

前言 相信很多朋友跟我遇到过相同的问题&#xff0c;就是在开发一些笔记或者博客的时候&#xff0c;会遇到一些过滤敏感、时政、黄、赌、毒这类词汇、句子等这种棘手问题。 今天我们看一下微信小程序提供的文本安全内容识别&#xff0c;也可以减少一些我们的工作量。通过微信…

常用的文本去重代码:

常用的文本去重代码&#xff1a; 本代码用到了simhash库&#xff08;https://github.com/yanyiwu/simhash&#xff09; import re import os from pathlib import Path import json from simhash import Simhashdef droplike(lines):def distance(v1, v2, f64):x (v1 ^ v2) …

simhash海量文本去重的工程化

https://yuerblog.cc/2018/05/30/simhash-text-unique-arch/ simhash算法是google发明的&#xff0c;专门用于海量文本去重的需求&#xff0c;所以在这里记录一下simhash工程化落地问题。 下面我说的都是工程化落地步骤&#xff0c;不仅仅是理论。 背景 互联网上&#xff0…

自然语言处理学习笔记5:去重处理之使用SimHash进行海量文本去重

摘要: 传统的Hash算法只负责将原始内容尽量均匀随机地映射为一个签名值&#xff0c;原理上仅相当于伪随机数产生算法。传统的hash算法产生的两个签名&#xff0c;如果原始内容在一定概率下是相等的&#xff1b;如果不相等&#xff0c;除了说明原始内容不相等外&#xff0c;不再…

python编写url文本去重和url探测存活一体化工具

因为项目需要&#xff0c;长时间使用360的quake和奇安信的hunter进行资产收集。但是收集到的资产很多无法访问&#xff0c;hunter的都是200。所以写了一个简单的脚本&#xff0c;让quake和hunter进行对比&#xff0c;去掉重复部分&#xff0c;然后再探测存活&#xff0c;存活ur…