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

Два DNS на один IP

У меня есть веб-сервер, на котором на самом деле есть сервер tomcat6 на порту 80, и он доступен с domain1.com. Я хотел бы открыть другой веб-сайт на том же компьютере, используя сервер sinatra (ruby), и иметь возможность подключаться к нему с domain2.com.

Что мне делать для этого? Я предполагаю, что сначала переместите tomcat6 с 80 на другой порт, а затем поместите что-то локальное на 80, которое туннелирует на другой веб-сервер, используя домен, из которого пришел запрос.

Но я правда не знаю как ..

заранее спасибо

Вы также можете использовать iptables чтобы получить результат, аналогичный использованию mod_proxy (как вам показывает ErikA). Обычно вы перенаправляете пакет на другой порт в зависимости от IP-адреса источника, например:

sudo iptables -t nat -A PREROUTING -p tcp -s domain1.com --dport 80 -j REDIRECT --to-ports 8080
sudo iptables -t nat -A PREROUTING -p tcp -s domain2.com --dport 80 -j REDIRECT --to-ports 8081

Здесь tomcat слушает порт 8080, а sinatra слушает порт 8081.

(вы можете использовать что-то вроде Shorewall или какой-либо другой инструмент управления брандмауэром вместо того, чтобы управлять iptables прямо)

Да, это довольно легко сделать с помощью apache mod_proxy. Как вы предложили, я бы переместил tomcat на порт 8080 или что-то в этом роде, а затем попросил apache прослушивать 80. Аналогичным образом, скажем, вы настроили sinatra на прослушивание порта 8888. Затем в apache вы делаете что-то вроде этого:

<Virtualhost *:80>
    ServerName domain1.com

    # Proxy through to tomcat, listening on port 8080
    <Location />
                ProxyPass http://localhost:8080/
                ProxyPassReverse http://localhost:8080/

                Order allow,deny
                Allow from all
    </Location>
</VirtualHost>

<VirtualHost *:80>
    ServerName domain2.com

    # Proxy through to sintra, listening on port 8888
    <Location />
                ProxyPass http://localhost:8888/
                ProxyPassReverse http://localhost:8888/

                Order allow,deny
                Allow from all
    </Location>
</VirtualHost>

(убедитесь, что mod_proxy установлен и включен)

Когда это будет завершено, вы сможете ввести domain1.com (при условии, что у вас уже есть DNS-запись, указывающая на ваш сервер) в своем браузере, и apache будет прокси-сервером для tomcat, прослушивающего 8080. Аналогичным образом, domain2.com будет проксирован. через синатру.

Я уверен, что это можно легко сделать с помощью nginx, haproxy или чего-то еще. Однако у меня нет опыта работы с ними, поэтому вам придется поискать в другом месте, если вы хотите пойти в этом направлении.

Только один процесс обычно может владеть портом, поэтому вам понадобится какая-то форма HTTP-прокси для фактического прослушивания порта 80, у которого есть умные возможности для пересылки запросов в Tomcat или sinatra на основе имени хоста (или любых других критериев, таких как URL-путь ). Хотя Apache mod_proxy может это делать, у него есть некоторые ограничения, и Apache может быть тяжелым. Я бы предложил специальный прокси, например nginx или lighthttpd. Гораздо меньше занимаемой памяти и быстрее при высокой нагрузке, если это вам необходимо.

То, что вы ищете, называется «Виртуальный хостинг». Погуглите, и вы найдете множество HOWTO.