Nginx 如何启用 gzip 压缩提高网站性能(Nginx 开启 gzip 压缩)

网站的加载速度,与用户浏览器要下载的文件的大小密切相关。减小网站要传输文件的大小,可以提升网站的加载速度。

Nginx 如何启用 gzip 压缩提高网站性能
Nginx 如何启用 gzip 压缩提高网站性能

gzip是一种流行的数据压缩方法。我们可以配置 Nginx 以启用gzip压缩,进而压缩网站文件的大小。由于gzip压缩方式原因,某些类型的文件比其他类型文件的压缩效果更好。例如,文本文件压缩得非常好,通常会缩小两倍以上。然而,对于 JPEG 或 PNG 等图像文件,Gzip 的压缩效果并不十分明显。

在本文中,我们将介绍 Nginx 如何体用gzip压缩。

第 1 步 – 创建测试文件

在这一步中,我们将在默认的 Nginx 目录中创建几个测试文件。稍后我们将使用这些文件来检查 Nginx 的gzip压缩效果。

使用truncate在 Nginx 目录中创建一个名为test.html的文件。这个扩展名表示它是一个 HTML 页面:

sudo truncate -s 1k /var/www/html/test.html

我们以相同的方式再创建几个测试文件:一个jpg图像文件、一个css样式表和一个jsJavaScript 文件:

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

第 2 步 — 检查默认行为

让我们检查一下名为test.htm的 HTML 文件是否经过压缩。使用下面的命令从我们的 Nginx 服务器请求一个文件,并通过 HTTP 标头 ( Accept-Encoding: gzip)指定以gzip进行压缩:

curl -H "Accept-Encoding: gzip" -I http://localhost/test.html

作为响应,应该会看到下面的几个 HTTP 响应标头:

Output
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Tue, 09 Feb 2021 19:04:25 GMT
Content-Type: text/html
Last-Modified: Tue, 09 Feb 2021 19:03:41 GMT
Connection: keep-alive
ETag: W/"6022dc8d-400"
Content-Encoding: gzip

在最后一行,您可以看到Content-Encoding: gzip的响应头。这告诉我们在发送这个文件时启用了gzip压缩。

默认情况下,Nginx 只压缩 HTML 文件。其他所有文件都将以未压缩的形式提供。为了验证这一点,您可以请求名为test.jpg的测试图像:

curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg

结果应该与以前面略有不同:

Output
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Tue, 09 Feb 2021 19:05:49 GMT
Content-Type: image/jpeg
Content-Length: 1024
Last-Modified: Tue, 09 Feb 2021 19:03:45 GMT
Connection: keep-alive
ETag: "6022dc91-400"
Accept-Ranges: bytes

输出中没有Content-Encoding: gzip响应头,这意味着该文件没有进行任何压缩。

还可以继续测试 CSS 样式表文件:

curl -H "Accept-Encoding: gzip" -I http://localhost/test.css

从响应头可以看出,CSS 文件同样没有进行压缩:

Output
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Tue, 09 Feb 2021 19:06:04 GMT
Content-Type: text/css
Content-Length: 1024
Last-Modified: Tue, 09 Feb 2021 19:03:45 GMT
Connection: keep-alive
ETag: "6022dc91-400"
Accept-Ranges: bytes

在下一步中,我们将进行配置和启用GZIP压缩。

第 3 步 — 配置 Nginx 的gzip设置

要启用 Nginx gzip配置,请使用nano或者任意的文本编辑器中打开主 Nginx 配置文件:

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 on指令,这说明已经启用了gzip压缩,但是有几个附加指令用#符号注释掉了。我们将对其进行一些更改:

  • 通过删除对应注释行前面的#,来取消相关指令的注释。
  • 添加gzip_min_length 256;指令,告诉 Nginx 不要压缩小于 256 字节的文件。因为非常小的文件压缩也没什么效果。
  • gzip_types指令中附加 Web 字体、图标、XML 提要、JSON 结构化数据和 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
  application/atom+xml
  application/geo+json
  application/javascript
  application/x-javascript
  application/json
  application/ld+json
  application/manifest+json
  application/rdf+xml
  application/rss+xml
  application/xhtml+xml
  application/xml
  font/eot
  font/otf
  font/ttf
  image/svg+xml
  text/css
  text/javascript
  text/plain
  text/xml;
. . .

保存并关闭文件。

要应用新配置,需要重启 Nginx:

sudo systemctl restart nginx

接下来,让我们看看新配置是否有效。

第 4 步 — 验证新配置

执行下面的命令测试 HTML 文件:

curl -H "Accept-Encoding: gzip" -I http://localhost/test.html

该文件类型已启用压缩,因此响应将和前次相同:

Output
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Tue, 09 Feb 2021 19:04:25 GMT
Content-Type: text/html
Last-Modified: Tue, 09 Feb 2021 19:03:41 GMT
Connection: keep-alive
ETag: W/"6022dc8d-400"
Content-Encoding: gzip

然后,我们请求之前未压缩的 CSS 样式表,来看看 CSS 文件是否被压缩:

curl -H "Accept-Encoding: gzip" -I http://localhost/test.css

从响应头可以看出,CSS 文件已进行gzip压缩:

Output
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Tue, 09 Feb 2021 19:21:54 GMT
Content-Type: text/css
Last-Modified: Tue, 09 Feb 2021 19:03:45 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: W/"6022dc91-400"
Content-Encoding: gzip

在第1步中创建的所有测试文件中,只有test.jpg图像文件处于未压缩状态。我们可以用同样的方法来测试:

curl -H "Accept-Encoding: gzip" -I http://localhost/test.jpg

会发现图像文件没有被gzip压缩:

Output
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Tue, 09 Feb 2021 19:25:40 GMT
Content-Type: image/jpeg
Content-Length: 1024
Last-Modified: Tue, 09 Feb 2021 19:03:45 GMT
Connection: keep-alive
ETag: "6022dc91-400"
Accept-Ranges: bytes

因为 Gzip 对图像的压缩效果并不好,所以我们也无需为图像开启 Gzip 压缩。

总结

综上,牛奇网介绍了如何为 Nginx 开启 Gzip 压缩。Gzip 对于文本文件的压缩效果非常好,但是对于图像文件的压缩非常有限。

作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/nginx-enable-gzip-and-improve-website-performance/

(0)
牛奇网牛奇网
上一篇 2022年7月2日 上午11:35
下一篇 2022年7月2日 下午7:37

相关推荐

发表回复

登录后才能评论
很多新手不知道如何选择外贸独立站主机,这里推荐一款使用量最大,性价比最高的国外独立站主机Hostinger,立即获取优惠