「Nginx」- 配置 GZIP 压缩

  CREATE BY JENKINSBOT
原文链接:「Nginx」- 配置 GZIP 压缩
文章分类:「Web_Server_and_Load_Balancing:Nginx_and_Tengine:3.Administration_and_Configuration:Gzip_Compression」
文章标识:「c1d86af5」

通过压缩,可以减少网络传输。压缩的大致流程如下:

用户请求资源文件 => Nginx 压缩被请求的文件 => Nginx 响应被压缩的文件 => 浏览器解压被压缩的文件 => 用户得到资源文件

压缩带来的优点:
1)减小传输文件的大小
2)节约带宽资源
3)提高资源响应速度

压缩带来的缺点:
1)服务端压缩需要消耗 CPU 资源;
2)客户端解压需要消耗 CPU 资源;

配置压缩

配置压缩需要使用 ngx_http_gzip_module 模块,下面是实例配置:

gzip  on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/html text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml;

# make sure gzip does not lose large gzipped js or css files
# https://web.archive.org/web/20080301065334/http://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl
gzip_buffers 16 8k;

# Disable gzip for certain browsers.
gzip_disable “MSIE [1-6].(?!.*SV1)”;

# 
gzip_min_length 20;

测试压缩

使用 CURL 测试 GZIP 压缩是否生效,如果相应中包含 Content-Encoding: gzip 则表示开启成功。如下示例:

# curl --head --header "Accept-Encoding: gzip" "https://example.com/path/to.js"
HTTP/1.1 200 OK
Date: Wed, 20 May 2020 08:10:33 GMT
Content-Type: application/javascript
Last-Modified: Wed, 20 May 2020 02:04:22 GMT
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: max-age=315360000
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Encoding: gzip

使用 Firefox 测试

在 Firefox 中,Network 的 Transferred 与 Size 字段将显示文件的传输大小与实际大小。如果成功开启 GZIP,则 Transferred < Size。

注意事项

部分文件无需启用压缩功能:
1)像图片、视频等资源,文件格式本身已经是压缩格式。再次压缩的效果会不明显,因此不建议压缩。
2)文件压缩会消耗 CPU 资源,需要对比压缩效率,才能决定是否需要压缩。

参考文献