Nginx gzip static静态压缩

1.    目的

 Nginx的动态压缩是对每个请求先压缩再输出,这样造成虚拟机浪费了很多cpu,解决这个问题可以利用nginx模块Gzip Precompression,这个模块的作用是对于需要压缩的文件,直接读取已经压缩好的文件(文件名为加.gz),而不是动态压缩,对于不支持gzip的请求则读取原文件。 


2.    介绍

1)  安装配置

nginx默认安装ngx_http_gzip_module,采用的是chunked方式的动态压缩,静态压缩需要使用http_gzip_static_module这个模块,进行pre-compress。

模块 ngx_http_gzip_static_module 允许发送以“.gz”作为文件扩展名的预压缩文件,以替代发送普通文件。需要指定 --with-http_gzip_static_module编译选项:

./configure --with-http_gzip_static_module

make

make install

若是nginx已安装过,需要把已配置过的参数一起编译,可以用nginx_home/sbin/nginx –V(大写)查看。安装前请确认nginx是否关闭:nginx-s stop 强制关闭;nginx -s quit 安全关闭。

 

Nginx配置文件:

location ~* \.(json)$ {

    gzip_static  on;

    gzip_proxied expired no-cache no-store private auth;               

}

a)  文件可以使用 gzip 命令来进行压缩,或任何其他兼容的命令。建议压缩文件和原始文件的修改日期和时间保持一致。

b)  gzip_static配置优先级高于gzip。

c)  开启nginx_static后,对于任何文件都会先查找是否有对应的gz文件。

d)  gzip_types设置对gzip_static无效。

e)  gzip static默认适用HTTP 1.1。

 

2)  Location配置规则

a)  ~     波浪线表示执行一个正则匹配,区分大小写

b)  ~*    表示执行一个正则匹配,不区分大小写

c)  ^~    ^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录

d)  =     进行普通字符精确匹配

e)  @    "@" 定义一个命名的 location,使用在内部定向时,例如error_page, try_files

 

location 匹配的优先级

a)  = 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。

b)  普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。

c)  ^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。

d)  最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。

 

3)  Gzip自动压缩

为了方便生产环境自动生成压缩文件,写了一条命令自动完成这些事情:

1.  根据文件后缀名遍历需要压缩的文件

2.  对比文件的修改时间

3.  自动调用gzip生成压缩文件

find ./ -type f -printf '%TY %Tm %Td %TH %TM %TS\t%p\n'| grep -iE '\.(html|txt|css|js)$'| awk -F'\t' '{

 

gz_file=$2 ".gz";

stat_cmd="stat -c \"%Y\" " gz_file;

exist_cmd="[  -e \"" gz_file "\" ] && echo 1 || echo 0";

 

exist_cmd | getline gz_file_exist;

 

if (gz_file_exist) {

    stat_cmd | getline last_modify_timestamp;

} else {

    last_modify_timestamp=0;

}

 

if (last_modify_timestamp < mktime($1)) {

    system("gzip -c9 " $2 " > " gz_file);

    print gz_file " [created]";

}

 

}'

 


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值