2 сервера на одном ip (NGINX реализация)

Входные данные

  1. Внешний ip адрес
  2. Два разных доменных имени на этот ip (host1 & host2)
  3. Два сервера (server1 & server2), которые лежат за одним внешним ip

Задача

Организовать доступ к серверам по доменным именам по портам 80 и 443, таким образом что

host1:80 -> server1
host1:443 -> server1
host2:80 -> server2
host2:443 -> server2 

Догадки и вопросы

Проблем я бы не видел, если бы использовались только ресурсы одного сервера для всех приложений, но условие как раз такое, что необходимо разделить на два отдельных сервера все приложения, по принципу, который здесь не имеет никакого значения.

Моих поверхностных знаний в данной области хватает на то, что можно использовать на одном из серверов, например на server1, nginx, который будет использовать как ресурсы server1, так и проксировать дальше на server2. Вопрос, на сколько данная топология верна? Возможно, ли, в принципе это организовать? Может есть каноническое решения данного вопроса?


Ответы (1 шт):

Автор решения: eri

Правильное решение - на внешний адрес поставить форвард прокси отдельным хостом.

Добавь 2 файла в /etc/nginx/sites-enabled/ для каждого домена с такими содержимым

server {
    server_name domain1;

    listen 80;
    listen [::]:80;
    
    listen 843 ssl;
    listen [::]:843 ssl;

    ssl_certificate /etc/letsencrypt/live/domain1/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/domain1/privkey.pem;

    location / {
        proxy_pass http://server1;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Обновление сертификата устанавливается на сервере с внешним адресом.

Если не получается выделить отдельных хост для прокси, то можно эту конфигурацию разместить на одном из серверов и "пробросить порты"

В случае микротика и линукс роутера есть возможность пробросить http через встроенный web-proxy и https по tls-host в фаерволе.

/ip firewall nat add in-interface=ether1 dst-port=80 protocol=tcp action=redirect to-ports=8080 chain=dstnat 
/ip proxy set enabled=yes port=8080

В днс-статик прописать соответствие домена к серверу.

И https

/ip firewall nat
add place-before=0 \
action=dst-nat chain=dstnat dst-port=443 protocol=tcp \
tls-host=domain1  to-addresses=ip1
→ Ссылка