Я настраивал экземпляры Amazon EC2 для предстоящего проекта, который будет включать размещение нескольких веб-сайтов на нескольких веб-серверах. Все они являются микро экземплярами, работающими под управлением 64-битного Ubuntu Server.
Вот что у меня есть на данный момент:
В настоящее время существует только один веб-сервер, но я создал его образ, поэтому после запуска проекта я могу запустить столько экземпляров, сколько мне нужно, и настроить их индивидуально.
Все шло гладко, но я наткнулся на некоторые препятствия.
Моя проблема в том, что я хотел бы запустить несколько экземпляров веб-сервера, но с ограничением Amazon до 5 эластичных IP-адресов, я знаю, что этого будет недостаточно. Я изучал, как размещать веб-сайты на нескольких веб-серверах с одного IP-адреса, и наткнулся на mod_proxy для Apache. Еще не пробовал, но думаю, что это то, что мне нужно. Я просто хочу, чтобы кто-нибудь подтвердил, что я на правильном пути.
Кто-нибудь использовал Apache с mod_proxy? Действительно ли это позволяет размещать несколько веб-сайтов из нескольких, используя один IP-адрес?
Если я на правильном пути, все, что мне нужно, это один эластичный IP-адрес, указывающий на экземпляр EC2, на котором запущен Apache, верно?
то, что вы спросили, является очень распространенной ситуацией, когда приложения могут не работать на шлюзе, и они могут быть запущены на каком-то сервере в локальной сети, но для мира кажется, что оно исходит от request_url.com
Я запускаю 4 веб-сайта с прокси-сервером Apache, и от них зависит как минимум 15 различных сервисов на этих 4 разных веб-сайтах. У меня нет опыта работы с Amazon EC2, но Amazon EC2 использует Xen в качестве бэкэнда. Скажем, основная машина, которая выходит в Интернет и имеет общедоступный IP-адрес, называется dom0, теперь читается в следующей терминологии
Dom0 with IP 192.168.0.100 (This will be our Server facing internet)
DomU1 with IP 192.168.0.11
DomU2 with IP 192.168.0.12
DomU3 with IP 192.168.0.13
DomU4 with IP 192.168.0.14
Я предполагаю, что у вас есть локальный DNS-сервер на Dom0 (или где-то в вашей сети), который знает IP-адреса DomU с именами. (Если нет, жизнь будет сложной), то в apache2.conf (httpd.conf в системах типа Fedora)
NameVirtualHost *
<VirtualHost *>
ServerName mainserver
DocumentRoot /var/www
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /domu1 http://192.168.0.11/
ProxyPass /domu2 http://192.168.0.12/
ProxyPass /domu3 http://192.168.0.13/
ProxyPass /domu4 http://192.168.0.14/
ProxyPassReverse /domu1 http://192.168.0.11/
ProxyPassReverse /domu2 http://192.168.0.12/
ProxyPassReverse /domu3 http://192.168.0.13/
ProxyPassReverse /domu4 http://192.168.0.14/
</VirtualHost>
Этот способ является одним из способов достичь того, о чем вы просили (хотя и не очень рекомендуется), если вы обновляете сервер (например, Dom0), обновление может перезаписывать apache2.conf или httpd.conf в любом случае. Итак, как только вы поймете, что означают приведенные выше записи (проверьте это на предмет ваших требований, я долгое время боролся с чем-то похожим на вас, поэтому я дал простое решение, но не рекомендую). Как только вы поймете вышеупомянутый ProxyPass, затем создайте разные конфигурации виртуального хоста в каталоге сайтов, доступных, если это система Ubuntu / Debian или на основе Red Hat, это все еще возможно (вам придется искать), я показываю вам одну, чтобы она помогала вы отдыхаете 4-5, вы можете сделать самостоятельно
Назовите это /etc/apache2/sites-enabled/myinterna1.conf, это выглядит следующим образом
<VirtualHost *:80 >
ServerName myserver1.com
ServerAdmin webmaster@localhost
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass / http://192.168.1.3/
ProxyPassReverse / http://192.168.1.3/
ErrorLog /var/log/apache2/server1/server1_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/server1/server1_access.log combined
CustomLog /var/log/apache2/server1/server1-resp_log resp
LogFormat "%a %{X-Forwarded-For}i %h %D %t %f %p %>s %U %v" resp
</VirtualHost>
Вышеупомянутый виртуальный хост будет определен на Dom0, чтобы все запросы обслуживались с внутреннего сервера server1.com. Как он будет работать, кто-то в Интернете будет вводить в своем браузере
http://requested_url.com/domu1
Теперь этот запрос достигает Dom0, и виртуальный хост Apache на Dom0 проверяет конфигурацию прокси и обнаруживает, что / domu1 сопоставлен с внутренним сервером, поэтому он перенаправляет его на машину, которая действительно должна обслуживать. Для пользователя в Интернете все это скрыто.
Как бы то ни было, одно слово предостережения при этом, Apache в системе Ubuntu обслуживает виртуальные хосты в алфавитном имени файла vhost (не имя сервера, я имею в виду имя файла, например sorting.c, файл виртуального хоста Apache) (вот почему там - это файл 000 по умолчанию) в системах Ubuntu, поэтому убедитесь, что у вас на один хост больше, чем количество веб-сайтов, которые вы должны обслуживать (которые будут служить страницей ошибок). Это стандартная практика.
Почему бы не запустить их все на одном IP-адресе и не использовать виртуальный хостинг Apache (то есть виртуальный хостинг на основе заголовка хоста), чтобы веб-сервер выбирал правильный сайт для каждого запроса?
Это потребует только один IP-адрес, а балансировка нагрузки Amazon сделает все остальное.