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;
 }
 }

相关推荐
一直都在5721 小时前
Redis (一)
数据库·redis·缓存
秦jh_1 小时前
【Redis】客户端使用
数据库·redis·缓存
wenlonglanying2 小时前
nginx 代理 redis
运维·redis·nginx
随风,奔跑3 小时前
Redis
数据库·redis·缓存
TlYf NTLE4 小时前
redis分页查询
数据库·redis·缓存
大萌神Nagato4 小时前
力扣HOT100 Q146LRU缓存
算法·leetcode·缓存
鬼蛟5 小时前
Redis
数据库·redis·缓存
槐序深巷里打雨伞的人5 小时前
k8s中部署prometheus并监控k8s集群以及nginx案例
nginx·kubernetes·prometheus
刘~浪地球6 小时前
Nginx + Tomcat 整合实战(二):反向代理深度配置
nginx·tomcat·firefox
TechWayfarer6 小时前
CDN智能调度实战:基于IP段归属查询实现电信/联通/移动流量分离(附Nginx Lua代码)
网络协议·tcp/ip·nginx