@ipoluda

Как настроить чистый reverse_proxy на nginx без лишних сервисов?

Уже всё что можно перечитал и чем больше читаю - тем больше запутываюсь. Прошу помочь и объяснить как можно подробнее, уверен другим тоже поможет.
Есть домен, example.com, а также поддомены a.example.com, b.example.com и c.example.com
Все они ссылаются на внешний адрес роутера, допустим 55.55.55.55
За роутером есть несколько сервисов, каждый на отдельной виртуалке:
http://10.10.10.2
http://10.10.10.3:3333
https://10.10.10.4
Все эти сервисы открываются в локальной сети свободно, то есть можно зайти по айпишнику, можно по локальному доменному имени (всего лишь созданы алиасы на AD DNS, типа a.domain.local), то есть, сами сервисы не проверяют по какому адресу/имени на них заходят, лишь бы зайти на нужный порт.
Также есть чистая Ubuntu (22.04), на которой установлен Nginx:
10.10.10.10
и который я пытаюсь настроить в качестве reverse proxy для всех этих сервисов.
На роутере проброшены порты:
--> 55.55.55.55:80 --> 10.10.10.10:80
--> 55.55.55.55:443 --> 10.10.10.10:443

И вот тут я не могу понять как именно мне нужно нужно сконфигурировать nginx, чтобы при переходе на
http://a.example.com я заходил на http://10.10.10.2
http://b.example.com я заходил на http://10.10.10.3:3333
httpS://c.example.com я заходил на httpS://10.10.10.4
или на худой конец хотя бы так:
http://example.com/a я заходил на http://10.10.10.2
http://example.com/b я заходил на http://10.10.10.3:3333
httpS://example.com/c я заходил на httpS://10.10.10.4

Пока единственный работающий конфиг который смог завести это такой:
/etc/nginx/sites-available/example.com.conf (линк на папку sites-enabled сделан):
server {
    listen 80;
    server_name example.com www.example.com;
    location / {
        proxy_pass http://10.10.10.3:3333/;
    }
}

А если я добавляю ещё одну директиву для пути (либо меняю текущую корневую), всё перестаёт работать:
server {
    listen 80;
    server_name example.com www.example.com;
    location / {
        proxy_pass http://10.10.10.2;
    }
    location /a {
        proxy_pass http://10.10.10.3:3333;
    }
}

При этом хотелось бы всё-таки добиться входа на a.example.com, а не example.com/a
Все примеры что есть на просторах интернета в основном направлены на связку с Apache, php и т.д.
Также если для https ввиду ssl нужны радикально другие конфиги, прошу помочь разобраться хотя бы с http, там уже постараюсь сам разобраться.
Прошу сильно не пинать, с веб-серверами знаком чуть более чем никак))
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
server {
    listen 80 default;
    listen 443 ssl default;
    server_name example.com www.example.com;
    location / {
        proxy_pass http://10.10.10.2/;
    }
}
server {
    listen 80;
    listen 443 ssl;
    server_name a.example.com www.a.example.com;
    location / {
        proxy_pass http://10.10.10.3:3333/;
    }
}

Не забудьте указать путь к SSL сертификатам (если нужен 443).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы