Nginx 缓存集成、清除、设置不缓存资源

文章目录

  • 前言
    • [1. web缓存服务](#1. web缓存服务)
      • [1.1 原理](#1.1 原理)
      • [1.2 指令](#1.2 指令)
        • [1.2.1 proxy_cache_path](#1.2.1 proxy_cache_path)
        • [1.2.2 proxy_cache](#1.2.2 proxy_cache)
        • [1.2.3 proxy_cache_key](#1.2.3 proxy_cache_key)
        • [1.2.4 proxy_cache_valid](#1.2.4 proxy_cache_valid)
        • [1.2.5 proxy_cache_min_uses](#1.2.5 proxy_cache_min_uses)
        • [1.2.6 proxy_cache_methods](#1.2.6 proxy_cache_methods)
    • [2. 缓存案例](#2. 缓存案例)
    • [3. 缓存的清除](#3. 缓存的清除)
      • [3.1 删除对应的缓存目录](#3.1 删除对应的缓存目录)
      • [3.2 使用第三方扩展模块ngx_cache_purge,并使用proxy_cache_purge指令](#3.2 使用第三方扩展模块ngx_cache_purge,并使用proxy_cache_purge指令)
    • [4. 设置资源不缓存](#4. 设置资源不缓存)
      • [4.1 proxy_no_cache](#4.1 proxy_no_cache)
      • [4.2 proxy_cache_bypass](#4.2 proxy_cache_bypass)
      • [4.3 设置不缓存资源的配置方案](#4.3 设置不缓存资源的配置方案)

前言

  使用缓存的优点在于减少数据传输,节省网络流量,加快响应速度;减轻服务器压力;提供服务端的高可用性;缺点在于数据的不一致问题;增加成本

  Nginx作为Web缓存服务器,介于客户端和应用服务器之间,当用户通过浏览器访问一

个URL时,web缓存服务器会去应用服务器获取要展示给用户的内容,将内容缓存到自己的服务器上,当下一次请求到来时,如果访问的是同一个URL,web缓存服务器就会直接将之前缓存的内容返回给客户端


1. web缓存服务

1.1 原理

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

1.2 指令

1.2.1 proxy_cache_path

  语法:

xml 复制代码
proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time][max_size=size];

path :缓存路径地址
levels : 指定该缓存空间对应的目录,最多可以设置3层,每层取值为1|2(MD5加密后的密文从后往前取值1到2个字符)
keys_zone :用来为这个缓存区设置名称和指定大小
inactive :指定缓存的数据多次时间未被访问就将被删除
max_size :设置最大缓存空间,如果缓存空间存满,默认会覆盖缓存时间最长的资源

  实例:

xml 复制代码
http {
proxy_cache_path /usr/local/proxy_cache keys_zone=cz:200m levels=1:2:1 inactive=1d max_size=20g;
}
1.2.2 proxy_cache

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

1.2.3 proxy_cache_key

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

1.2.4 proxy_cache_valid

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

1.2.5 proxy_cache_min_uses

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

1.2.6 proxy_cache_methods

设置缓存哪些HTTP方法


2. 缓存案例

在http块中设置

xml 复制代码
proxy_cache_path /usr/local/proxy_cache keys_zone=cz:200m levels=1:2:1 inactive=1d max_size=20g;
xml 复制代码
 server {
     listen   12305;
      location ~* .\.(png|jpg|css|html|js)$ {
    proxy_cache cz;
    proxy_cache_key $scheme$proxy_host$request_uri;
    proxy_cache_min_uses 1;
    proxy_cache_valid 200 1d;
    proxy_cache_valid any 1m;
    add_header nginx-cache "$upstream_cache_status";
    proxy_pass http://172.18.25.50:12306;
      }
  }
  server {
     listen   12306;
      location ^~ /bdosp {
      alias  /mnt/disk1/home/ZLQ_YL/myUI/bdops_ui/bdopsDist/bdosp;
      index  index.html index.htm;
      }
  }

3. 缓存的清除

3.1 删除对应的缓存目录

xml 复制代码
rm -rf /usr/local/proxy_cache

3.2 使用第三方扩展模块ngx_cache_purge,并使用proxy_cache_purge指令


4. 设置资源不缓存

4.1 proxy_no_cache

  定义不将数据进行缓存的条件

示例:

xml 复制代码
proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;

4.2 proxy_cache_bypass

  设置不从缓存中获取数据的条件

示例:

xml 复制代码
proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;

$cookie_nocache指当前请求的cookie中键的名称为nocache对应的值
$arg_nocache$arg_comment指的是当前请求的参数中属性名为nocache和comment对应的属性值
至少有一个不为空且不等于0,则条件满足成立

4.3 设置不缓存资源的配置方案

bash 复制代码
server{
listen 8080;
server_name localhost;
location / {
 if ($request_uri ~ /.*\.js$){
 set $nocache 1;
 }
proxy_no_cache $nocache $cookie_nocache $arg_nocache $arg_comment;
proxy_cache_bypass $nocache $cookie_nocache $arg_nocache $arg_comment;
 }
 }

相关推荐
夏雪coding3 小时前
nginx SPA 回落把 CSS 变成了 HTML:一个返回 200 却让样式失效的坑
前端·nginx
難釋懷5 小时前
Nginx日志
前端·网络·nginx
MC皮蛋侠客8 小时前
Redis 系列(八):缓存设计模式与一致性——从 Cache Aside 到防雪崩
redis·缓存·设计模式
2401_894915538 小时前
部署 GEO 优化源码常见报错排查:端口、伪静态、缓存问题解决
java·运维·服务器·后端·缓存·开源
Lysander.Jovian8 小时前
Nginx服务2
运维·数据库·nginx
MC皮蛋侠客8 小时前
Redis 系列(三):底层实现(一)——对象系统、SDS 与 dict
数据库·redis·缓存
风曦Kisaki9 小时前
# Kubernetes(K8s)笔记Day15:K8s网络工作原理【Pod 网络模型,CNI 网络插件,Calico 工作模式详解,BGP协议,路由反射器】
运维·网络·nginx·云原生·容器·kubernetes
范什么特西2 天前
回答知识总结04(redis)
数据库·redis·缓存
math_hongfan2 天前
鸿蒙离线数据缓存高级架构:弱网预加载/离线数据优先级/同步冲突解决/上线后数据合并策略
学习·缓存·华为·架构·harmonyos·鸿蒙
higherzjm2 天前
如何通过Linux命令自动切割nginx和redis日志
linux·redis·nginx