SSL Preread#
Позволяет извлекать информацию из сообщения ClientHello без терминации TLS, например имя сервера, запрошенное через SNI, или протоколы, указанные в ALPN.
При сборке из исходного кода модуль не собирается по
умолчанию; его необходимо включить с помощью
параметра сборки --with-stream_ssl_preread_module.
В пакетах и образах из наших репозиториев модуль
включен в сборку. Разрешает извлекать информацию из сообщения ClientHello на этапе
предварительного чтения. Список протоколов, переданный клиентом через ALPN.
Значения разделяются запятыми. Максимальная версия протокола SSL, поддерживаемая клиентом. Имя сервера, запрошенное через SNI.Пример конфигурации#
Выбор апстрима по имени сервера#
map $ssl_preread_server_name $name {
backend.example.com backend;
default backend2;
}
upstream backend {
server 192.168.0.1:12345;
server 192.168.0.2:12345;
}
upstream backend2 {
server 192.168.0.3:12345;
server 192.168.0.4:12345;
}
server {
listen 12346;
proxy_pass $name;
ssl_preread on;
}
Выбор сервера по протоколу#
map $ssl_preread_alpn_protocols $proxy {
~\bh2\b 127.0.0.1:8001;
~\bhttp/1.1\b 127.0.0.1:8002;
~\bxmpp-client\b 127.0.0.1:8003;
}
server {
listen 9000;
proxy_pass $proxy;
ssl_preread on;
}
Выбор сервера по версии протокола SSL#
map $ssl_preread_protocol $upstream {
"" ssh.example.com:22;
"TLSv1.2" new.example.com:443;
default tls.example.com:443;
}
# ssh и https на одном порту
server {
listen 192.168.0.1:443;
proxy_pass $upstream;
ssl_preread on;
}
Директивы#
ssl_preread#
Встроенные переменные#
$ssl_preread_alpn_protocols#$ssl_preread_protocol#$ssl_preread_server_name#