nginx缓存

基本思路

利用请求的局部性原理,将请求过的内容在本地建立一个副本,下次访问时不再连接到后端服务器,直接响应本地内容。

我们运用nginx缓存一般会有以下几个问题:

  1. 缓存文件存放的路径
  2. 缓存空间大小的设置
  3. 设置缓存的有效期
  4. 如何指定哪些请求被缓存
  5. 对于某些请求,是否可以不走缓存

配置文件

示例文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
proxy_cache_path /zndata/server/nginx/cache levels=1:2 keys_zone=one:10m loader_threshold=300 loader_files=200 max_size=800m;
upstream tomcats {
server 192.168.1.241:8080 weight=5;
server 192.168.1.241:9090 weight=5;
server 192.168.1.242:8080 weight=5;
}
server {
listen 80;
server_name 192.168.1.242;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://tomcats;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache one;
proxy_cache_valid 200 10m;
}

参数说明:

proxy_cache_path

语法:proxy_cache_path path [levels=number] keys_zone=zone_name: zone_size [inactive=time] [max_size=size];

  1. proxy_cache_path指定缓存的目录
  2. level指定缓存的目录结构,如上配置文件所示,生成的缓存文件如下图所示

缓存文件名为6f7e21bb2c6246ba259832c682bdfdd0,配置文件中的level是1:2,那么他在缓存目录下生成/0/dd子目录,如果level是1:3,那么会生成/0/fdd子目录

  1. keys_zone=zone_name: zone_size指定缓存空间的名称和缓存空间的大小,如上配置文件所示表示缓存空间的名称是one,缓存空间的大小是10m。
  2. inactive=time表示在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。
  3. max_size指定缓存空间的大小,当目前缓存的值超出max_size指定的值之后,超过其大小后最少使用数据将被删除。

proxy_cache

语法: proxy_cache zone_name

启用缓存空间,可以在http, server, location这些字段中使用,如上配置文件所示,在location字段中启用了缓存名为one的缓存空间。

proxy_cache_valid

语法:proxy_cache_valid reply_code [reply_code …] time

为不同应答设置不同的缓存时间,如上图所示,为应答代码为200的设置了10分钟的缓存时间。

以上配置文件中有涉及到nginx集群配置信息,参考nginx集群

关于如何指定哪些请求被缓存,对于某些请求,是否可以不走缓存这两个问题参考nginx缓存机制

参考文章

  1. nginx缓存设置
  2. nginx缓存机制
  3. Nginx 反向代理并缓存及缓存清除
  4. Nginx之页面缓存
  5. nginx四 之缓存模块