如何判断nginx代理的站点是否开启了Gzip压缩?

今天刚开始研究nginx和它的gzip压缩功能,从官网下载了一个 windows 稳定版本的 nginx,然后解压到c盘,通过cmd,执行start nginx,然后在浏览器地址栏输入http://localhost,可以看到如下界面:

图片描述

至此,可以证明nginx已经开发发挥作用了,然后网上查了一些配置信息,并修改C:\nginx-1.12.2\conf\nginx.conf文件,在http节点添加如下配置:

    gzip  on;
    gzip_comp_level 4;
    gzip_buffers  4 16k;   
    gzip_types text/plain  text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript; 
    #gzip_min_length 1k;
    gzip_http_version 1.1;

再次访问http://localhost,并通过f12监听该请求,在response头并没有发现任何gzip的蛛丝马迹(印象用,有的站点相应存在过gzip字眼),请问,我错在什么地方呢?我做这些简单的操作如何能证明gzip已经开始生效了呢?

阅读 17.6k
5 个回答

nginx输出gzip有很多条件:

  1. 开启了gzip:gzip on;
  2. gzip_types定义了content-type,需要注意的是text/html是强制性的,不需要也不能再添加
  3. 这个响应输出的content-typegzip_types
  4. 输出的content-length大于等于nginx配置的gzip_min_length,默认是20字节
  5. 请求头需要有accept-encoding并且值包含gzip

以上是相关配置
通过浏览器的开发者工具可以查看,也可以使用命令行工具
比如curl http://example.com/index.html --compressedcurl--compressed参数会在请求头加上Accept-Encoding: deflate, gzip

需要看响应的body大小,可以用curl -v,会打印相关信息
也可以用curl -w "%{size_download}"

问题解决了~~哈哈哈哈哈

非常谢谢各位的帮助。。。

1、首先 npm run build 打包一个项目;
2、nodejs 安装 pm2,网上找了一个壳,把打包好的项目扔进去,配置好,通过 pm2 start index.js启动该项目,并且成功;
3、修改本地 hosts 文件,为站点带来一个域名(site.com)和ip(192.168.3.3:5050)(ip默认好像是本地ip,端口是vue项目配置的端口,这一点我还有点晕,有时间再整理一下);
4、修改nginx配置文件,使用户可以通过刚才的域名 site.com访问到nginx访问到192.168.3.3,配置文件如下:

http 节点:(主要 gzip ongzip_types这两行)

    gzip  on;
    gzip_comp_level 4;
    gzip_buffers  4 16k;   
    gzip_types text/plain  text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript; 
    #gzip_min_length 1k;
    gzip_http_version 1.1;

server 节点:(将 site.com:80 请求转发到 http://192.168.3.3:5050)

        listen       80;#端口
        server_name  site.com;#域名

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            #root   html;
            #index  index.html index.htm;
            proxy_pass    http://192.168.3.3:5050;#pm2 跑起来的地址
            proxy_redirect default ;
        }

上图压缩效果:

图一:未压缩的请求
图片描述

图二:压缩后的请求

图片描述

浏览器端查看响应
clipboard.png

更新

看到有其他回答说text/html是强制性不需要额外配置,我对nginx还不够熟悉,下面的答案只是我自己猜测,如果错误的话请参考其他答案

你检查的response头是html文档吗?
如果是的话,问题大概是html文档的content-typetext/html,并不在你配置的
gzip_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

curl --verbose "http://xxx" 或者 curl --dump-header - "http://xxx"

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题