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,問題已經解決了,如果還有其它文件類型沒有被壓縮所以參考這個方法就可以解決的。

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