文档章节

Nginx 静态压缩/缓存

年少爱追梦
 年少爱追梦
发布于 2016/10/20 23:10
字数 1669
阅读 86
收藏 2

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

    # 这个将为打开文件指定缓存,默认是没有启用的,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类型的文件进行压缩。

配置文件nginx.conf

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对比():

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

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="来加载代码。

 配置文件如下:

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应该也是可以的。

 

如果你要清除某一个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            

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

© 著作权归作者所有

年少爱追梦
粉丝 35
博文 190
码字总数 119538
作品 0
杭州
程序员
私信 提问
nginx学习--nginx下的gzip与vary、预压缩、缓存、反向代理的结合

来自:nginx系列(十七)nginx下的gzip与vary、预压缩、缓存、反向代理的结合 介绍 在http的协议里,为了减少网络传输,允许将报文进行gzip压缩以后再传输。虽然网络传输体积减小了,但是服务器...

spinachgit
2018/12/23
121
0
Web服务器Nginx多方位优化策略

Nginx(读音engine x)服务器由于性能优秀稳定、配置简单以及跨平台,被越来越多的公司和个人所采用,现已成为市场份额继Apache之后的第二大Web服务器。各大小网站论坛博客也介绍说明了Nginx从...

董松
2015/05/21
49
0
实操 Web Cache (第二版)

实操 Web Cache http://netkiller.github.io/journal/cache.html Mr. Neo Chen (陈景峰), netkiller, BG7NYT 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 +86 755 298......

netkiller-
2015/08/27
161
0
实操 Web Cache

实操 Web Cache http://netkiller.github.io/journal/cache.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 +86 755 298......

netkiller-
2014/05/17
896
3
第五章:nginx静态+代理+缓存+负载均衡详解

一、静态资源WEB服务 非服务器动态运行生成的文件 配置语法-文件读取 配置语法-tcp_noposh(sendfile开启时,提高网络传输效率) 配置语法-tcp_nodelay 配置语法-压缩 扩展Nginx压缩模块 ht...

FantJ
2018/01/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

怎样在磁盘上查找MySQL表的大小?这里有答案

导读 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎...

问题终结者
16分钟前
5
0
jQuery load() 方法实现加载远程数据

jQuery load() 方法是简单但强大的 AJAX 方法。load() 方法从服务器加载数据,并把返回的数据放入被选元素中。 语法: $(selector).load(URL,data,callback);必需的 URL 参数规定您希望加载的...

前端老手
17分钟前
3
0
Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2

问题 上一篇Spring Boot Cache + redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置,说了一种时间方式,直接扩展注解的Value值,如: @Override@Cacheable(value = "people#${s...

xiaolyuh
25分钟前
9
0
怎样在磁盘上查找MySQL表的大小?这里有答案

我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应...

Linux就该这么学
50分钟前
5
0
Redis

一、Redis支持的几种数据类型:字符串、List、SET、HASH、ZSET 二、Redis的缓存技术主要是为了降低关系数据库的负载并减少网站成本 三、在Redis里面,被MULTI命令和EXEC命令包围的所有命令会...

BobwithB
52分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部