
У меня есть один публичный IP-адрес. Я пытаюсь разрешить доступ через публичный IP на портах 80 и 443 к нескольким службам, различающимся по запрошенному имени сервера.
ОДНАКО, одна услуга требуетТКПобратный прокси на портах 80 и 443 на публичном IP для работы. Другому требуется обратный прокси TCP, но только на порту 443. Остальные — это просто веб-сайты, и им достаточно обратного прокси http, но я хочу, чтобы веб-сайты были общедоступны на портах 80 и 443, чтобы упростить это для посетителей и для letsencrypt.
Я могу создать столько виртуальных машин и частных IP-адресов, сколько необходимо для простоты, но при этом ограничиваюсь одним публичным IP-адресом.
Могу ли я сделать это с настройкой nginx как обратного прокси с использованием SNI? Теоретически я думаю, что я должен иметь возможность передавать все по tcp-потоку по имени хоста с использованием SNI, направленного на соответствующий сервер, со вторым веб-сервером, который имеет необходимые настройки веб-сайтов для прослушивания на разных портах. Например, nginx.conf:
stream {
map $ssl_preread_server_name $name {
serviceone.domain.tld serviceone;
servicetwo.domain.tld servicetwo;
website1.domain.tld website1;
website2.domain.tld website2;
}
upstream serviceone {
server 10.1.99.7:443;
}
upstream servicetwo {
server 10.1.99.20:443;
}
upstream website1 {
server 10.1.99.30:10443;
}
upstream website2 {
server 10.1.99.30:10444;
}
server {
listen 443;
listen 80;
resolver 8.8.8.8;
proxy_pass $name;
ssl_preread on;
}
}
У меня в nginx.conf есть что-то похожее на то, что работает выше, но мне немного сложно понять, как запросы порта 80 попадают в уравнение (я просто добавил listen 80 в блок сервера, но не смог объяснить, как обрабатываются запросы с точки зрения различия между 443 и 80, если запрашивается одно и то же имя сервера).
Я открыт для лучших способов сделать это, в том числе с использованием nginx или haproxy и т. д. Спасибо!
решение1
Просто используйте отдельные блоки server{...} для каждого имени хоста.
Он выполняет работу без зависимости от дополнительного модуля и избавит вас от МНОГО проблем, если вышестоящие серверы будут отличаться по конфигурации, требуемой для прокси-сервера.