您的位置:首页 > 运维架构 > Nginx

Nginx 页面缓存指令

2016-09-23 18:55 155 查看

一、proxy_cache_path

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

默认值:None

使用字段:http

指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中,并且使用代理url的哈希值作为关键字与文件名。levels参数指定缓存的子目录数,例如:

proxy_cache_path  /data/nginx/cache  levels=1:2   keys_zone=one:10m;


文件名类似于:

/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c


levels指定目录结构,可以使用任意的1位或2位数字作为目录结构,如 X, X:X,或X:X:X 例如: “2”, “2:2”, “1:1:2“,但是最多只能是三级目录。

所有活动的key和元数据存储在共享的内存池中,这个区域用keys_zone参数指定。one指的是共享池的名称,10m指的是共享池的大小。

注意每一个定义的内存池必须是不重复的路径,例如:

proxy_cache_path  /data/nginx/cache/one    levels=1      keys_zone=one:10m;
proxy_cache_path  /data/nginx/cache/two    levels=2:2    keys_zone=two:100m;
proxy_cache_path  /data/nginx/cache/three  levels=1:1:2  keys_zone=three:1000m;


如果在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。一个名为cache manager的进程控制磁盘的缓存大小,它被用来删除不活动的缓存和控制缓存大小,这些都在max_size参数中定义,当目前缓存的值超出max_size指定的值之后,超过其大小后最少使用数据(LRU替换算法)将被删除。内存池的大小按照缓存页面数的比例进行设置,一个页面(文件)的元数据大小按照操作系统来定,如FreeBSD/i386下为64字节,FreeBSD/amd64下为128字节。

二、proxy_cache

语法:proxy_cache zone_name;

默认值:None

使用字段:http, server, location

设置一个缓存区域的名称,一个相同的区域可以在不同的地方使用。

在0.7.48后,缓存遵循后端的”Expires”, “Cache-Control: no-cache”, “Cache-Control: max-age=XXX”头部字段,0.7.66版本以后,”Cache-Control:“private”和”no-store”头同样被遵循。nginx在缓存过程中不会处理”Vary”头,为了确保一些私有数据不被所有的用户看到,后端必须设置 “no-cache”或者”max-age=0”头,或者proxy_cache_key包含用户指定的数据如$cookie_xxx,使用cookie的值作为proxy_cache_key的一部分可以防止缓存私有数据,所以可以在不同的location中分别指定proxy_cache_key的值以便分开私有数据和公有数据。

缓存指令依赖代理缓冲区(buffers),如果proxy_buffers设置为off,缓存不会生效。

三、proxy_cache_valid

语法:proxy_cache_valid reply_code [reply_code …] time;

默认值:None

使用字段:http, server, location

为不同的应答设置不同的缓存时间,例如:

proxy_cache_valid  200 302  10m;
proxy_cache_valid  404      1m;


为应答代码为200和302的设置缓存时间为10分钟,404代码缓存1分钟。

如果只定义时间:

proxy_cache_valid 5m;


那么只对代码为200, 301和302的应答进行缓存。

同样可以使用any参数任何应答。

proxy_cache_valid  200 302 10m;
proxy_cache_valid  301 1h;
proxy_cache_valid  any 1m;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息