欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~javascript
网站加载的速度取决于浏览器必须下载的全部文件的大小。减小要传输的文件的大小可使网站不只加载更快,并且对于那些宽带是按量计费的人来讲也更友好。html
gzip
是一种流行的数据压缩程序。您可使用gzip
压缩Nginx实时文件。这些文件在检索时由支持它的浏览器解压缩,好处是web服务器和浏览器之间传输的数据量更小,速度更快。java
gzip
不必定适用于全部文件的压缩。例如,文本文件压缩得很是好,一般会缩小两倍以上。另外一方面,诸如JPEG或PNG文件之类的图像已经按其性质进行压缩,使用gzip
压缩很难有好的压缩效果或者甚至没有效果。压缩文件会占用服务器资源,所以最好只压缩那些压缩效果好的文件。nginx
在本指南中,咱们将讨论如何配置安装在Ubuntu 16.04服务器上的Nginx,以利用gzip
压缩,来减小发送给网站访问者的文件的大小。web
要学习本教程,您须要:数据库
这一步中,咱们将在默认的Nginx目录中建立几个测试文件来进行测试gzip
的压缩效果。json
Nginx不会分析文件内容,他只分析文件后缀,因此,它只是查找文件扩展名以肯定其MIME类型,这样nginx就会对不一样的文件做出不一样的压缩处理。浏览器
由于只是测试,因此测试文件的内容可有可无。经过适当的更改文件名,咱们能够欺骗Nginx,让Nginx认为这个文件是图像或者是js脚本。bash
在咱们的配置中,Nginx不会压缩很是小的文件,所以咱们将建立大小刚好为1KB的测试文件。这将让咱们验证Nginx是否使用压缩,压缩一种类型的文件而不是其余类型的文件。
使用建立truncate
在默认Nginx目录中命名的1 KB文件test.html
。扩展名表示它是一个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
复制代码
下一步是检查NGIX如何对刚刚建立的文件进行压缩。
让咱们检查名为test.html
的HTML文件是否被压缩。该命令从咱们的Nginx服务器请求一个文件,并指定使用HTTP头(Accept-Encoding: gzip
)来查找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.jpg
相同方式命名的测试图像。
curl -H "Accept-Encoding: gzip" -I http://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配置支持其余类型文件的压缩。
要更改Nginx的 gzip
配置,请使用nano
或者其余您喜欢的编辑器,来打开的Nginx主要配置文件。
sudo nano /etc/nginx/nginx.conf
复制代码
找到gzip
设置部分,以下所示:
. . .
##
# `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
是表示压缩的文件类型,还能够添加web字体格式、ioc图标和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
复制代码
下一步是检查配置的更改是否按预期工做。
咱们能够像在第2步中那样测试它,方法是使用curl
每一个测试文件并检查Content-Encoding: gzip
是否有输出。
curl -H "Accept-Encoding: gzip" -I http://localhost/test.html
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
复制代码
如今,只有test.jpg
图像文件才能保持未压缩状态。在全部其余示例中,您应该可以Content-Encoding: gzip
在输出中找到标头。
若是是这种状况,您已gzip
成功在Nginx中配置了压缩!
更改Nginx配置来使用gzip
压缩,是很容易的一件事,并且能带来不错的提,。不只带宽有限的访问者会更快地收到该网站,并且Google也会对网站加载速度感到满意。做为现代网络和使用的重要组成部分,网站的加载速度愈来愈受到关注,这gzip
是改进它的一大步。
参考文献:《How To Add the gzip Module to Nginx on Ubuntu 16.04》
问答
相关阅读
此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/developer/article/1158755?fromSource=waitui
欢迎你们前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~
海量技术实践经验,尽在云加社区!