Назад | Перейти на главную страницу

Маршрутизация доменного имени через несколько различных серверов

Как вы можете использовать один общедоступный IP-адрес для размещения нескольких доменных имен, которые охватывают несколько серверов в вашей локальной сети?

Допустим, у меня есть 5 веб-серверов, обслуживающих 5 разных доменных имен, использующих 5 различных серверных технологий, и в настоящее время у меня есть 5 общедоступных IP-адресов.

DNS настроен так, что каждое из 5 доменных имен сопоставляется с каждым из соответствующих общедоступных IP-адресов, а брандмауэр имеет перенаправители портов, поэтому все запросы перенаправляются на соответствующие внутренние IP-адреса правильного сервера в локальной сети.

Как я могу использовать один IP вместо 5? Я понимаю, как работает dynamic-dns, и если бы был только один веб-сервер, у меня не было бы проблем. Однако, поскольку существует несколько веб-серверов, использующих разные технологии, я не уверен, как реализовать только один общедоступный IP-адрес.

Есть ли сервер (желательно на базе Linux), на который я могу отправлять все запросы, который способен прозрачно маршрутизировать каждый запрос на определенный внутренний IP + порт строго на основе имени домена в запросе?

Обратный прокси-сервер Apache или Nginx подойдет.

Ниже приведен простой пример обратного прокси-сервера nginx, включая балансировку нагрузки.

http {
  upstream backend_server_2 {     # load balanced server block
     ip_hash;
     server 10.1.1.2:8080 weight=2;
     server 10.1.1.3:8080 weight=1;
  }

  server {
     listen public_ip:80;
     server_name example1.com;
     location / {
         proxy_pass http://10.1.1.1/;
     }
  }

  server {
     listen public_ip:80;
     server_name example2.com;
     location / {
         proxy_pass http://backend_server_2/;
     }
   }
}

Вы можете попробовать настроить балансировщик нагрузки с обратным прокси.

По сути, это сервер, на который отправляются все запросы, но он не обрабатывает запросы; скорее, он только отправляет запрос на обработку одному из стоящих за ним серверов.

Существуют разные алгоритмы отправки запросов на нужные серверы, чтобы не загружать один из серверов больше, чем другие, но для базовых настроек может работать даже случайное выполнение или отправка запросов на один сервер за один раз. Поскольку запрос к фактическому серверу будет делать Nginx, вы потеряете исходный IP-адрес пользователя. Чтобы сделать его снова доступным, вам необходимо настроить Nginx и ваши серверы на передачу исходного IP-адреса в виде HTTP-заголовка (например, X-Forwarded-For).