[size=xx-large]概述[/size]
今天早上在上班的地铁上,看了一篇文章,proxy_cache可以支持nginx的缓存。所以兴致来了,就弄了一下。微信的文章在后面已经给出。
在反向代理服务器上,配置代理缓存,默认开启get和head请求的缓存,如果需要缓存post,还需要特殊处理。因此这个时候我们需要面向缓存编程,有些地方要特殊处理。最终的配置文件可以查看附件。
[size=xx-large]proxy_cache基础配置[/size]
http节点添加
#levels设置目录层次,第一层目录只有一个字符,是由levels=1:2设置,总共二层目录,子目录名字由二个字符组成。如果启用了反向代理的gzip压缩,则本地磁盘中存储的文件是解压后的文件。
#keys_zone设置缓存名字和共享内存大小
#inactive在指定时间内没人访问则被删除在这里是1天
#max_size最大缓存空间
proxy_cache_path /opt/nginx/nginx-1.9.4/proxy_cache levels=1:2 keys_zone=content:20m inactive=1d max_size=100m;
server节点添加
location ^~ / {
proxy_pass http://192.168.56.1:8080/;
proxy_cache content; #根keys_zone后的内容对应
proxy_cache_valid 200 304 301 302 10d; #哪些状态缓存多长时间
#proxy_cache_valid any 1d; #其他的缓存多长时间,或者不缓存
#proxy_cache_methods GET; # 默认是get和head
proxy_cache_key $host:$server_port$uri$is_args$args; #通过key来hash,定义KEY的值
#[host]192.168.56.2 [server_port]8080 [uri]/cache_ehcache-2.10.0_web/expire [is_args] [args]-
proxy_cache_min_uses 3; #只要统一个url,不管间隔多久,总次数访问到达3次,就开始缓存。
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment; # 如果任何一个参数值不为空,或者不等于0,nginx就不会查找缓存,直接进行代理转发
}
缓存生效后如下图
[img]http://dl2.iteye.com/upload/attachment/0112/1987/6bfb934a-2a66-3a9d-afe0-acddb4523dde.png[/img]
可以进到具体目录里,VI查看文件,正式我们页面看到的内容。
另外,缓存的时间单位,有s,m,d 相信大家能自己猜出来。
proxy_cache_min_uses这个参数,是指同一个url,不管时间间隔多长,是否在一个缓存周期外,只要总次数到达proxy_cache_min_uses次数,就会触发缓存功能。后续缓存失效以后,只要访问一次,又会缓存。
proxy_cache_bypass是绕开缓存,其中可以通过cookie,和url的get参数进行控制。取得cookie参数的前缀是$cookie_,取得url参数的前缀是$arg_,其他的杜泽可以自行领略。
[color=red]注意:当在运行时,删除proxy_cache_path缓存目录时,则永远无法缓存[/color]
[size=xx-large]高级用法(像CDN一样)[/size]
更新时间:2015-10-28
所有的缓存,都遵循源策略,就像CDN一样。Cache-Control以下4个属性,出现任意一个,则不缓存。
no-cache, no-store, max-age=0, s-maxage=0
其中max-age和s-maxage大于0的时候,则根据源站策略进行缓存,proxy_cache_valid的缓存设置时间失效。
当 max-age=3, s-maxage=5,同时配置的时候,nginx缓存时间以s-maxage时间为主。
遵循源和proxy_cache_path里面的时间有冲突的时候,策略如下:
当proxy_cache_path时间大于遵循源的时候,遵循源时间到期,请求时候,重新设置并覆盖磁盘上的文件;
当proxy_cache_path时间小于遵循源的时候,则proxy_cache_path到期的时候,重新到源站获取数据,遵循源策略失效。
更新时间:2015-11-11
缓存清理模块ngx_cache_purge
http://phl.iteye.com/blog/2256356
更新时间:2015-11-14
proxy_cache_revalidate on的参数设置,代理缓存的更新验证。
http://phl.iteye.com/blog/2256857