Как стать автором
Поиск
Написать публикацию
Обновить

Как перенаправлять домены на сервера локальной сети имея один внешний IP

Задача


Представим ситуацию, что у Вас есть несколько доменов:

  • site1.com
  • site2.com
  • site3.com

Несколько веб серверов установленных на Windows внутри локальной сети:

  • server1 — 10.0.0.1
  • server2 — 10.0.0.2
  • server3 — 10.0.0.3

Всего один внешний IP адрес:

  • 11.22.33.44

И вам необходимо настроить перенаправление с

  • site1.com на 10.0.0.1
  • site2.com на 10.0.0.2
  • site3.com на 10.0.0.3

Реализация


Первое что Вам потребуется — это Nginx
Скачать свежий можно здесь
Его нужно будет установить на любую машину, которая будет выступать в роли reverse-proxy сервера

Установка крайне простая — распаковать по пути C:\nginx
Создать два файла cmd внутри папки nginx

Для запуска start.cmd

@echo off
start /D%cd% nginx.exe

Для остановки stop.cmd

@echo off
start /D%cd% nginx.exe -s quit

Либо использовать существующий, например на server1

Настройка Nginx


Необходимо отредактировать файл C:\nginx\conf\nginx.conf

worker_processes 1;
    events {
    worker_connections 1024;
}
http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;

    <b>#Server 1</b>
    server {
        listen 80;
        #Здесь нужно указать домен
        server_name <b>site1.com</b>;
        location / {
            #Здесь нужно указать IP адрес сервера
            proxy_pass http://<b>10.0.0.1:8080</b>;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }

    <b>#Server 2</b>
    server {
        listen 80;
        #Здесь нужно указать домен
        server_name <b>site2.com</b>;
        #Redirect to HTTPS
        location / {
            #Здесь нужно указать IP адрес сервера
            proxy_pass http://<b>10.0.0.2:80</b>;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }

    <b>#Server 3</b>
    server {
        listen 80;
        #Здесь нужно указать домен
        server_name <b>site3.com</b>;
        #Redirect to HTTPS
        location / {
            #Здесь нужно указать IP адрес сервера
            proxy_pass http://<b>10.0.0.3:80</b>;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
        }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
}

Хочу обратить внимание, что у server1 IP указан с портом 8080

            proxy_pass http://<b>10.0.0.1:8080</b>;

Это из-за того, что веб-сервер этой машины нужно будет отконфигурировать на прослушивание порта 8080

Настройка маршрутизатора


На маршрутизаторе необходимо создать правило NAT для порта 80
Чтобы все запросы на адрес 11.22.33.44 по протоколу HTTP попадали на 10.0.0.1

Заключение


Если все настройки верны, то Вам остается только запустить nginx (либо перезагрузить существующий) с помощью start.cmd
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.