Pull to refresh

Как перенаправлять домены на сервера локальной сети имея один внешний 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
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.