作者:dongtiankzh | 来源:互联网 | 2017-10-05 09:55
默认情况下,Nginx的gzip压缩是关闭的,gzip压缩功能就是可以让你节省不少带宽,但是会增加服务器CPU的开销哦,Nginx默认只对texthtml进行压缩,如果要对html之外的内容进行压缩传输,我们需要手动来调。
介绍
页面的加载速度决定于浏览器加载页面的大小,减少页面的大小不仅可以提高页面的访问速度,还可以减少宽带成本.
gzip
是一个很流行的压缩程序,我们可以自己配置Nginx的Gzip来加速页面访问速度,压缩后的页面跟原来一样,但是传输的速度就大大加快了.
跟一般压缩文件一样的工作原理,但是gzip的压缩功能会好一些,一般会压缩两次。而且,JPEG or PNG
等图片首先会按照自然的压缩一次,然后gzip再压缩一次。所以说我们使用gzip的时候一般是对那些需要压缩的文件进行压缩.
本文我会给大家介绍下怎么在Ceontos7中启用Nginx的gzip功能,然后对输出到浏览器的页面进压缩.
要求
你需要这些
-
CentOS 7系统和一个能sudo的用户
-
CentOS 7上已经安装好了Nginx
步骤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.6.3
Date: Fri, 11 Mar 2016 12:53:06 GMT
Content-Type: text/html
Content-Length: 1024
Last-Modified: Fri, 11 Mar 2016 12:48:02 GMT
Connection: keep-alive
ETag: "56e2be82-400"
Accept-Ranges: bytes
在上面的相应信息中我们没有看到有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.6.3
Date: Fri, 11 Mar 2016 12:58:03 GMT
Content-Type: image/jpeg
Content-Length: 1024
Last-Modified: Fri, 11 Mar 2016 12:48:05 GMT
Connection: keep-alive
ETag: "56e2be85-400"
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.6.3
Date: Fri, 11 Mar 2016 12:59:04 GMT
Content-Type: text/css
Content-Length: 1024
Last-Modified: Fri, 11 Mar 2016 12:48:05 GMT
Connection: keep-alive
ETag: "56e2be85-400"
Accept-Ranges: bytes
步骤3 — 启用和配置Nginx的gzip模块
接下来就是配置下Nginx的压缩模块,让其对所有的文件都压缩.
gzip模块
是Nginx的核心模块,也就是说默认情况下Nginx都已经安装好了的,只是没有启用而已。下面我们就在Centos7中新装的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
然后粘贴下面的内容到文件去
/etc/nginx/nginx.conf
##
# `gzip` Settings
#
#
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
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/Javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
保存文件
我们说下这些配置吧
-
gzip on
启用gzip
-
gzip_disable "msie6"
排除IE6浏览器上对文件压缩,因为IE6不再支持gzip压缩的.
-
gzip_vary
和
gzip_proxied
是让代理服务器上的浏览器和服务器能正确辨认gzip压缩功能.
-
gzip_comp_level 6
设置文件压缩的级别,数字越大,压缩越高,一般6是最合适的.
-
gzip_http_version 1.1
用来限制 gzip
是否支持浏览器HTTP/1.1 协议的 ,一般浏览器不支持的话,gzip很可能就不能支持
-
gzip_min_length 256
让Nginx对小于256kb的文件不压缩.小的文件一般也不用压缩的.
-
gzip_types
列出所有的需要压缩的MIME类型文件. 我们配置的就有, HTML 页面, CSS stylesheets, Javascript 和JSON 文件, XML 文件爱你, icons, SVG 镜像, 和web字体.
重启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
功能是很简单的,但作用是大大的,不仅用户访问起来速度更快,还可以减少宽带的使用,而且搜索引擎也喜欢加载速度快的站。