nginx 缓存服务

服务端缓存: 放在 redis

代理缓存: nginx 等中间件

客户端 : 浏览器缓存等

proxy_cache

proxy_cache zone off
proxy_cache_vaild [code …] time
proxy_cache_key string

location ~ .*.(html|htm)$ {
expires 12h; #缓存12小时
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
http {
proxy_cache_path /var/www/cache #缓存地址
levels=1:2 #目录分级
keys_zone=test_cache:10m #开启的keys空间名字:空间大小(1m可以存放8000个key)
max_size=10g #目录最大大小(超过时,不常用的将被删除)
inactive=60m #60分钟内没有被访问的缓存将清理
use_temp_path=pff; #是否开启存放临时文件目录,关闭默认存储在缓存地址

server {
...
location / {
proxy_cache test_cache; #开启缓存对应的名称,在keys_zone命名好
proxy_cache_valid 200 304 12h; #状态码为200 304的缓存12小时
proxy_cache_valid any 10m; #其他状态缓存10小时
proxy_cache_key $host$uri$is_args$args; #设置key值
add_header Nginx-Cache "$upstream_cache_status";
}
}

server {
...
if ($request_uri ~ ^/(login|register) ) { #当请求地址有login或register时,不缓存
set $nocache = 1; #设置一个自定义变量为true
}
location / {
proxy_no_cache $nocache $arg_nocache $arg_comment;
proxy_no_cache $http_pragma $http_authoriztion;
}
}

清理指定缓存

  1. rm -rf 缓存目录内容
  2. 第三方扩展模块 ngx_cache_purge

大文件分片请求

1
slice size;

每个请求收到的数据会形成一个独立文件,一个请求断了,求它请求不受影响

当文件很大或者 slice 很小时,可能会导致文件描述符耗尽 等情况