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