一、配置
location / { //这里的location是要换成自己经过精确匹配的location,
比如要缓存图片要写成 "location ~\.(gif|jpg|jepg|png|bmp)${"
expires 3d; //所有链接,浏览器缓存过期时间为3天
proxy_set_header Accept-Encoding '';
root /home/mpeg/nginx; //此目录为服务器的根目录,下面的if语句就是判断此目录下是否有响应的文件
proxy_store on; //表示开启缓存
proxy_store_access user:rw group:rw all:rw; //表示用户读写权限,如果在error中报路径不允许访问的话就用"chomod -R a+rw"将下面配置的路径改
为相应的权限.
proxy_temp_path /home/mpeg/nginx; //此处为文件的缓存路径,这个路径是和url中的文件路径一致的,url中?后面的部分不作为路径或文件
名参考
if ( !-e $request_filename) {
proxy_pass http://192.168.0.1; //此处为要被代理的服务器的地址
}
}
二、配置说明
-
语法: proxy_store on|off|string;
-
默认值: proxy_store off;
-
上下文: http, server, location
开启将文件保存到磁盘上的功能。如果设置为on,nginx将文件保存在alias指令或root指令设置的路径中。如果设置为off,nginx将关闭文件保存的功能。此外,保存的文件名也可以使用含变量的string参数来指定:proxy_store /data/www$original_uri;
保存文件的修改时间根据接收到的“Last-Modified”响应头来设置。响应都是先写到临时文件,然后进行重命名来生成的。从0.8.9版本开始,临时文件和持久化存储可以放在不同的文件系统,但是需要注意这时文件执行的是在两个文件系统间拷贝操作,而不是廉价的重命名操作。因此建议保存文件的路径和proxy_temp_path指令设置的临时文件的路径在同一个文件系统中。
只有在上游buffering使能情况下store才生效,cache和store不能一并使能。
proxy_temp_path:temp文件路径
proxy_max_temp_file_size:temp文件大小
proxy_temp_file_write_size:temp文件每次写入大小
//上游结构体继承配置
u->store = u->conf->store;
//pipe结构体继承上游结构体
p->cacheable = u->cacheable || u->store;
三、写temp文件
if (p->cacheable && (p->in || p->buf_to_file)) {
rc = ngx_event_pipe_write_chain_to_temp_file(p);
}
四、写store文件
if (u->store) {
if (p->upstream_eof || p->upstream_done) {
tf = p->temp_file;
if (u->headers_in.status_n == NGX_HTTP_OK
&& (p->upstream_done || p->length == -1)
&& (u->headers_in.content_length_n == -1
|| u->headers_in.content_length_n == tf->offset))
{
ngx_http_upstream_store(r, u);
}
}
}
- ngx_http_map_uri_to_path:将uri转换成文件路径