【问题标题】:NGINX gives strange response output for ngx.capture.location method callNGINX 为 ngx.capture.location 方法调用提供了奇怪的响应输出
【发布时间】:2017-08-07 21:29:45
【问题描述】:

我正在使用 NGINX 调用另一个 apache/PHP 服务。以下是我的 NGINX 代码,

 location /hello {

    content_by_lua_block {
        res = ngx.location.capture("/forward2");
        ngx.say("status: " .. res.status);
        ngx.say("result: " .. res.body);
    }
}

location /forward2{

    proxy_pass http://127.0.0.1:2002/index2.php;
}

我有一个非常简单的php代码,

<?php 

    echo "123456789";
    echo "123456789";
    echo "123456789";
    echo "123456789";
    echo "123456789";
    echo "123456789";

我的问题是,当我超过 php sctpt 中的输出字符数超过 65 个字符时,我会得到以下奇怪的 body 输出

   status: 200 result: ‹30426153·°4Ò,@£)AÈ  

如果我在 PHP 代码中的输出字符较少,那么我得到正确的输出如下,(在以下情况下只有三个 php echo 行)

status: 200 result: 0123456789012345678901234567890123456789 

你知道为什么会这样吗?

注意:如果我直接访问 php(不是通过 NGINX),我总是能得到任意数量的字符的正确输出。

【问题讨论】:

    标签: php nginx lua


    【解决方案1】:

    我为这个问题苦苦挣扎了很多天。但最后我自己找到了解决方案。这里的问题很简单,和PHP/apache有关。

    如果超过 60 个字符,Apache 将自动使用 gzip 编码。所以我不能只是从 nginx 服务器回显该输出。在 NGINX 服务器中必须有一种方法来处理这个问题。但现在我只是使用以下代码行从 PHP 禁用 gzip 编码。

    apache_setenv('no-gzip', '1');
    

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 2018-11-10
      • 1970-01-01
      相关资源
      最近更新 更多