开发者学堂课程【Nginx 企业级 Web 服务实战:自定义变量、Nginx 访问日志转换为 json 及 Nginx gzip 压缩功能】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/649/detail/10760
自定义变量、Nginx 访问日志转换为 json 及 Nginx gzip 压缩功能(二)
三、Nginx 的压缩功能
Nginx 支持对指定类型的文件进行压缩然后传输给客户端,还可以设置压缩比例,压缩后的文件比原文件小,一定程度上有利于降低出口宽带的利用率,降低企业的IT资源,不会占用相应的 CPU 资源。
Nginx 对文件的压缩功能是依赖于模块 ngx_http_gzip_module,官方文档:https://nginx.org/en/docs/http/ngx http gzip module.html
配置指令如下:
启用或者禁用 gzip 压缩,默认关闭
gzip on| off;
压缩比由低到高由1到9,默认为1,压缩效果最好,推荐3或者4
gzip_comp_level level;
禁用 IE6 gzip 功能
gzip_disable “MSIE[1-6]\.”
gzip 压缩的最小的文件,小于设置值的文件将不会被压缩
gzip_min_length 1k;
启用压缩功能时,协议默认的最小版本为 HTTP/1.1
gzip_http_version 1.0 | 1.1;
例如打开 jd.com,如图协议都为1.1
指定 nginx 服务需要向服务器申请的缓存空间默认个数*大小,默认32 4K|16 8K,该大小可以设置
gzip_buffers number size
指明仅对哪些类型的资源执行压缩操作,默认为 gzip_ types text/html,不用显示指示,否则出错
gzip_types mine-type...
想要查看压缩类型的,可以输入代码vim /apps/nginx/conf/mime.types
寻找
如果启用压缩,是否在响应报文首部插入“Vary:Accept-Encoding”
gzip_vary on |off
默认是 off
四、测试压缩功能
接下来重启 nginx 并进行访问测试压缩功能
在端口中输入vim/apps/nginx/conf/conf.d/linux39-pc.conf
(注意:可以放在全局变量或者对 server 生效)
以下放到全局中:输入
vim /apps/nginx/conf/nginx.conf
进入后找到 server{},在server{} 模块上方添加
gzip on;
//开启压缩
gzip_buffers 128 4k;
//压缩缓存
gzip_comp_level 5;
gzip_min_length 1k;
gzip_types text/plain application/javascript application/x-javascript text/cssapplication/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
添加完后退出进行 reload,输入
/apps/nginx/sbin/nginx -s reload
然后进行测试,给 nginx 两个文件,一个小于1k,一个大于1k,先进入 pc 端配置将资源限制注释掉:
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
limit_rate 20k;
limit_except GET{
deny all;
}
退出后输入 cd/data/nginx/html/pc/download/
ll -h /var/log/
在结果中找到一个小于1k的文件然后拷贝,输入
cp /var/log/vmware-network.9.log ./1.log
而我们设置的是小于1k则去除,所以现在尝试访问浏览器magedu.net/download/1.log
没有显示内容,但是可以看到正在下载
想要信息在页面上显示,就要修改默认的文本类型,让浏览器以文本的方式进行加载
输入vim /apps/nginx/conf/conf.d/linux39-pc.conf
进入后找到 location /download{} 模块,在 root /data/nginx/html/pc 下添加
default_type text/html
index index.html;
退出后输入
ll
mv 1.log 1.html
/apps/nginx/sbin/nginx -s reload
再来访问浏览器,输入网址 magedu.net/download/1.html
结果显示如图
再来测试大于1k的文件,输入
ll -h/opt/
结果中找到为488k 的文件 access_json.log
将文件拷贝,输入
scp /opt/access_json.log 172.20.0.101
此外提示:若没有大文件,可以对小文件进行追加,例如对刚才的文件进行如下操作
cp 1.html 2.html
cat 1.html >> 2.html
cat 1.html >> 2.html
cat 1.html >> 2.html
cat 1.html >> 2.html
反复追加然后输入 ll -h 进行查看,可以看到结果2.html大小变成4k
试着访问 2.html 有没有效果,访问网址 magedu.net/download/2.html
结果如图
大小为612B,如果不压缩呢?试着在配置中注释掉代码 gzip on 或者换成 gzip off
然后退出将 nginx 进行 reload,再来刷新页面
变成了4.3kb
如果想访问头部信息,输入 curl --head http://www.magedu.net/download/2.html
结果没有显示压缩信息
再来打开压缩文件,将配置中 gzip 打开,改为 gzip on
改成 on 后重新 reload,再访问头部信息,结果中多显示一行
Vary:Accept-Encoding 支持压缩