У меня есть веб-сервер, на котором на самом деле есть сервер 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.