Я пытаюсь использовать nginx в качестве обратного прокси для двух разных серверов. Серверы требуют использования клиентских сертификатов для аутентификации, что означает, что nginx настроен как потоковый прокси, использующий map $ssl_preread_server_name
для проверки SNI для отправки на правильный сервер.
Это отлично работает для пары серверов, на которых он сейчас размещен. Оба слушают 443, но предоставляют совершенно разные услуги, но перенаправление через SNI работает отлично.
Проблема в том, что один из серверов также использует порт 9997 для связи (TLS), и нам нужно добавить их в смесь. В настоящее время мы просто жестко кодируем трафик в nginx на один сервер, который использует 9997. Это не сработает по мере продвижения вперед и наличия дополнительных серверов, на которых размещается контент на 9997.
Как я могу настроить nginx для потоковой передачи 443 и 9997 на ящик, который нуждается в этих сообщениях, и при этом продолжать отправлять 443 на другой сервер при необходимости?
Он должен быть динамическим, чтобы трафик отправлялся на ПРАВИЛЬНЫЙ сервер.
Вот конфигурация, которая работает сейчас (некоторая информация удалена):
#user nobody;
worker_processes 1;
error_log /var/log/nginx/error.log;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
stream {
map $ssl_preread_server_name $upstream {
server1.domain.com server1;
server2.domain.com server2;
}
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
}
server {
listen 9997;
proxy_pass 1.2.3.4:9997;
}
upstream server1 {
server 1.2.3.4:443;
}
upstream server2 {
server 1.2.3.5:443;
}
}
Ниже конфигурация должна работать для вас
stream {
map $ssl_preread_server_name:$server_port $upstream {
server1.domain.com:443 server1;
server2.domain.com:443 server2;
server1.domain.com:9997 server3;
}
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
}
server {
listen 9997;
proxy_pass $upstream;
ssl_preread on;
}
upstream server1 {
server 1.2.3.4:443;
}
upstream server2 {
server 1.2.3.5:443;
}
upstream server3 {
server 1.2.3.4:9997;
}
}