1.4 KiB
1.4 KiB
2026-07-10 — Ответ Соннета: Werkzeug dev server + chunked TE = гонка
Диагноз
Werkzeug dev server не умеет корректно работать с chunked transfer encoding от nginx.
При proxy_request_buffering: off nginx шлёт тело чанками.
Flask отвечает Connection: close → nginx ещё шлёт чанк → RST → таймаут.
nginx:alpine держит keep-alive → проблемы нет.
Решение
Gunicorn вместо Werkzeug dev server. Правильно де-чанкует тело, держит persistent connections.
Способ
Shturval запускает python app.py. Вместо app.run() — Gunicorn через Python API:
if __name__ == '__main__':
import gunicorn.app.base
class StandaloneApp(gunicorn.app.base.BaseApplication):
def __init__(self, app, options=None):
self.application = app
self.options = options or {}
super().__init__()
def load_config(self):
for k, v in self.options.items():
self.cfg.set(k, v)
def load(self):
return self.application
StandaloneApp(app, {
'bind': '0.0.0.0:5000',
'workers': 2,
'timeout': 300,
}).run()
requirements.txt уже содержит gunicorn. Dockerfile CMD можно убрать (Shturval всё равно переопределяет).