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

介绍

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

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》

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WindCoder

Windows 7下硬盘安装Ubuntu 13.10图文教程

之前一直在虚拟机里玩Linux了,昨天忽然兴起想往真机里装一个,昨天找到的方法,今天折腾了半天终于装好啦。

2291
来自专栏Java3y

HTTP就是这么简单

为什么要学HTTP? 我们绝大多数的Web应用都是基于HTTP来进行开发的。我们对Web的操作都是通过HTTP协议来进行传输数据的。 简单来说,HTTP协议就是...

3193
来自专栏L宝宝聊IT

MFS搭建分布式文件系统

1816

使用wget命令在命令行下下载资源

wget是一个命令行实用程序,它从Internet检索文件并将它们保存到本地文件系统。任何可以通过HTTP或FTP协议访问的文件都能利用wget进行下载。wge...

1.1K3
来自专栏散尽浮华

完整部署CentOS7.2+OpenStack+kvm 云平台环境(6)--在线调整虚拟机的大小

前面提到过openstack环境部署及创建虚拟机的完整过程,然后有时候会发现创建的虚拟机规格太小,满足不了业务需求;亦或是虚拟机规格太大,容易造成资源浪费。 于...

2799
来自专栏小狼的世界

利用PHP的Popen实现RRDTOOL作图的动态输出

最近看了一下RRDTOOL如何作图,语法确实比较繁琐,但不是太难。命令行下执行的时候,每次都需要输出成为一个文件。我们希望做一个应用,能够动态生成图表,看了看C...

1383
来自专栏我爱编程

conda常用命令

转载自阿达发go的博客conda常用命令:更新,创建,激活,关闭,查看,卸载,删除,清理

1.4K2
来自专栏蓝天

thrift使用小记

    Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL...

1511
来自专栏木可大大

XSS攻击与防范

XSS攻击,又称为CSS(Cross Site Scripting),由于CSS已经被用作层叠样式表,为了避免这个冲突,我们将Cross缩写成X。XSS攻击的中...

851
来自专栏IMWeb前端团队

前端资源版本控制的那些事儿

本文作者:IMWeb 李冬冬 原文出处:IMWeb社区 未经同意,禁止转载 先来个最原始的页面,比如下面的index.html中,引入了css和js资...

4426

扫码关注云+社区

领取腾讯云代金券