SSL Preread#
Позволяет извлекать информацию из сообщения
ClientHello
без терминации TLS,
например имя сервера, запрошенное через
SNI,
протоколы, указанные в
ALPN,
или набор шифров (cipher suite). Подробнее см. Балансировка трафика на основе набора шифров. Разрешает извлекать информацию из сообщения ClientHello на этапе
предварительного чтения. Максимальная версия протокола SSL, поддерживаемая клиентом. Имя сервера, запрошенное через SNI. Список протоколов, переданный клиентом через ALPN.
Значения разделяются запятыми. Список шифров, предлагаемых в сообщении ClientHello, при установке TLS-соединения.Пример конфигурации#
Выбор апстрима по имени сервера#
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;
}
Выбор сервера по набору шифров#
map $ssl_preread_ciphers $handler {
"~TLS_GOST" 127.0.0.1:9443;
default 127.0.0.1:8443;
}
server {
listen 443;
ssl_preread on;
pass $handler;
}
Директивы#
ssl_preread#
Встроенные переменные#
$ssl_preread_protocol#$ssl_preread_server_name#$ssl_preread_alpn_protocols#$ssl_preread_ciphers#