作者:手艺人生大姑娘 | 来源:互联网 | 2017-10-05 09:52
默认情况下,Nginx的gzip压缩是关闭的,gzip压缩功能就是可以让你节省不少带宽,但是会增加服务器CPU的开销哦,Nginx默认只对texthtml进行压缩,如果要对html之外的内容进行压缩传输,我们需要手动来调。
介绍
页面的加载速度决定于浏览器加载页面的大小,减少页面的大小不仅可以提高页面的访问速度,还可以减少宽带成本.
gzip
是一个很流行的压缩程序,我们可以自己配置Nginx的Gzip来加速页面访问速度,压缩后的页面跟原来一样,但是传输的速度就大大加快了.
跟一般压缩文件一样的工作原理,但是gzip的压缩功能会好一些,一般会压缩两次。而且,JPEG or PNG
等图片首先会按照自然的压缩一次,然后gzip再压缩一次。所以说我们使用gzip的时候一般是对那些需要压缩的文件进行压缩.
我们在前面讲到了Linux上配置Nginx Gzip,虽然在所有的Linux上安装某些软件是相似的,但我们今天还是重点说下在Ubuntu中启用Nginx的gzip功能,然后对输出到浏览器的页面进压缩。
要求
你需要这些
步骤1 — 创建测试文件
这里我们会在默认的Nginx文件夹下面创建几个文件来测试gzip功能
先确认下通过网络访问的文件格式,Nginx是不会去分析你文件内容的,所有就不会很快,但Nginx是根据文件的扩展名来决定文件MIME类型。
因为这个原因,我们测试文件的内容和扩展名不一样了,然后我们把文件的名字重名名下,这样让Nginx误认为我们给的文件是一个空的图片或者图表文件.
在我们教程的配置中,我们是不会对小文件进行压缩的,所有我们现在创建/复制一些比较大的文件,至少要大于1kb吧:)这样我们才能够测试出Nginx的压缩功能只对某个文件压缩而不是其他的文件.
我们新建一个1kb的htm文件,命令为test.html
,然后放到Nginx的默认文件夹truncate
处.根据名字的扩展名展示给Nginx的是一个静态文件.
sudo truncate -s 1k /usr/share/nginx/html/test.html
然后用同样的方式创建一些其他的文件: 一张
jpg
图片文件, 一个
css
文件, 和一个
js
Javascript文件.
sudo truncate -s 1k /usr/share/nginx/html/test.jpg
sudo truncate -s 1k /usr/share/nginx/html/test.css
sudo truncate -s 1k /usr/share/nginx/html/test.js
步骤2 — 测试下Nginx默认的反应
接下来我们就是来测试看看Nginx对这些刚配置的文件是怎么压缩反应的.
我们看看test.html
文件是不是压缩了,已http方式请求Nginx服务器上的某个经过gzip压缩后的html文件命令是: (Accept-Encoding: gzip
).
curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
相应后我们看下HTTP头信息:
Nginx response headers
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Tue, 19 Jan 2016 20:04:12 GMT
Content-Type: text/html
Last-Modified: Tue, 04 Mar 2014 11:46:45 GMT
Connection: keep-alive
Content-Encoding: gzip
在上面的相应信息中我们没有看到有gzip的字样,说明我们服务器上的gzip功能是没有开启的,因为在Ceontos7中Nginx默认是关闭了gzip功能了的,如果gzip要是开启了的话我们会看到类似这样的字样:
Content-Encoding: gzip
.
不仅仅html没有压缩其他的文件也没有压缩的,我们可以用同样的方式来测试下 test.jpg
curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg
输出可能是这样的:
Nginx response headers
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Tue, 19 Jan 2016 20:10:34 GMT
Content-Type: image/jpeg
Content-Length: 0
Last-Modified: Tue, 19 Jan 2016 20:06:22 GMT
Connection: keep-alive
ETag: "569e973e-0"
Accept-Ranges: bytes
在头信息中也没有 Content-Encoding: gzip
这样的字样
同样对css文件
curl -H "Accept-Encoding: gzip" -I http://localhost/test.css
输出后也是没有的
Nginx response headers for CSS file
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Tue, 19 Jan 2016 20:20:33 GMT
Content-Type: text/css
Content-Length: 0
Last-Modified: Tue, 19 Jan 2016 20:20:33 GMT
Connection: keep-alive
ETag: "569e9a91-0"
Accept-Ranges: bytes
步骤3 — 启用和配置Nginx的gzip模块
接下来就是配置下Nginx的压缩模块,让其对所有的文件都压缩.
gzip模块
是Nginx的核心模块,也就是说默认情况下Nginx都已经安装好了的,只是没有启用而已。下面我们就在Ubuntu 14.04中新装的Nginx环境上配置启用Nginx的gzip模块,默认下面下/etc/nginx/conf.d文件夹下面的所有.conf扩展文件都是会引入的 ,这让我们配置更方便。
我们使用vi或者nano在Nginx的/etc/nginx/conf.d下面创建一个gzip.conf
文件.
sudo nano /etc/nginx/conf.d/gzip.conf
然后找到gzip的内容:
/etc/nginx/nginx.conf
. . .
##
# `gzip` Settings
#
#
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/x-Javascript text/xml application/xml application/xml+rss text/Javascript;
. . .
我们看到默认情况下,gzip
压缩功能是开启的 gzip on
,但是其他的参数都是使用#给注视掉了,所以我们简单修改下就行看:
-
通过去掉注视把后面的选项都启用 (删掉每行前面的
#
就可以了)
-
添加
gzip_min_length 256;
指令,这样就让Nginx对小于265kb的文件不压缩,因为再小了的文件压缩也没有多大意义了.
-
追加
gzip_types
命令,指定类型,如:网页字体, ico
图标, 和SVG 图片等
修改后大概是这样:
/etc/nginx/nginx.conf
. . .
##
# `gzip` Settings
#
#
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/x-Javascript text/xml application/xml application/xml+rss text/Javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
. . .
重启Nginx让配置生效.
sudo systemctl restart nginx
步骤4 —测试新的配置
下面就来测试下我们的配置是否生效
我们还是安装步骤2那样来测试,看看头信息里面有没有 Content-Encoding: gzip
.
curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
在相应头信息中我们找下是否有Content-Encoding: gzip
Nginx response headers
HTTP/1.1 200 OK
Server: nginx/1.6.3
Date: Fri, 11 Mar 2016 13:19:16 GMT
Content-Type: text/html
Last-Modified: Fri, 11 Mar 2016 12:48:02 GMT
Connection: keep-alive
Vary: Accept-Encoding
Content-Encoding: gzip
同样测试其他文件:
curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg
curl -H "Accept-Encoding: gzip" -I http://localhost/test.css
curl -H "Accept-Encoding: gzip" -I http://localhost/test.js
当我们找到Content-Encoding: gzip
后就说明gzip功能已开启了
结论
修改Nginx配置完全使用zip
功能是很简单的,但作用是大大的,不仅用户访问起来速度更快,还可以减少宽带的使用,而且搜索引擎也喜欢加载速度快的站。