Несколько веб-серверов на разных машинах за одним статическим IP-адресом

Я столкнулся с ситуацией, когда компания, в которой я работаю, хотела бы распределить свои веб-серверы по виртуальной машине вместо того, чтобы полагаться на один физический компьютер, чтобы делать все. Наша текущая установка выглядит примерно так:

example.com → static IP → internal firewall (only 1 machine may receive port 80 traffic) → 192.168.1.100 (our production box)

example1.com, example2.com, etc... → same as above

Наша производственная коробка работает под управлением Apache и разделяет входящие имена на соответствующие локальные папки с помощью VirtutalHost. Это работает, как и ожидалось, но мы хотели бы отключить некоторые хосты из соображений производительности и безопасности. Что-то вроде следующей настройки:

*.example.com → static IP → firewall → 192.168.1.100 (Production)
jira.example.com -> static IP -> firewall -> 192.168.1.100 -> 192.168.1.120
*.example1.com → static IP → firewall → 192.168.1.100 → 192.168.1.111 (Wordpress-1)
*.example2.com → static IP → firewall → 192.168.1.100 → 192.168.1.112 (Wordpress-2)
etc…..

Мы попробовали что-то похожее на следующее с файлом VirtualHost на 192.168.1.100:

<VirtualHost *:*>
    ServerName example.com
      ...
</VirtualHost>

<VirtualHost jira.example.com:*>
    ServerName jira.example.com
      ...
    ProxyPass         /  http://192.168.1.120:80/
    ProxyPassReverse  /  http://192.168.1.120:80/
</VirtualHost>

<VirtualHost example1.com:*>
    ServerName example1.com
      ...
    ProxyPass         /  http://192.168.1.111:80/
    ProxyPassReverse  /  http://192.168.1.111:80/
</VirtualHost>

<VirtualHost example2.com:*>
    ServerName example2.com
      ...
    ProxyPass         /  http://192.168.1.112:80/
    ProxyPassReverse  /  http://192.168.1.112:80/
</VirtualHost>

Это частично сработало — я смог использовать example1.com для общения с Wordpress-1. Однако перенаправление приведет к тому, что гиперссылки будут указывать на example.com, что нарушит работу сайта.

Когда я изучал DNS, мне казалось, что это лучший вариант. Возможно ли, чтобы поставщик доменных имен (в данном случае GoDaddy) указывал на DNS-сервер за брандмауэром, который затем соответствующим образом направлял трафик? Что-то вроде этого:

hostname → static IP → firewall → 192.168.1.100 (DNS) → webserver assigned to hostname

example.com:
NS  ns1.example.com.
ns1.example.com.    A   192.168.1.100
www A   192.168.1.100
jira.example.com. A 192.168.1.120   

example1.com:
NS  ns1.example1.com.
ns1.example1.com.   A   192.168.1.100
www A   192.168.1.111   

example2.com:
NS  ns1.example2.com.
ns1.example2.com.   A   192.168.1.100
www A   192.168.1.112

person Jordan    schedule 29.02.2016    source источник
comment
Это кажется мне ужасно запутанным! (и, следовательно, подвержен ошибкам) ​​есть ли причина, по которой вы не можете просто поставить блок NGINX впереди и позволить ему направить все туда, куда нужно?   -  person Michael B    schedule 29.02.2016
comment
@MichaelB - Nginx выглядит многообещающе, но, похоже, он использует тот же вид прокси, что и виртуальные хосты Apache. Вы имели в виду что-то подобное, используя nginx? server { server_name example1.com; listen 80; listen 8080; location / { proxy_pass $scheme://192.168.1.111:$server_port$uri; proxy_set_header Host $host; } }   -  person Jordan    schedule 29.02.2016


Ответы (1)


В этом руководстве Digital Ocean объясняется, как настроить прокси с помощью Apache2: https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension< /а>

Проведя некоторую очистку, я смог точно определить проблему. Один из моих виртуальных хостов использовал 443, а другие — нет. Однако Wordpress хочет использовать https для входа администратора, который перенаправляет на хост, использующий SSL. По сути, SSL — это игра «все или ничего», когда речь идет о ваших серверах. Предполагая, что вы просто используете порт 80, будет работать следующее:

<VirtualHost *:80>
    ServerName example.com
      ...
</VirtualHost>

# Note: This assumes your Jira installation is running on port 80 
<VirtualHost *:80>
    ServerName jira.example.com
      ...
    ProxyPass         /  http://192.168.1.120
    ProxyPassReverse  /  http://192.168.1.120
</VirtualHost>

<VirtualHost *:80>
    ServerName example1.com
      ...
    ProxyPass         /  http://192.168.1.111
    ProxyPassReverse  /  http://192.168.1.111
</VirtualHost>

<VirtualHost *:80>
    ServerName example2.com
      ...
    ProxyPass         /  http://192.168.1.112
    ProxyPassReverse  /  http://192.168.1.112
</VirtualHost>
person Jordan    schedule 01.03.2016