Почему 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 вызывал мое приложение. Возможно, это вам поможет.

Другие вопросы по тегам