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]";

}

 

}'

 


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