@S10LI

Как использовать несколько доменов для нескольких серверов на одном IP?

Дано:

Домены:

site1.com
site2.com

Внешний IP (для примера): 11.22.33.44
Маршрутизатор: Mikrotik.

Локальная сеть (для примера): 10.0.0.0/24

Сервер 1. Используется для веб-хостинга 1С (web-сервер Apache)
IP (для примера): 10.0.0.1
Слушает порт 80, будет слушать 443

Сервер 2. На нем крутится HTTP File Server
IP (для примера): 10.0.0.2
Слушает порт 80, будет слушать 443

Сервер 3. Для будущей задачи
IP (для примера): 10.0.0.3
Будет слушать 80, 443

Все серверы на OS Windows.

Как реализовано сейчас:

На маршрутизаторе включен Web-proxy на порту 8080
Настроены разрешающие правила для
site1.com
site2.com
и запрещающие на все остальные запросы

Настроено NAT правило перенаправляющее запросы с порта 80 на внутренний web-proxy (8080)

Созданы статические DNS записи для серверов:

site1.com -> 10.0.0.1
site2.com -> 10.0.0.2

Соответственно когда кто-то из интернета обращается по домену site1.com - попадает на Сервер1 и по домену site2.com - попадает на Сервер2.

Почему мне не подходит техущий вариант реализации?

1) Микротик позволяет перенаправлять только http трафик, я же хочу защитить соединение по протоколу https (соответственно получить/сгенерировать сертификаты) через например stunnel
2) Использование встроенного web proxy создает дополнительную нагрузку на сетевое устройство

Задача:

Настроить Сервер 3 на прослушивание порта 80 и 443 и в зависимости от домена соединять с локальным сервером (некое проксирование трафика)

server1.site.com -> 10.0.0.1
server2.site.com -> 10.0.0.2

Вопрос:

С помощью чего реализовать? Желательно с примерами настроек.

Спасибо!
  • Вопрос задан
  • 4461 просмотр
Решения вопроса 1
@S10LI Автор вопроса
Короткий мануал как я я всё настроил

Скачал свежий Nginx

Распаковал по пути C:\nginx

Создал два файла cmd внутри папки nginx
start.cmd
@echo off
start /D%cd% nginx.exe

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


И отредактировал файл 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;
    #Server 1
    server {
        listen 80;
        server_name server1.site.com;
        #Redirect to HTTPS
        location / {
            proxy_pass http://10.0.0.1:80;
            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;
        }
    }
    #Server 2
    server {
        listen 80;
        server_name server2.site.com;
        #Redirect to HTTPS
        location / {
            proxy_pass http://10.0.0.2:80;
            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;
        }
    }
}


Далее запустил Nginx с помощью start.cmd и все заработало!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
hint000
@hint000
у админа три руки
Nginx обратный прокси.
Ответ написан
Комментировать
deepblack
@deepblack
Загляни сюда
Пример конфигов (reverse proxy)
server {
  server_name server1.site.com;
  root /var/www/server1.site.com/public;

  # reverse proxy
  location / {
    proxy_pass http://10.0.0.1:80;
  }
}


/etc/nginx/sites-available/server1.site.com.conf

server {
	listen 443 ssl http2;
	listen [::]:443 ssl http2;

	server_name server1.site.com;
	root /var/www/server1.site.com/public;

	# SSL
	ssl_certificate /etc/letsencrypt/live/server1.site.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/server1.site.com/privkey.pem;
	ssl_trusted_certificate /etc/letsencrypt/live/server1.site.com/chain.pem;

	# security
	include nginxconfig.io/security.conf;

	# reverse proxy
	location / {
		proxy_pass http://10.0.0.1:80;
		include nginxconfig.io/proxy.conf;
	}

	# additional config
	include nginxconfig.io/general.conf;
}

# subdomains redirect
server {
	listen 443 ssl http2;
	listen [::]:443 ssl http2;

	server_name *.server1.site.com;

	# SSL
	ssl_certificate /etc/letsencrypt/live/server1.site.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/server1.site.com/privkey.pem;
	ssl_trusted_certificate /etc/letsencrypt/live/server1.site.com/chain.pem;

	return 301 https://server1.site.com$request_uri;
}

# HTTP redirect
server {
	listen 80;
	listen [::]:80;

	server_name .server1.site.com;

	include nginxconfig.io/letsencrypt.conf;

	location / {
		return 301 https://server1.site.com$request_uri;
	}
}



/etc/nginx/sites-available/server2.site.com.conf

server {
	listen 443 ssl http2;
	listen [::]:443 ssl http2;

	server_name server2.site.com;
	root /var/www/server2.site.com/public;

	# SSL
	ssl_certificate /etc/letsencrypt/live/server2.site.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/server2.site.com/privkey.pem;
	ssl_trusted_certificate /etc/letsencrypt/live/server2.site.com/chain.pem;

	# security
	include nginxconfig.io/security.conf;

	# reverse proxy
	location / {
		proxy_pass http://10.0.0.2:80;
		include nginxconfig.io/proxy.conf;
	}

	# additional config
	include nginxconfig.io/general.conf;
}

# subdomains redirect
server {
	listen 443 ssl http2;
	listen [::]:443 ssl http2;

	server_name *.server2.site.com;

	# SSL
	ssl_certificate /etc/letsencrypt/live/server2.site.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/server2.site.com/privkey.pem;
	ssl_trusted_certificate /etc/letsencrypt/live/server2.site.com/chain.pem;

	return 301 https://server2.site.com$request_uri;
}

# HTTP redirect
server {
	listen 80;
	listen [::]:80;

	server_name .server2.site.com;

	include nginxconfig.io/letsencrypt.conf;

	location / {
		return 301 https://server2.site.com$request_uri;
	}
}

Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы