TGViewer
ZVLB. Tech ZVLB. Tech @zvlbtech · 183 subscribers
Post #92 307
Думаю все концептуально понимают чем отличается nginx (или angie) restart от reload. Но все же давайте разберем отличия и подводные камни.

Базово:
systemctl restart nginx - по сути делает stop → start.
То есть Nginx Master процесс получает сигнал SIGTERM, что приводит к моментальному убийству всех воркеров. Клиенты активных на момент рестарта соединений получают ошибки Connection reset

nginx -s reload в свою очередь отправляет Master процессу сигнал SIGHUP. Nginx Не убивает Master и его Worker-процессы, а стартует новый Master с новой конфигурацией, который начинает обрабатывать все новые соединения. Старые процессы завершаются только после обработки всех актичных соединений (graceful shutdown).

Но самое интересно происходит на "пограничных" ситуациях.
Что будет происходить, если у вас есть запросы с долгими (условно вечными) соединениями? (websocket? gRPC?)
А если у вас часто изменяется конфигурация и часто выполняется reload?

А будет следующее:
1. Старые воркеры не завершатся, пока клиенты не закроют соединения.
2. Будут запускаться новые воркеры с обновлённым конфигом.
3. Итог: В системе теперь два набора воркеров — старые (с висящими соединениями) и новые (для новых запросов).

А если делать reload каждую минуту? Через час у вас будет 60 наборов воркеров, жрущих память и CPU. Красота)

Возможные решения:

1. Настроить пару параметров для обработки долгих соединений:
proxy_read_timeout 1h;  # Закрывать соединение, если данные не приходят час.
keepalive_timeout 10m; # Не давайте соединениям висеть сутками.


2. Если обрывы долгих соединений приводят к проблемам в эксплуатации - это на 99.9% проблема кода и обработки разрыва соединений.

3. Если вам действительно нужно часто делать reload возможно стоит вынести изменяемые параметры в Lua

4. Возможно стоит отказаться от nginx в пользу условного Envoy, но таким образом решая проблему обрыва долгих соединений вы создаете себе огромную кучу других проблем)

Почитать подробнее про обработку Nginx'ом различных сигналов можно ТУТ

#nginx #zvlb_article
  • 🔥 2
  • ❤ 1
More from @zvlbtech
  1. Jul 9, 2026Если у вас в кластере много объектов - дефолтные --kube-api-qps/--kube-api-burst у kube-co…
  2. Jun 26, 2026Наткнулся на очередную статью: «Zero-Downtime Deployments with Docker Compose — No Kuberne…
  3. Jun 23, 2026Четыре безобидные по отдельности вещи: - reload nginx, - долгоживущие websocket'ы, - aio-t…
  4. Jun 16, 2026Cвежий опрос Checkmarx: - 70% разработчиков считают, что AI-код дырявее написанного руками…
  5. Dec 16, 2025https://github.com/minio/minio/issues/21714 А минио все. А минио больше не опенсорс
  6. Jul 2, 2025Kubernetes Gateway API - новый стандарт обработки трафика в Kubernetes. (Замена Ingress в…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →