我们的堆栈是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 中。也许这对你有帮助。