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

2

Долгое время читатель первого раза постер (хе хе). Итак, вот моя дилемма. У меня дома есть 3 сайта для друзей, ничего особенного, все только WordPress сайты. Запуск их в VMWare Workstation. Есть куча барана, чтобы сэкономить и весь этот беспорядок, так что не беспокойтесь на фронте ресурсов. Когда я строю сайт № 2, я понимаю: «CRAP! ... Как я собираюсь маршрутизировать их через маршрутизатор?» Теперь, прежде чем некоторые из вас скажут vhosts, я разделяю сайты на разных ВМ. 1 из 3 не очень важный сайт, но в случае чего-то, я бы предпочел, чтобы все не закрывались одновременно. Так что ...

У меня есть общий маршрутизатор Linksys (с ужасным новым Smart Wifi). Человек, мне нужно изменить прошивку на хорошие вещи, но это еще один день. Таким образом, один общедоступный IP-адрес, 3 виртуальных машины с уникальными внутренними IP-адресами, т.е. 192..1 / 2/3. Маршрутизатор не позволяет переадресацию портов на несколько IP-адресов, использующих один и тот же порт (80).

Если способ многого сделать, я укушу пулю и перенесу их в одну и ту же виртуальную машину и зайду на разные сайты, но мои мысли заключались в том, чтобы использовать ДРУГУЮ виртуальную машину. Виртуальный роутер. Я могу подумать о некоторых виртуальных машинах маршрутизатора / брандмауэра, таких как pfSense, m0n0wall, но я просто ищу что-то простое и легкое для начала, но я предполагаю, что потребуется действовать немного как виртуальный хост, используя порт 80 запрос от маршрутизатора, затем рассредоточение трафика к 3 ВМ, содержащим веб-серверы, используя заголовки хоста (я думаю).

У кого-нибудь есть предложение, лучший метод и т. Д.? Заранее признателен, и если бы все они находились под одной крышей виртуальной машины, это решило бы мгновенно, в моем случае разделение виртуальной машины своего рода превосходит это.

Но очень открыт для мыслей. Приветствия.

Der Hochstapler
источник
1
Если вы так заботитесь о работоспособности, почему бы не арендовать VPS и не разместить там серверы?
tombull89
Должен быть конкретным с точки зрения просто говорить о виртуальной маршрутизации.
1
Вопрос в том, является ли каждый сервер своим собственным сайтом, или каждый сервер содержит копии всех трех сайтов? Вы хотите что-то вроде балансировщика нагрузки, но используете его дома? Я не знаю, с чего начать.
tombull89
У каждого свой сайт. Хотя у меня просто есть ощущение, что виртуальный маршрутизатор «может» добиться цели. Понравился ваш ответ, просто не уверен, с чего начать. Начать чувствовать, что их разлучить - это слишком много хлопот.
5
Настройте сервер Apache с mod_proxy и прокси каждого сайта на свой собственный сервер. Маршрутизатор должен только сделать переадресацию порта на этот сервер Apache.
Jenny D

Ответы:

3

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

Kazimieras Aliulis
источник
Вы можете настроить nginx в качестве прокси на одной из ваших виртуальных машин и использовать его в качестве WebProxy. Вот документы для модуля прокси-сервера Nginx HTTP: nginx.org/en/docs/http/ngx_http_proxy_module.html Еще один HOWTO: cyberciti.biz/tips/using-nginx-as-reverse-proxy.html
1
Хотя это, наверное, лучший способ сделать это. Это не ответ, если вы не дадите несколько советов о том, как применить эту идею и ссылки на документацию / Howtos.
mveroone
2

Я пробовал различные решения, и у меня есть успех, используя Apache2. Он поставляется с функцией виртуального хостинга.

Вам нужно будет немного поработать над Apache2, но я включу в себя руководство по настройке для вас. Как это работает: apache2 работает с функцией «Домен на основе имени», где он запускает столько сайтов, сколько мне нужно, но только на одном общедоступном IP. [Я разработчик, который объясняет, почему так много сайтов].

   $ sudo apt-get install -y apache2 apache2-dev apache2-threaded-dev

Подключите ваш apache2.conf, добавив эти три строки в конце

   include httpd.conf
   <VirtualHost *>
   </VirtualHost>

Настройте ваш httpd.conf с этим руководством; отрегулируйте соответственно вашему случаю. По умолчанию в качестве новой установки вы не увидите httpd.conf, но Apache2 ответит, если обнаружит, что httpd.conf находится в каталоге / etc / apache2.

    $ sudo touch /etc/apache2/httpd.conf

