nginx开启gzip压缩功能遇到的坑

nginx开启gzip压缩功能一大堆,网上大多数配置如下:

server {
  listen 8080;
  proxy_http_version 1.1;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    #gzip_http_version 1.0;
    gzip_comp_level 8;
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary off;
    gzip_disable "MSIE [1-6]\.";

  location / {
    index  index.html index.htm;
    root   /home/xiaoju/land-ui/dist/;
    try_files $uri $uri/ /index.html;

  }

}

今天由于项目需要,配置后实测不生效,经过一翻排查,问题最终锁定在了gzip_types类型上,确保覆盖了你希望压缩的文件类型,我把这边的问题定位思路缕一下,如果你也遇到了也许能够帮忙到你。

问题根本原因分析:

$ curl -I -H "Accept-Encoding: gzip, deflate" "http://localhost:8080/antd.dll.js"
HTTP/1.1 200 OK
Server: nginx/1.15.0
Date: Wed, 22 Aug 2018 07:56:54 GMT
Content-Type: application/javascript
Content-Length: 1414757
Last-Modified: Wed, 22 Aug 2018 02:43:33 GMT
Connection: keep-alive
ETag: "5b7ccdd5-159665"
Accept-Ranges: bytes

返回结果里没有 Content-Encoding: gzip ,所以可以肯定的gzip配置后没有生效,会发现reponse header里的值是application/javascript ,而我们配置的gzip_types是不包含这种类型的。所以解决办法也很简单,修改其中的内容行:

    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;

进一步验证下修改后的情况(修改后记得执行 nginx -s reload 哟)

$ curl -I -H "Accept-Encoding: gzip, deflate" "http://localhost:8080/antd.dll.js"
HTTP/1.1 200 OK
Server: nginx/1.15.0
Date: Wed, 22 Aug 2018 08:12:23 GMT
Content-Type: application/javascript
Last-Modified: Wed, 22 Aug 2018 02:43:33 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: W/"5b7ccdd5-159665"
Content-Encoding: gzip

OK,问题已经解决了,如果还有其它文件类型没有被压缩所以参考这个方法就可以解决的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章