В жизненном цикле HTTP-запроса-ответа есть три этапа, в которые может поступить SIGTERM:
Запрос по-прежнему передается на сервер (в этом случае запрос не был полностью получен, а некоторые данные отсутствуют).
Запрос обрабатывается.
Ответ передается клиенту.
Как автор сервера (йод), необходимо сделать выбор в отношении того, какие ступени будут защищены от отключений, связанных с отключением (если есть).
(этап 1):
Я почти уверен, что ни один сервер не защитит запрос, который все еще передается в потоковом режиме (это может подвергнуть сервер медленным атакам клиентов во время процесса выключения).
(этап 2):
Во время обработки запроса сам сервер - это тот клиент, которого ждет клиент. Все серверы (AFAIK) ждут завершения ответа (или тайм-аута), прежде чем продолжить процедуру завершения работы.
(этап 3):
Обычной практикой также является ограничение исходящего потока, защищая от медленных атак клиентов и позволяя обычным клиентам завершать загрузку своих ответов.
Йод позволяет в течение 10 секунд на этом этапе, который жестко закодирован. Я не смог найти ни одного параметра конфигурации для Пассажира , поэтому, возможно, это также жестко запрограммированная вещь (или, возможно, он не существует).
Подводя итог: я хотел бы рассмотреть возможность тестирования нескольких серверов с использованием медленного клиента и проверки последовательности их выключения.
Какой бы сервер вы ни выбрали, некоторые клиенты могут по-прежнему испытывать внезапные отключения.
Возможно, это не то, что вы можете контролировать или решить, но это то, что вы можете проверить и минимизировать.
Разве Пассажир не должен предоставлять некоторое время по умолчанию для завершения процессов после SIGTERM и постепенного выключения?
Это зависит от Пассажира и не является обязательным.
Кроме того, нет возможности управлять такой настройкой в документации . Это может быть значительное отсутствие (убедительный признак того, что пассажир не поддерживает эту функцию).
Возможно, в моем конфиге что-то отсутствует,
Конфигурация nginx не контролирует конфигурацию Passenger. Они связаны в определенной степени, но они не одинаковы.
AFAIK, нет возможности управлять этой опцией отключения.