如何从PHP禁用nginx gzip?

时间:2016-12-11 12:40:04

标签: php nginx gzip

我正在试图阻止nginx解压缩单个PHP请求。我已经有了以下内容:

    @ini_set('zlib.output_compression', 'Off');
    @ini_set('implicit_flush', 1);
    header('X-Accel-Buffering: no');

根据我发现的所有内容,X-Accel-Buffering单独禁用gzip,但是当我从浏览器加载此页面时,我仍然可以看到标题:

Content-Encoding:gzip

我正在使用php7-fpm,nginx 1.10.1,debian8

编辑:

我使用sleep()进行测试以延迟输出。它看起来像header('X-Accel-Buffering: no');正在工作,但它只能阻止缓冲而不是gzipping。我猜gzipping以某种方式作为流工作。

我可以看到,如果我输出1,000个字节,循环遍历每个1个字符的echo语句,浏览器接收大约11kb。如果我回显str_rep x 1000,则发送的数据要少得多。那里肯定有一些开销。

无论如何,我需要禁用gzip以便我可以发送大量内容并测量下载时间。如果它被压缩,我不知道实际吞吐量是多少。

2 个答案:

答案 0 :(得分:4)

如果在回答中找到Content-Encoding标头,Nginx将无法运行gzip过滤器。因此,您可以在后端设置Content-Encoding: identity标头,并且nginx会在没有gzip进程的情况下将其传递给客户端。 identity表示"未编码"。

答案 1 :(得分:0)

我没有找到任何明确禁用它的方法,但我确实发现有一个默认的mime类型列表将由gzip模块编码。

由于不必读取数据并且只是作为速度测试发送,因此将内容类型更改为除该列表之外的任何内容都将阻止对其进行gzip压缩。

header('Content-Type: raw/data');