介绍
网站的加载速度取决于浏览器必须下载的所有文件的大小。 减少要传输的文件的大小可以使网站不仅加载更快,而且对于必须支付其带宽使用的那些人而言更便宜。
gzip
是一种流行的数据压缩程序。 您可以配置的Nginx使用gzip
压缩它提供的飞行文件。 然后,那些文件由检索时支持它的浏览器解压缩,而没有任何损失,但有利于在web服务器和浏览器之间传送较少量的数据。
由于压缩一般的工作方式,还怎么gzip
作品,某些文件压缩比别人做得更好。 例如,文本文件压缩非常好,结果通常会减少两倍以上。 另一方面,图像如JPEG或PNG文件已经通过它们的性质和第二压缩使用压缩gzip
产量很少或没有的结果。 压缩文件会占用服务器资源,因此最好只压缩那些在大小上显着减小的文件。
在本指南中,我们将讨论如何配置你的CentOS 7服务器上安装的Nginx利用gzip
压缩减少发送到网站访问者内容的大小。
先决条件
要遵循本教程,您需要:
一个CentOS 7服务器与Sudo非root用户
在服务器上安装按照Nginx的在CentOS 7教程如何安装的Nginx
第1步 - 创建测试文件
在此步骤中,我们将创建默认Nginx的目录数的测试文件的文本gzip
的压缩。
为了决定什么样的文件通过网络提供,Nginx不分析文件内容,因为它不够快。 相反,它只是查找文件的扩展名来确定其MIME类型 ,表示该文件的目的。
因为这种行为,测试文件的内容是不相关的。 通过适当地命名文件,我们可以欺骗Nginx认为一个完全空的文件是一个图像,另一个,例如,是一个样式表。
在我们的配置中,Nginx不会压缩非常小的文件,因此我们将创建大小为1千字节的测试文件。 这将允许我们验证Nginx是否在其应该使用压缩,压缩一种类型的文件,而不是这样做与其他人。
创建一个名为1千字节文件test.html
使用Nginx的目录的默认truncate
。 扩展名表示它是一个HTML页面。
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在新安装时如何使用我们刚刚创建的文件进行压缩。
让我们来看看,如果名为HTML文件test.html
是配有压缩。 该命令要求从我们的Nginx服务器的文件,并指定这是很好服务gzip
通过使用HTTP标头(压缩的内容Accept-Encoding: gzip
)。
curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
作为响应,您应该会看到几个HTTP响应标头:
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
压缩未在服务器上启用。 这是beause在CentOS 7的支持gzip
是Nginx的默认配置完全禁用。 如果启用了压缩,我们会看到更多的头输出话说Content-Encoding: gzip
。
不仅HTML页面,而且全新安装的每个其他文件将以未压缩的形式提供。 为了验证这一点,你可以要求我们的一个名为test的图像test.jpg
以同样的方式。
curl -H "Accept-Encoding: gzip" -I https://www.youcl.com/uploadshttp://localhost/test.jpg
结果应该与以前几乎相同:
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
再一次,没有提到输出中的压缩。
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的核心模块,这意味着它已经安装,但必须启用和配置。 在CentOS上7新鲜Nginx的安装,与所有文件.conf
从扩展/etc/nginx/conf.d
目录中自动加载。 这允许容易地配置附加模块。
要启用的Nginx gzip
模块,创建一个名为配置文件gzip.conf
使用nano
或您喜爱的文本编辑器。
sudo nano /etc/nginx/conf.d/gzip.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"
从会收到压缩文件浏览器不包括Internet Explorer 6中,因为IE6不支持gzip
根本。gzip_vary
和gzip_proxied
设置确保浏览器和服务器会正确识别压缩之间的代理服务器。gzip_comp_level 6
套多少文件将被压缩。 数字越高,压缩级别和资源使用率就越高。 6是合理的中间地。gzip_http_version 1.1
用于限制gzip
压缩的浏览器支持HTTP / 1.1协议。 如果浏览器不支持它,有一个很好的机会,它不支持gzip
两种。gzip_min_length 256
告诉nginx不压缩超过256字节的文件较小。 非常小的文件几乎不能从压缩中受益。gzip_types
列出所有将被压缩的MIME类型。 在这种情况下,列表包括HTML页面,CSS样式表,Javascript和JSON文件,XML文件,图标,SVG图像和网络字体。
要启用新配置,请重新启动Nginx。
sudo systemctl restart nginx
第4步 - 验证新配置
下一步是检查配置的更改是否按预期工作。
我们可以在第2步中测试这就像我们一样,用curl
在每个测试文件,审查的输出Content-Encoding: gzip
头。
curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
作为回应,你应该看到Content-Encoding: gzip
头,这是以前没有的:
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 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
是提高它的一大步骤。