24 lines
1.1 KiB
Markdown
24 lines
1.1 KiB
Markdown
# 2026-07-10 — Финальный ответ: Werkzeug Connection: close
|
||
|
||
## Корень
|
||
Werkzeug dev-сервер ВСЕГДА закрывает TCP-соединение после ответа (`Connection: close`).
|
||
nginx должен создавать НОВЫЙ TCP на каждый запрос → Cilium conntrack cycling → intermittent failure.
|
||
|
||
nginx:alpine держит `Connection: keep-alive` → 1 TCP на все запросы → 10/10.
|
||
|
||
## Почему все тесты такие
|
||
| Тест | Результат | Причина |
|
||
|------|-----------|---------|
|
||
| nginx:alpine | 10/10 | keep-alive, 1 TCP |
|
||
| Flask | 2-5/10 | close, N TCP |
|
||
| Gunicorn sync | 1/10 | тоже close + ошибка конфига |
|
||
| upstream-keepalive=0 | 0/10 | даже keepalive запрещён |
|
||
| внутри кластера | 10/10 | другой code path Cilium |
|
||
| свежий деплой 10/10 | чистый conntrack |
|
||
|
||
## Решение
|
||
Gunicorn с gevent worker (поддерживает keepalive):
|
||
```
|
||
gunicorn -w 2 -k gevent --keep-alive 75 --timeout 120 --bind 0.0.0.0:5000 app:app
|
||
```
|