Назад | Перейти на главную страницу

Комета с uwsgi и nginx, как отключить выходной буфер?

Как я могу запретить Nginx буферизовать вывод моего приложения uwsgi? Для моего приложения в стиле кометы я использую длинный опрос, и теперь запросы буферизуются.

Я пытался уменьшить размер буферов, но мне нельзя ставить uwsgi_buffer_size и uwsgi_buffers на 0. Также uwsgi_max_temp_file_size не работает (хотя в руководстве это сказано).

Как я могу это сделать?

Еще несколько минут назад это было невозможно. nginx всегда буферизует все ответы uwsgi и scgi, и никакая конфигурация этого не изменит.

у меня есть отправил патч для nginx (и это было принято), и со следующей версии есть два метода отключения буферизации для запросов uwsgi:

  • ставить uwsgi_buffering off в конфиге nginx
  • Отправить X-Accel-Buffering заголовок "нет" в ответ

uwsgi никогда не буферизует ответ, поэтому на этом конце настройки не требуется.

Почему бы вам не использовать встроенный http-маршрутизатор / балансировщик нагрузки uwsgi напрямую? Он не выполняет буферизацию, особенно для приложений кометы / веб-сокетов. Вы можете использовать nginx для статических файлов, отображающих их в другой домен.

Попробуйте с uwsgi_max_temp_file_size = 0

В модуле "прокси" Nginx есть директива для этого, она называется proxy_buffering on|off, который делает именно то, что вы хотите, он отключает буферизацию и синхронно передает исходящий поток прокси. Но AFAIK его нет ни в модулях FastCGI, ни в UWSGI.

Кстати, даже когда proxy_buffering является off, вы можете заметить небольшие задержки из-за буферизации стека TCP ОС.