и добавьте это в httpd.conf. Большой акцент, чтобы оставить : 80 нетронутыми. Когда ты видишь ' ## РЕДАКТИРОВАТЬ ЭТО * '; вот где вы можете редактировать по своему вкусу, оставляя других нетронутыми.

   <Directory "/var/www">  ***## EDIT THIS***
      Options Indexes FollowSymLinks
      AllowOverride All
   </Directory>

    <location /cgi-bin>
    AddHandler cgi-script .cgi .pl
    Options -Indexes +FollowSymlinks +ExecCGI
    </location>


  <VirtualHost *:80>
    ServerName example.ca  ***## EDIT THIS***
    ServerAlias www.example.ca ***## EDIT THIS***
    DocumentRoot /var/www/example_ca/html ***## EDIT THIS***
    <Location "/">
            Order Deny,Allow
            Deny from all
            Allow from all
    </Location>
      CustomLog /path/to/your/preferred/log-folder/access.log common ***## EDIT THIS***
      ErrorLog /path/to/your/preferred/log-folder/error.log ***## EDIT THIS***
   </VirtualHost>

  <VirtualHost *:80>
    ServerName sample.ca ***## EDIT THIS***
    ServerAlias www.sample.ca ***## EDIT THIS***
    DocumentRoot /var/www/sample_ca/html ***## EDIT THIS***
    <Location "/">
            Order Deny,Allow
            Deny from all
            Allow from all
    </Location>
      CustomLog /path/to/your/preferred/log-folder/access.log common ***## EDIT THIS***
      ErrorLog /path/to/your/preferred/log-folder/error.log ***## EDIT THIS***
   </VirtualHost>

затем...

   $ sudo service apache2 restart

и вуаля! Удачи!

РЕДАКТИРОВАТЬ: имейте в виду - после настройки сайтов и проверки их работоспособности в локальной сети вам необходимо обновить DNS с вашим поставщиком услуг DNS (где вы зарегистрировали эти домены) и обновить свой IP-адрес (где вы размещаете свою машину с эти мультисайты).

Faron
источник
Просто чтобы подтвердить, что при таком подходе он будет размещать все сайты на одной виртуальной машине, правильно? Ничего страшного и, вероятно, лучше с точки зрения распределения ресурсов.
MDMoore313
Подтверждено, MDMoore313. Причина: Apache2 уже имеет технологию виртуального хостинга и может работать с несколькими сайтами с одного компьютера.
Faron
1

Маршрутизатор не позволяет переадресацию портов на несколько IP-адресов, использующих один и тот же порт (80).

Кстати, это невозможно со стандартным TCP / IP. Вам нужна программа, то есть прокси, которая принимает запросы через порт, просматривает запросы, а затем шунтирует запросы.


Apache и другие веб-серверы имеют функцию «обратного прокси», которую можно использовать для «разделения» вашего входящего трафика. Обратный прокси-сервер сообщает Apache, что запросы на определенный веб-путь, т. Е. «Yourdomain / directory1», должны быть переданы другому веб-серверу, а ответы от этого веб-сервера возвращены исходному клиенту.

Однако помните, что если у вас есть приложения, работающие на этом веб-сервере (PHP и т. Д.), Им может потребоваться изменить настройки, так как их внешний URL-адрес будет другим. Возможно, вам придется сообщить PHP-приложению, что оно находится по адресу «yourdomain / directory1», а не «yourdomain», чтобы оно могло правильно генерировать ссылки. Можно попросить Apache переписать трафик с внутреннего сервера, прежде чем он вернет его клиенту, но это сложно, и вы можете избежать его, если это возможно. Приложения, которые генерируют ссылки с помощью Javascript, могут быть особенно проблематичными, поэтому не все веб-приложения легко «реверсивно проксируются».

Так что установите Apache на четвертую «внешнюю» виртуальную машину - перенаправьте свой входящий TCP 80 на эту виртуальную машину. Вы также должны убедиться, что эта виртуальная машина может подключаться к другим виртуальным машинам в вашей «виртуальной сети». Затем на своей «интерфейсной» виртуальной машине вы можете настроить отдельный обратный прокси-сервер для каждого веб-сайта.

Вот соответствующие детали конфигурации Apache, используя ProxyPass а также ProxyPassReverse директивы.

Вы также можете разработать и внедрить кэширование, которое поможет повысить производительность.

LawrenceC
источник