配置项
/path/to/cache : 本地路径,缓存文件存放地址;
levels : 默认所有缓存文件都放在同一个/path/to/cache下,从而影响缓存的性能,大部分场景推荐使用2级目录来存储缓存文件;
key_zone :在共享内存中设置一块存储区域来存放缓存的key和metadata(类似使用次数),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key;
max_size : 最大cache空间,如果不指定,会使用掉所有disk space,当达到配额后,会删除最少使用的cache文件;
inactive : 未被访问文件在缓存中保留时间,本配置中如果60分钟未被访问则不论状态是否为expired,缓存控制程序会删掉文件,默认为10分钟;“需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件”;
use_temp_path : 如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝;
proxy_cache : 启用proxy cache,指定key_zone;
附:缓存和代理中常用的配置项
上文讲述了如何配置最基础的proxy cache,接下来,会对常用的高级配置项进行梳理。
proxy_no_cache string; Default: — Context: http , server , location config example: proxy_no_cache $cookie_nocache $arg_nocache $arg_comment; proxy_no_cache $http_pragma $http_authorization;
$cookie_nocache a r g n o c a c h e . . . 皆 为 变 量 , 可 以 根 据 你 访 问 的 匹 配 策 略 来 设 置 , 其 值 只 有 2 类 , 0 和 非 0 ; 访 问 匹 配 策 略 例 如 : i f ( arg_nocache...皆为变量,可以根据你访问的匹配策略来设置,其值只有2类,0和非0; 访问匹配策略例如: if (arg
n
ocache...皆为变量,可以根据你访问的匹配策略来设置,其值只有2类,0和非0;访问匹配策略例如:if(request_uri ~ ^/(login|register|password/reset)/) { set $cookie_nocache 1; }
如果在此链式配置中,只要有一个值不为0,则不会cache;例如:proxy_no_cache $cookie_nocache(0) $arg_nocache(1) $arg_comment(0),不会被cache。`
注:一般会配合proxy_cache_bypass共同使用;
proxy_cache_bypass string; Default: — Context: http , server , location config example: proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment; proxy_cache_bypass $http_pragma $http_authorization;
定义在哪些情况下不从cache读取,直接从backend获取资源;配置方式同proxy_no_cache。
proxy_cache_key string; Default: proxy_cache_key $scheme$proxy_host$request_uri; Context: http, server, location
自定义cache key,例如:
proxy_cache_key “h o s t hosthostrequest_uri $cookie_user”;
默认值为:
proxy_cache_key s c h e m e schemeschemeproxy_hostu r i uriuriis_args$args;
proxy_cache_methods GET| HEAD|POST…;
Default: proxy_cache_methods GET HEAD;
Context: http, server, location
指定客户端那些方法被缓存,默认为GET|HEAD。
proxy_cache_purge string ...; Default: — Context: http, server, location config example: proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m; map $request_method $purge_method { PURGE 1; default 0; } server { ... location / { proxy_pass http://backend; proxy_cache cache_zone; proxy_cache_key $uri; proxy_cache_purge $purge_method; } }
定义缓存清除场景,同proxy_no_cache,proxy_cache_bypass链式配置方式,只要又一个不为0,则清除对应的cache key则会被清除,并返回204 response。注意,这里是删除内存中的cache key,而不是disk上的cache文件!!!disk的cache文件是由inactive控制;
当purege request的cache key以通配符*结束时,所有匹配到通配符的cache入口的cachekey都会被删除。
proxy_cache_valid *[code...] time *; Default: — Context: http, server, location
设置不同相应码的缓存时间,当不指定响应码的时候,例如
proxy_cache_valid 5m;
只对响应码为200,301,302的访问请求资源设置缓存时间,此外可以个性化定制,例如:
proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid 404 1m; proxy_cache_valid any 1m;
此外,还可以在相应header里设置优先级更高的缓存有效时间:
“X-Accel-Expires”,设置响应的缓存过期时间,以秒为单位;0为不缓存;
如果没有设置“X-Accel-Expires” header,则关于缓存的配置策略可能会在“Expires”或者“Cache-Control” header中;
如果header含有“Set-Cookie”,则响应不会被缓存,类似的配置可以在“proxy_ignore_header”中可见;
header包含“Vary”并且设置为“*”,则请求不会被缓存,如果“Vary”有具体的值,则对应的请求会被缓存;
proxy_ignore_headers field;
Default: —
Context: http, server, location
不缓存包含在field的响应header,可以设置的值有:“X-Accel-Redirect”, “X-Accel-Expires”, “X-Accel-Limit-Rate”,“X-Accel-Buffering”, “X-Accel-Charset”, “Expires”, “Cache-Control”, “Set-Cookie” (0.8.44), and “Vary”。
如果上述的header field没有设置为忽略,则header filed中有“X-Accel-Expires”, “Expires”, “Cache-Control”, “Set-Cookie”, and “Vary”的话,响应会被缓存。
proxy_pass_headers field; proxy_hide_headers field; Default: — Context: http, server, location
参考