Назад | Перейти на главную страницу

Как настроить прокси-сервер Apache для небольшого парка инстансов EC2?

Я настраивал экземпляры 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 сделает все остальное.