proxy_store
Proxy_store 跟 Squid 是有区别的!! 最明显的一点在于其不具有expires,无法通过程序控制cache什么时间过期。往后要写个脚本定期删除缓存目录中的内容
以下是配置方式:
如果需要将文件缓存到本地,则需要增加如下几个子参数:
proxy_store on;
proxy_store_access user:rw group:rw all:rw;
proxy_temp_path 缓存目录;
其中,
proxy_store on 启用缓存到本地的功能,
proxy_temp_path 指定缓存在哪个目录下,如:proxy_temp_path /var/nginx_cache;
在经过上一步配置之后,虽然文件被缓存到了本地磁盘上,但每次请求仍会向远端拉取文件,为了避免去远端拉取文件,还必须增加:
if ( !-e $request_filename) {
proxy_pass http://192.168.10.10;
}
即改成有条件地去执行proxy_pass,这个条件就是当请求的文件在本地的proxy_temp_path指定的目录下不存在时,再向后端拉取。
整体配置例子:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ { #指定缓存文件类型
expires 7d; #设置浏览器过期时间
root /data1/nginx_cache/iis; #静态文件根目录目录(必须对应proxy_temp_path)
proxy_store on; #开启缓存机制
proxy_store_access user:rw group:rw all:rw; #缓存读写规则
proxy_temp_path /data1/nginx_cache/iis; #存放静态文件的缓存目录
include proxy.conf; # 外联proxy理的详细配置如proxy_set_header, client_max_body_size ….
if ( !-e $request_filename) { #正则表达式,匹配缓存目录中的文件与源文件是否存在)
proxy_pass http://192.168.10.10 # IIS 应用的服务器地址
}
}