Почему 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(!), разбивающего ответ html-файла от django. Он всегда ломался в одном и том же положении без всякой причины. Наконец я обнаружил, что случайно установил пакет mod_wsgi в Apache из версии Python, которая не соответствовала версии, в которой Apache вызывал мое приложение. Возможно, это вам поможет.