ssl_handshake_timeout
Директива ssl_handshake_timeout задаёт максимальное время, отведённое на завершение SSL‑рукопожатия. — NGINX Stream Core
Описание
Директива `ssl_handshake_timeout` используется в NGINX Stream Core module для указания максимальной продолжительности (в секундах), в течение которой сервер будет ждать завершения SSL‑рукопожатия при установлении защищённых соединений. Правильная настройка этого таймаута критически важна, чтобы клиенты не зависали бесконечно при попытке установить защищённое соединение. Если указанный предел времени превышен, соединение будет прервано, а сервер зафиксирует ошибку в журнале. Аргумент этой директивы — значение времени в секундах. Если рукопожатие не завершится до истечения установленного таймаута, сервер разорвёт соединение. Эта директива особенно важна для приложений с высокой нагрузкой, которым требуются защищённые соединения, поскольку поддержание низкой задержки в процессе рукопожатия критично для производительности и удобства пользователей. Устанавливая значение таймаута с учётом ожидаемых сетевых условий и поведения клиентов, администраторы серверов могут эффективно оптимизировать обработку SSL‑соединений. Эту директиву можно объявлять как в контекстах `stream`, так и в `stream server`, что даёт гибкость при настройке поведения таймаутов SSL на уровне отдельного сервера. Важно отметить, что директива применима только когда SSL включён в stream module, и необходимо провести тщательное тестирование для подбора оптимального значения таймаута для конкретных сценариев использования.
Пример конфига
stream {
server {
listen 443;
ssl_handshake_timeout 10s;
ssl_preread on;
}
}Убедитесь, что SSL включён в конфигурации NGINX stream перед использованием этой директивы, так как она применима только в этом контексте.
Установка слишком малого timeout может привести к тому, что реальные клиенты будут отключены во время медленных handshakes, особенно в high-latency networks.