Nginx系列(二十):HTTP Store机制

一、配置
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转换成文件路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值