介绍
网站的加载速度取决于浏览器必须下载的所有文件的大小。减少要传输的文件的大小可以使网站不仅加载更快,而且对于必须支付其带宽使用的那些人而言更便宜。gzip
是一种流行的数据压缩程序。 您可以配置的Nginx使用
gzip
压缩它提供的飞行文件。然后,那些文件由检索时支持它的浏览器解压缩,而没有任何损失,但有利于在web服务器和浏览器之间传送较少量的数据。 由于压缩一般的工作方式,还怎么
gzip
作品,某些文件压缩比别人做得更好。 例如,文本文件压缩非常好,结果通常会减少两倍以上。 另一方面,图像如JPEG或PNG文件已经通过它们的性质和第二压缩使用压缩
gzip
产量很少或没有的结果。压缩文件会占用服务器资源,因此最好只压缩那些在大小上显着减小的文件。 在本指南中,我们将讨论如何配置你的Ubuntu 16.04服务器上安装的Nginx利用
gzip
压缩减少发送到网站访问者内容的大小。
先决条件
要遵循本教程,您需要:- 一个Ubuntu的16.04服务器通过下面的设置与Ubuntu 16.04教程初始服务器设置 ,包括Sudo非root用户和防火墙
- 在服务器上安装按照Nginx的如何在Ubuntu 16.04安装教程Nginx
第1步 - 创建测试文件
在此步骤中,我们将创建默认Nginx的目录数的测试文件的文本gzip
的压缩。 为了决定什么样的文件通过网络提供,Nginx不分析文件内容,因为它不够快。相反,它只是查找文件的扩展名来确定其
MIME类型 ,表示该文件的目的。 由于这种行为,测试文件的内容是不相关的。通过适当地命名文件,我们可以欺骗Nginx认为一个完全空的文件是一个图像,另一个,例如,是一个样式表。 在我们的配置中,Nginx不会压缩非常小的文件,因此我们将创建大小为1千字节的测试文件。这将允许我们验证Nginx是否在其应该使用压缩,压缩一种类型的文件,而不是这样做与其他人。 创建一个名为1千字节文件
test.html
使用Nginx的目录的默认
truncate
。扩展名表示它是一个HTML页面。
sudo truncate -s 1k /var/www/html/test.html
让我们创建以相同的方式多几个测试文件:一个
jpg
的图像文件,人们
css
样式表,和一个
js
JavaScript文件。
sudo truncate -s 1k /var/www/html/test.jpg
sudo truncate -s 1k /var/www/html/test.css
sudo truncate -s 1k /var/www/html/test.js
下一步是检查Nginx在新安装时如何使用我们刚刚创建的文件进行压缩。
第2步 - 检查默认行为
让我们来看看,如果名为HTML文件test.html
是配有压缩。 该命令要求从我们的Nginx服务器的文件,并指定这是很好服务
gzip
通过使用HTTP标头(压缩的内容
Accept-Encoding: gzip
)。
curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
作为响应,您应该会看到几个HTTP响应标头:
Nginx响应头
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
在最后一行中,可以看到
Content-Encoding: gzip
头。 这告诉我们
gzip
压缩已经被用于发送该文件。 这发生,因为在Ubuntu 16.04,Nginx的有
gzip
安装与它的默认设置后会自动启用压缩。 但是,默认情况下,Nginx只压缩HTML文件。每次安装时,其他文件将以未压缩的形式提供。为了验证这一点,你可以要求我们的一个名为test的图像
test.jpg
以同样的方式。
curl -H "Accept-Encoding: gzip" -I https://www.youcl.com/uploadshttp://localhost/test.jpg
结果应该与以前略有不同:
Nginx响应头
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
再一次,没有提到输出中的压缩。
CSS文件的Nginx响应头
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
下一步是配置Nginx不仅提供压缩的HTML文件,而且还提供可以从压缩中受益的其他文件格式。
第3步 - 配置Nginx的gzip设置
要改变Nginx的gzip
配置,打开主Nginx的配置文件
nano
或您喜爱的文本编辑器。
sudo nano /etc/nginx/nginx.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的不压缩超过256字节的文件较小。这是非常小的文件几乎不能从压缩中受益。 - 追加
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 reload nginx
下一步是检查配置的更改是否按预期工作。
第4步 - 验证新配置
我们可以在第2步中测试这就像我们一样,用curl
在每个测试文件,审查的输出
Content-Encoding: gzip
头。
curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
curl -H "Accept-Encoding: gzip" -I https://www.youcl.com/uploadshttp://localhost/test.jpg
curl -H "Accept-Encoding: gzip" -I http://localhost/test.css
curl -H "Accept-Encoding: gzip" -I http://localhost/test.js
现在只有
test.jpg
,这是一个图像文件时,应保持压缩。 在其它的例子,你应该能找到
Content-Encoding: gzip
输出头。 如果是这样的话,你已经配置
gzip
在Nginx的压缩成功!
结论
Nginx的更改配置,以充分利用gzip
压缩是容易的,但好处是巨大的。 不仅具有有限带宽的访问者将更快地接收网站,而且Google将对网站加载更快感到高兴。 速度是获得牵引力作为现代网络的重要组成部分,并使用
gzip
是提高它的一大步骤。