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,问题已经解决了,如果还有其它文件类型没有被压缩所以参考这个方法就可以解决的。