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

时间:2017-03-16 15:40:41

标签: php nginx lua

我正在使用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),我总是得到任意数量字符的正确输出。

1 个答案:

答案 0 :(得分:0)

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

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

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