Nginx 静态压缩/缓存

                                            对静态压缩的一些配置信息javascript

# 这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,
    # 建议和打开文件数一致,inactive 是指通过多长时间文件没被请求后删除缓存。
    open_file_cache max=204800 inactive=20s;

    # open_file_cache 指令中的inactive 参数时间内文件的最少使用次数,
    # 若是超过这个数字,文件描述符一直是在缓存中打开的,如上例,若是有一个
    # 文件在inactive 时间内一次没被使用,它将被移除。
    open_file_cache_min_uses 1;

    # 这个是指多长时间检查一次缓存的有效信息
    open_file_cache_valid 30s;

    # 默认状况下,Nginx的gzip压缩是关闭的, gzip压缩功能就是可让你节省不
    # 少带宽,可是会增长服务器CPU的开销哦,Nginx默认只对text/html进行压缩 ,
    # 若是要对html以外的内容进行压缩传输,咱们须要手动来设置。
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;//手动设置

实验以下:当没有设置压缩类型时的状况,只会对text/html类型的文件进行压缩。php

配置文件nginx.confcss

http {
   server {
        listen 80;
        gzip on;
        location /welcome{
            default_type text/html;
            content_by_lua '
                ngx.say("<p>welcome,here!</p>")
            ';
        }
	location /index.html{
	    root /usr/local/work/yidaren.top/html;	
	}
	location /{
	    proxy_pass http://127.0.0.1/index.html;
	}
	location ~*\.js$ { 
            root /usr/local/work/yidaren.top;
   	}
    }
}

 请求welcome和js对比():html

配置反向缓存文件,专门给动态生成页面配置的数据:java

1 proxy_cache

语法:proxy_cache zone_name;
默认值:None
使用字段:http, server, location
设置一个缓存区域的名称,一个相同的区域能够在不一样的地方使用。
在0.7.48后,缓存遵循后端的”Expires”, “Cache-Control: no-cache”, “Cache-Control: max-age=XXX”以及其余等。然而,目前nginx会忽略一些缓存控制指令,如:”private”和”no-store”,一样,nginx在缓存过程当中不会处理”Vary”头,为了确保一些私有数据不被全部的用户看到,后端必须设置 “no-cache”或者”max-age=0″头,或者proxy_cache_key包含用户指定的数据如$http_cookie_xxx,在proxy_cache_key中使用一部分cookie的值能够防止缓存私有数据,因此能够分别指定location以便分开私有数据和公有数据。
缓存指令依赖代理缓冲区(buffers),若是proxy_buffers设置为off,缓存不会生效。

2 proxy_cache_key

语法:proxy_cache_key line;
默认值:$scheme$proxy_host$request_uri;
使用字段:http, server, location
指令指定了包含在缓存中的缓存关键字。

proxy_cache_key "$host$request_uri$cookie_user";
proxy_cache_key "$scheme$host$request_uri";

3 proxy_cache_path

语法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];
默认值:None
使用字段:http
指令指定缓存的路径和一些其余参数,缓存的数据存储在文件中。缓存的文件名和key为代理URL的MD5 码。levels参数指定缓存的子目录数,例如:
proxy_cache_path  /data/nginx/cache  levels=1:2   keys_zone=one:10m;
文件名相似于:
/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c
全部活动的key和元数据存储在共享的内存区域中,这个区域用keys_zone参数指定,若是在inactive参数指定的时间内缓存的数据没有被请求则被删除,默认inactive为10分钟。
cache manager进程控制磁盘的缓存大小,在max_size参数中定义,超过其大小后最少使用数据将被删除。
区域的大小按照缓存页面数的比例进行设置,一个页面(文件)的元数据大小按照操做系统来定,FreeBSD/i386下为64字节,FreeBSD/amd64下为128字节,当区域满了之后key将按照LRU(最近最少使用算法)进行处理。
proxy_cache_path和proxy_temp_path应该使用在相同的文件系统上。


4 proxy_cache_methods

语法:proxy_cache_methods [GET HEAD POST];
默认值:proxy_cache_methods GET HEAD;
使用字段:http, server, location
GET/HEAD用来装饰语句,即你没法禁用GET/HEAD即便你只使用下列语句设置:

proxy_cache_methods POST;

5 proxy_cache_min_uses

语法:proxy_cache_min_uses the_number;
默认值:proxy_cache_min_uses 1;
使用字段:http, server, location
多少次的查询后应答将被缓存,默认1。

6 proxy_cache_valid

语法:proxy_cache_valid reply_code [reply_code ...] time;
默认值:None
使用字段:http, server, location
为不一样的应答设置不一样的缓存时间,例如:
  proxy_cache_valid  200 302  10m;
  proxy_cache_valid  404      1m;

  proxy_cache_valid  5m;

  proxy_cache_valid  200 302 10m;
  proxy_cache_valid  301 1h;
  proxy_cache_valid  any 1m;

7 proxy_cache_use_stale


为了防止缓存失效(在多个线程同时更新本地缓存时),你能够指定’updating’参数,它将保证只有一个线程去更新缓存,而且在这个线程更新缓存的过程当中其余的线程只会响应当前缓存中的过时版本。


代码及configure配置:
在ngx_http_proxy_module.c里面定义了每一个指令的钩子(即callback),它们在读取配置文件时会被调用。在configure的时候只须要把“HTTP_CACHE”设置为YES(能够找到auto/options里面HTTP_CACHE那行)。“proxy_cache_purge”指令须要下载nginx add-ons里面的“Cache Purge”模块,并在configure的时候用"--add-module="来加载代码。

 配置文件以下:nginx

http {
   proxy_cache_path /usr/local/work/cache levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=60m
   use_temp_path=off;
   server {
        listen 80;
        gzip on;
        location /welcome{
            default_type text/html;
            content_by_lua '
                ngx.say("<p>welcome,here!</p>")
            ';
        }
	location /index.html{
	    root /usr/local/work/yidaren.top/html;	
	}
	location /{
	    proxy_pass http://127.0.0.1/index.html;
	}
	location ~*\.js$ {
	    proxy_cache my_cache;
	    proxy_cache_key $host$uri;
            proxy_cache_valid 200 304 30m; 
            root /usr/local/work/yidaren.top;
   	}
    }
}

验证以下:算法

网页加载效果以下:后端

如何验证,咱们能够进入我设置cache的页面使用 ll命令就能够查看结果缓存

[root@iZm5eg3u73g9nvjmiwu3opZ caches]# ll
总用量 8
drwx------ 3 nobody nobody 4096 10月 20 22:56 3
drwx------ 3 nobody root   4096 10月 20 22:56 temp

证实对反向代理的数据进行了缓存,这种技术对于反向代理是动态生成数据的状况下有和强大的效果,例如php,固然lua应该也是能够的。bash

 

若是你要清除某一个url的缓存文件,就比较悲催了。但也不是不能作到。由于nginx生成url文件的时候,存放的目录以及生成的哈希文件名都是固定的,你也可使用proxy_cache_key来指定生成的key的字段内容。

若是你掌握它的生成规则,你就能够写一个管理器来快速清空单个url缓存。最烂的方法也能够把缓存目录清空,接着访问你要须要单独清空的url,而后再到缓存目录里看看生成的缓存目录与文件名,再你须要单独清空这个url的缓存时直接把文件干掉就好。

自己的静态文件:

open_file_cache max=102400 inactive=20s;

参考好文章:http://www.qttc.net/201307355.html

               :http://xuewb.com/ngx/static_file.html

               :http://www.cnblogs.com/dudu/p/4597351.html            

纸上得来终觉浅,觉知此事要躬行

相关文章
相关标签/搜索