Centos7 Nginx 1.14 开启gzip 反向代理后的疑惑

1. 系统环境

[root@marking-srv-n1 ~]# uname -a
Linux marking-srv-n1 3.10.0-693.21.1.el7.x86_64 #1 SMP Wed Mar 7 19:03:37 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

[root@marking-srv-n1 ~]# nginx -v
nginx version: nginx/1.14.0

2. 配置nginx.conf 开启gzip 项目已经被反向代理过一层了!

gzip  on;
gzip_min_length 1k;
gzip_buffers  4 8k;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain text/css application/json application/javascript text/javascript text/xml application/xml application/xml+rss font/ttf;

3. 问题及解决办法

  1. 在刚开是的时候配置完成后,重新启动 nginx 后发现页面响应头并没有返回 Content-Encoding: gzip 很明显gzip没有生效
  2. 排查错误以为是 gzip_types 少写了,反复对比后发现确实没有问题
  3. 然后 就google google google 终于找到两篇文章 配置大概如下
#gzip压缩功能设置
gzip on; #开启Gzip
gzip_min_length 1k; #不压缩临界值,大于1K的才压缩,一般不用改
gzip_buffers    4 16k; #缓冲
gzip_http_version 1.0; 就是这句话没搞明白 #用了反向代理的话,末端通信是HTTP/1.0,有需求的应该也不用看我这科普文了;有这句的话注释了就行了,默认是HTTP/1.1
gzip_comp_level 2; #压缩级别,1-10,数字越大压缩的越好,时间也越长,看心情随便改吧
gzip_types text/plain application/x-javascript text/css application/xml application/javascript application/x-font-woff image/jpeg image/gif image/png;进行压缩的文件类型,缺啥补啥就行了,JavaScript有两种写法,最好都写上吧,总有人抱怨js文件没有压缩,其实多写一种格式就行了
gzip_vary on;跟Squid等缓存服务有关,on的话会在Header里增加"Vary: Accept-Encoding"
gzip_disable "MSIE [1-6]\.";#IE6对Gzip不怎么友好,不给它Gzip了
#开启gzip
gzip  on;
#压缩临界值,大于1k文件压缩
gzip_min_length 1k;
#额,这个我再查查
gzip_buffers 4 16k;
#我用了反向代理,所以是Http/1.0  ???为卅啊 原因 google 也没找到 反正这么改了就对了
#gzip_http_version 1.1;
#压缩级别,数字越大压缩越高耗时越久
gzip_comp_level 5;
#压缩的文件类型
gzip_types text/plain application/x-javascript text/javascript application/javascript text/css application/xml application/x-httpd-php image/jpeg image/gif image/png image/jpg;
#开启后Header会增加Vary描述
gzip_vary off;
  1. 解决办法(由于我的应用是被nginx反向代理过一层所以讲gzip的gzip_http_version改为1.0即可)
gzip  on;
gzip_min_length 1k;
gzip_buffers  4 8k;
gzip_http_version 1.0; 这里改成1.0就解决了。
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain text/css application/json application/javascript text/javascript text/xml application/xml application/xml+rss font/ttf;
  1. 虽然解决了但还是有疑问
说nginx反向代理后 协议变成http 1.0了,于是将gzip_http_version改为1.0 重启后生效。但是查看响应头http协议却是1.1?
响应头信息
HTTP/1.1 200 OK
Server: openresty
Date: Fri, 20 Jul 2018 02:16:59 GMT
Last-Modified: Thu, 19 Jul 2018 10:15:03 GMT
Content-Type: text/css
ETag: W/"5b5064a7-177df"
Content-Encoding: gzip

4. 以下是两篇文章的原文出处

5. 其实只是找到解决方法,原理还是没懂!