NGINX为ngx.capture.location方法调用提供了奇怪的响应输出



我正在使用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 个字符时,我都会得到以下奇怪的身体输出

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

如果我在 PHP 代码中的输出字符较少,那么我会得到正确的输出,如下所示(在以下情况下只有三个 php 回声线(

status: 200 result: 0123456789012345678901234567890123456789 

你知道为什么会这样吗?

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

我在这个问题上挣扎了很多天。但最后我自己找到了解决方案。这里的问题非常简单,它与 PHP/apache 有关。

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

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

最新更新