ssl_preread
Включает разбор SSL/TLS рукопожатия для TCP-потоков в NGINX.
Описание
Директива 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.