如何在Linux或Unix系统上的Nginx服务器中启用gzip压缩

时间:2020-01-09 14:17:06  来源:igfitidea点击:

如何在nginx Web服务器上为JS/CSS/HTML文件启用gzip压缩?
如何在Ubuntu Linux服务器上的Nginx中启用gzip/deflate?
如何在FreeBSD Unix服务器上使用NGINX Web服务器配置gzip压缩?
您需要使用ngx_http_gzip_module模块。
它使用gzip方法压缩所有有效的HTTP响应(文件)。
这对于减小数据传输大小并加快静态资产(例如JavaScript,CSS文件等)的网页很有用。
本教程说明了如何在Linux或类似Unix的系统上运行的nginx中启用gzip/deflate。

在Nginx服务器中启用gzip压缩的步骤

编辑您的nginx.conf文件或创建一个名为/etc/nginx/conf.d/static_gzip.conf的新配置文件:

$ sudo vi /etc/nginx/nginx.conf

在http上下文中添加以下内容:

##
        # 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/javascript text/xml application/xml application/xml+rss text/javascript;
        # Specify the minimum length of the response to compress (default 20)
        gzip_min_length 500;

保存并关闭文件。
确认配置文件中没有错误:

$ nginx -t

sh nginx:配置文件/etc/nginx/nginx.conf的语法正常。
nginx:配置文件/etc/nginx/nginx.conf测试成功。

重启nginx服务器

执行以下命令以重新启动或重新加载nginx服务器:

$ sudo service nginx reload

或者

$ sudo systemctl reload nginx

或者

$ sudo /etc/init.d/nginx reload

如何验证gzip/deflate是否正常工作?

使用以下语法:

$ curl -I -H 'Accept-Encoding: gzip,deflate' https://your-domain-here/file.css
$ curl -I -H 'Accept-Encoding: gzip,deflate' https://s0.theitroad.org/assets/auto/cms/wp-content/cache/autoptimize/css/autoptimize_4c2bea242e2386438912dd88773b352c.css
$ curl -I -H 'Accept-Encoding: gzip,deflate' https://www.theitroad.local/

输出示例:

HTTP/1.1 200 OK
Server: nginx
Date: Sun, 05 Mar 2016 18:45:31 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Whom: l1-com-cyber
Strict-Transport-Security: max-age=15768000; includeSubdomains
Link: ; rel="https://api.w.org/"
X-Varnish: 1812270 1794298
Age: 475
Via: 1.1 varnish-v4
Front-End-Https: on
Content-Encoding: gzip

如果您的原始Nginx服务器在CDN/WAF之后,请尝试:

$ curl -H 'Accept-Encoding: gzip,deflate' \
--resolve s0.theitroad.org:YOUR-ORIGIN-Public-IPv4-HERE \
-H 'Host: s0.theitroad.org' https://s0.theitroad.org/

了解Nginx ngx_http_gzip_module选项

  • gzip on:启用或禁用Nginx下的响应gzipping。
  • gzip_disable" msie6":禁用Microsoft IE6客户端的gziping。
  • gzip_vary on:启用或禁用插入Vary:Accept-Encoding响应头。此标头通知浏览器客户端是否可以处理网站的压缩版本,尤其是当您的Nginx服务器位于CDN或其他反向缓存服务器之后。
  • gzip_proxied any:确保我们为所有代理请求启用压缩。
  • gzip_comp_level 6:我们可以设置响应的gzip压缩级别。可接受的值范围是1(最小)到9(最大)。
  • gzip_buffers 16 8k
  • gzip_http_version 1.1:设置压缩响应所需的最低HTTP请求版本。
  • gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml + rss text/javascript:除了text/html之外,还可以对指定的MIME类型的响应进行gziping处理。特殊值*匹配自Nginx版本0.8.29起的任何MIME类型。 text/html类型的响应始终被压缩。

Nginx gzip与纯文本大小

首先,下载纯文本文件:

$ URL="https://www.theitroad.local/"
$ curl -s --output text $URL

接下来,下载压缩后的文本文件:

$ curl -s --output compressed -H 'Accept-Encoding: gzip,deflate' $URL

使用ls命令比较文件大小:

$ ls -l text compressed
$ ls -lh text compressed
$ file text compressed

比较普通文件/文本文件和压缩文件的文件大小。