首页 > 系统相关 >nginx高并发优化之缓存配置

nginx高并发优化之缓存配置

时间:2022-11-17 16:01:48浏览次数:27  
标签:缓存 http 并发 cache nginx proxy key NGINX

一、配置

http {
proxy_cache_path /app/cache/ levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;
upstream backend {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name localhost;
location /tomcat {
proxy_cache proxy_cache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
proxy_cache_min_uses 5;
proxy_cache_key $host$uri$is_args$args;
add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_pass http://backend/;
}
}

二、说明

Nginx提供了一种方法来缓存从后端服务器的内容,对于许多请求无需连接到上游。

1、proxy_cache_path
proxy_cache_path /app/cache/ levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;
a1.用于缓存的本地磁盘目录是/app/tianyun.me/cache
a2.levels在/app/cache/设置了一个两级层次结构的目录。将大量的文件放置在单个目录中会导致文件访问缓慢,所以针对大多数部署,我们
推荐使用两级目录层次结构
如果levels参数没有配置,则NGINX会将所有的文件放到同一个目录中。
a3.keys_zone设置一个共享内存区,该内存区用于存储缓存键和元数据,有些类似计时器的用途。将键的拷贝放入内存可以使NGINX在不检
索磁盘的情况下快速决定一个请求是`HIT`还是`MISS`,这样大大提高了检索速度。一个1MB的内存空间可以存储大约8000个key,那么上
面配置的10MB内存空间可以存储差不多80000个key。
a4.max_size设置了缓存的上限(在上面的例子中是10G)。这是一个可选项;如果不指定具体值,那就是允许缓存不断增长,占用所有可用
的磁盘空间。当缓存达到这个上线,处理器便调用cache manager来移除最近最少被使用的文件,这样把缓存的空间降低至这个限制之下。
a5.inactive指定了项目在不被访问的情况下能够在内存中保持的时间。在上面的例子中,如果一个文件在60分钟之内没有被请求,则缓存
管理将会自动将其在内存中删除,不管该文件是否过期。该参数默认值为10分钟(10m)。注意,非活动内容有别于过期内容。NGINX不会
自动删除由缓存控制头部指定的过期内容(本例中Cache-Control:max-age=120)。过期内容只有在inactive指定时间内没有被访问的情
况下才会被删除。如果过期内容被访问了,那么NGINX就会将其从原服务器上刷新,并更新对应的inactive计时器。
a6.NGINX最初会将注定写入缓存的文件先放入一个临时存储区域,
use_temp_path=off命令指示NGINX将在缓存这些文件时将它们写入同一个目录下。
我们强烈建议你将参数设置为off来避免在文件系统中不必要的数据拷贝,use_temp_path在NGINX1.7版本和NGINX Plus R6中有介绍

2、proxy_cache proxy_cache;
使用名为proxy_cache的对应缓存配置

3、proxy_cache_valid
proxy_cache_valid 200 304 12h;
#对httpcode为200,304的缓存为12小时
proxy_cache_valid any 10m;
#设置不同响应码的缓存时间,除了上面,其他的存十分钟

4、proxy_cache_key $host$uri$is_args$args;
#定义缓存唯一key通过唯一key来进行hash存取

5、add_header Nginx-Cache "$upstream_cache_status";
#add_header缓存命中情况如何在http头中体现,以及在nginx日志中查看

6、proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#出现502-504错误,会跳过此台服务器访问下一台服务器

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

标签:缓存,http,并发,cache,nginx,proxy,key,NGINX
From: https://blog.51cto.com/u_13236892/5860852

相关文章

  • nginx部署tp5只能访问首页问题
    在配置文件增加以下代码:#访问路径的文件不存在则重写URL转交给ThinkPHP处理if(!-e$request_filename){ rewrite^/(.*)$/index.php/$1last; break;}示例:se......
  • Redis缓存中的数据和数据库不一致
    首先关于两者数据的一致性包含有两种情况:(1)缓存中有数据时,那数据库中的数据要和缓存中的数据相同;(2)缓存中没有数据时,数据库中的数据必须是最新的。如果不符合以上两种......
  • 12 张图看懂 CPU 缓存一致性与 MESI 协议,真的一致吗?
    本文已收录到 GitHub·AndroidFamily,有Android进阶知识体系,欢迎Star。技术和职场问题,请关注公众号[彭旭锐]进Android面试交流群。前言大家好,我是小彭。在......
  • Redis 和 memache 缓存的区别
    1.数据类型 Redis数据类型丰富,支持setlisthash等类型 memcache支持简单数据类型,需要客户端自己处理复杂对象 2.持久性 redis支持数据落地持久化存储,并不是所有的数据......
  • nginx rewrite中的break和last
    nginxrewrite中的break和last 两个指令用法相同,但含义不同,需要放到rewrite规则的末尾,用来控制重写后的链接是否继续被nginx配置执行(主要是rewrite、return指令......
  • nginx location
    location顺序/优先级:(location=)>(location完整路径)>(location^~路径)>(location~,~*正则顺序)>(location部分起始路径)>(/)解释说明(下面会有详解):=......
  • 解决单台服务器作为客户端请求高并发时端口被占用完的情况
    今天领导下达性能指标800吞吐量的任务,只给我一台服务器作为jmeter的客户端,当吞吐量压到400吞吐量左右的时候一直报错,且服务端又没有收到错误的响应,猜测是jmeter客户端问题......
  • Nginx服务器之负载均衡策略(6种)
    一、关于Nginx的负载均衡在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。二、Nginx负载......
  • 第2-3-4章 上传附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛
    目录5.3接口开发-上传附件5.3.1接口文档5.3.2代码实现5.3.3接口测试5.3接口开发-上传附件第2-1-2章传统方式安装FastDFS-附FastDFS常用命令第2-1-3章docker-comp......
  • 我把 CPU 三级缓存的秘密,藏在这 8 张图里
    本文已收录到 GitHub·AndroidFamily,有Android进阶知识体系,欢迎Star。技术和职场问题,请关注公众号[彭旭锐]进Android面试交流群。前言大家好,我是小彭。在......