前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在CentOS 7上将gzip模块添加到Nginx

如何在CentOS 7上将gzip模块添加到Nginx

原创
作者头像
新巴子
修改2018-09-19 14:42:07
1.9K0
修改2018-09-19 14:42:07
举报

介绍

网站加载的速度取决于浏览器必须下载的所有文件的大小。减少要传输的文件的大小可以使网站不仅加载更快,而且带宽费用也更便宜。

gzip是一种流行的数据压缩程序。您可以将Nginx配置为用gzip压缩它即时提供的文件。然后,这些文件在检索时由支持它的浏览器解压缩而没有任何损失,但是具有在Web服务器和浏览器之间传输较少量数据的好处。

由于压缩的工作方式一般,但gzip有效,某些文件比其他文件压缩得更好。例如,文本文件压缩得非常好,结果通常会缩小两倍以上。另一方面,诸如JPEG或PNG文件之类的图像已经按其性质进行压缩,并且使用gzip产生很少或没有结果的第二次压缩。压缩文件会占用服务器资源,因此最好只压缩那些会大大减小其大小的文件。

在本指南中,我们将讨论如何配置安装在CentOS 7服务器上的Nginx,以利用gzip压缩来减少发送给网站访问者的内容的大小。

准备

要完成本教程,您需要具备以下内容:

  • 一台已经设置好可以使用sudo命令的非root账号的CentOS 7服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器
  • 在CentOS 7服务器上安装Nginx

第一步 - 创建测试文件

在这一步中,我们将在默认的Nginx目录中创建几个测试文件来进行文本gzip压缩。

为了判断什么文件通过网络提供,Nginx不会分析文件内容因为它不够快,相反,它只是查找文件扩展名以确定其MIME类型 来表示文件的用途。

由于此行为,测试文件的内容无关紧要。通过适当地命名文件,我们可以让Nginx认为一个完全空的文件是一个图像或是一个样式表。

在我们的配置中,Nginx不会压缩非常小的文件,因此我们将创建大小恰好为1千字节的测试文件。这将允许我们验证Nginx是否应该使用压缩,压缩一种类型的文件而不是其他类型的文件。

通过truncate在默认Nginx目录中创建1 KB的文件,命名为test.html。扩展名表示它是一个HTML页面。

sudo truncate -s 1k /usr/share/nginx/html/test.html

以相同的方式创建一些测试文件:一个jpg图像文件,一个css样式表和一个jsJavaScript文件。

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

第二步 - 检查默认行为

下一步是检查刚刚安装的Nginx如何压缩刚才创建的文件。

让我们检查命名为test.html的HTML文件是否通过压缩。下面的命令是从Nginx服务器请求一个文件,并指定使用HTTP标头(Accept-Encoding: gzip)提供可用的 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服务器上没有启用压缩。因为在CentOS 7上默认的Nginx配置完全禁用了gzip的支持。如果启用了压缩,我们会在输出中看到额外的标题Content-Encoding: gzip

不仅是HTML页面,而且全新安装中的每个其他文件都将以未压缩的形式提供。要验证这一点,您可以请求以相同方式命名的test.jpg来测试图像。

curl -H "Accept-Encoding: gzip" -I http://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

第三步 - 启用和配置Nginx的gzip模块

下一步是将Nginx配置为可以压缩所有文件格式的可用压缩包。

gzip模块是Nginx中的核心模块,这意味着它已经安装但必须启用和配置。在CentOS 7上安装新的Nginx时,将自动加载/etc/nginx/conf.d目录中的扩展名为.conf的所有文件。这样可以轻松配置其他模块。

要启用Nginx gzip模块,请使用nano或您喜欢的文本编辑器创建名为gzip.conf 的配置文件。

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_varygzip_proxied设置确保浏览器和服务器之间的代理服务器将正确识别压缩。
  • gzip_comp_level 6设置要压缩的文件数量。数字越大,压缩级别和资源使用率越高。6是合理的中间值。
  • gzip_http_version 1.1用于将gzip压缩限制为支持HTTP/1.1协议的浏览器。
  • gzip_min_length 256表示告诉Nginx不要压缩小于256字节的文件。非常小的文件几乎不需要压缩。
  • gzip_types列出将要压缩的所有MIME类型,列表包括HTML页面,CSS样式表,Javascript和JSON文件,XML文件,图标,SVG图像和Web字体。

要启用新配置,请重新启动Nginx。

sudo systemctl restart nginx

第四步 - 验证新配置

下一步是检查配置的更改是否按预期工作。

我们可以像在第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 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标记。

如果是这种情况,您已成功在Nginx中配置了gzip压缩!

结论

更改Nginx配置以完全使用gzip压缩很容易,也有很大好处。不仅带宽有限的访问者会更快地收到该网站,而且Google也会提高网站加载速度。作为现代网络和使用的重要组成部分,速度越来越受到关注,使用gzip在很大程度上提升了速度。

想要了解更多关于Nginx等开源信息教程,请前往腾讯云+社区学习更多知识。

参考文献:《How To Add the gzip Module to Nginx on CentOS 7》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • 准备
      • 第一步 - 创建测试文件
        • 第二步 - 检查默认行为
          • 第三步 - 启用和配置Nginx的gzip模块
            • 第四步 - 验证新配置
              • 结论
              相关产品与服务
              云开发 CloudBase
              云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档