为什么 Nginx 会截断 JSON 流响应?

为什么 Nginx 会截断 JSON 流响应?

我们的堆栈是Client(Browser) <-> Nginx Reverse Proxy <-> Webserver(Flask+Gunicorn) <-> Golang gRPC server

问题是,当客户端调用/realtimedata端点时,Flask 会打开 gRPC 连接并开始通过服务器->客户端单向流接收数据。然后它将数据传回客户端。当我不使用 Nginx 运行此程序时,我会获得所有响应。当使用 Nginx 运行时,某些响应会被截断。例如,如果我们预期:

{
    "source": "serviceA",
    "timestamp": 123456789,
    "data": {
        "1": 24.55667,
        "2": -456.5656,
        ...
        "200": 5.678
    }
}

我们得到

{
    "source": "serviceA",
    "time

然后

        stamp": 123456789,
    "data": {
        "1": 24.55667,
        "2": -456.5656,
        ...
        "200": 5.678
    }
}

这将打印在 console.log 中。我已经proxy_buffering off;在 nginx 配置中进行了此设置,否则不会有任何数据进入浏览器。不确定如何解决这个问题。

这里是一个最小的、可重复的例子。

更新: 我已经使用 Apache2 而不是 Nginx 运行了最小可重现示例,并遇到了相同的随机截断。

答案1

我也遇到过类似的问题,Apache(!) 会破坏来自 django 的 html 文件响应。它总是无缘无故地在同一位置中断。我最终发现,我无意中将 mod_wsgi 包从与 Apache 调用我的应用程序的版本不匹配的 Python 版本安装到了 Apache 中。也许这对你有帮助。

相关内容