Я использую nginx в качестве обратного прокси-сервера перед сервером uWSGI (флеш-приложения).
Из-за утечки памяти используйте --max-requests
для перезагрузки рабочих после стольких вызовов.
Проблема заключается в следующем: когда работник только перезапускается / запускается, первый полученный запрос остаетсязависание между uWSGI и NGINX, время обработки внутри приложения фляги обычное и очень быстрое, но клиент ждет, пока не запустится uwsgi_send_timeout
.
Использование tcpdump для просмотра запроса (nginx - XXX.14 и uWSGIXXX.11): ![tcpdump communcation between nginx XXX.14 and uWSGI XXX.11](https://i.stack.imgur.com/sMjum.png)
В столбце времени видно, что он зависает на 300 секунд (uwsgi_send_timeout), несмотря на то, что NGINX получил запрос HTTP ... uWSGIпросто не отправляет пакет [FIN], чтобы сообщить, что соединение закрыто.Затем NGINX запускает тайм-аут и закрывает сеанс.
Конечный клиент получает усеченный ответ. С кодом состояния 200.что очень расстраивает.
Это происходит при каждой перезагрузке работника, только один раз, при первом запросе, независимо от размера запроса.
Есть ли у кого-нибудь решение этой проблемы?я что-то неправильно настроил?
uwsgi.ini
[uwsgi]
# Get the location of the app
module = api:app
plugin = python3
socket = :8000
manage-script-name = true
mount = /=api:app
cache2 = name=xxx,items=1024
# Had to increase buffer-size because of big authentication requests.
buffer-size = 8192
## Workers management
# Number of workers
processes = $(UWSGI_PROCESSES)
master = true
# Number of requests managed by 1 worker before reloading (reload is time expensive)
max-requests = $(UWSGI_MAX_REQUESTS)
lazy-apps = true
single-interpreter = true
nginx-server.conf
server {
listen 443 ssl http2;
client_max_body_size 50M;
location @api {
include uwsgi_params;
uwsgi_pass api:8000;
uwsgi_read_timeout 300;
uwsgi_send_timeout 300;
}