ssl_preread

Включает разбор SSL/TLS рукопожатия для TCP-потоков в NGINX.

Синтаксисssl_preread on | off;
По умолчаниюoff
Контекстstream, stream server
Аргументыflag

Описание

Директива ssl_preread используется в NGINX Stream module для обработки TCP-потоков, защищённых с помощью SSL/TLS. Эта директива позволяет NGINX выполнить начальную обработку SSL-рукопожатия, что даёт возможность определить целевой сервер бэкенда на основе расширения Server Name Indication (SNI), отправленного клиентом в ходе рукопожатия.

Когда ssl_preread включена, NGINX может просматривать входящее SSL-рукопожатие для извлечения информации SNI, что особенно полезно при маршрутизации трафика на несколько бэкендов на основе имени хоста, указанного клиентом. Если директива ssl_preread установлена в on, то SSL-рукопожатие будет разобрано, и SNI станет доступен для дальнейшего использования в конфигурации, например в директивах proxy_pass или для влияния на балансировку нагрузки. Это имеет решающее значение для приложений, которые размещают несколько доменов с поддержкой SSL на одном IP-адресе.

Важно отметить, что директива ssl_preread сама по себе не выполняет SSL-терминацию; она лишь позволяет NGINX разобрать SNI из SSL-рукопожатия. Пользователи обычно применяют эту директиву совместно с другими директивами или конфигурациями бэкенда для эффективного управления SSL-трафиком.

Пример конфига

stream {
    server {
        listen 443;
        proxy_pass backend;
        ssl_preread on;
    }
    upstream backend {
        server backend1.example.com:443;
        server backend2.example.com:443;
    }
}

Убедитесь, что поддержка SSL/TLS включена в сборке NGINX, так как ssl_preread зависит от неё.

Не используйте ssl_preread с не-SSL потоками, иначе поведение будет неопределённым.

Маршрутизация на основе SNI может работать не так, как ожидается, если клиент не отправляет SNI.

← Ко всем директивам