Выступание за IIS...
Я корректен в предположении, что основа uri будет всегда начинаться "/"
Да. (Хотя поле называют ** cs - ** основа uri.)
и что никакое другое поле никогда не будет?
Нет. Несколько других полей могли бы начаться "/", такие как:
Снова, я не могу говорить ни за какие другие веб-серверы, но в IIS, было бы чрезвычайно неблагоразумно предположить, что cs-uri-stem является единственным полем, которое начинается "/".
--
Да, это довольно легко сделать с mod_proxy апача. Как Вы предположили, я перемещу кота для портирования 8080, или что-то и затем иметь апача слушает на 80. Аналогично, скажите установку sinatra для слушания на порте 8888. Затем в апаче, Вы делаете что-то вроде этого:
<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 для этого, указало на Ваш сервер) в Вашем браузере, и апач проксирует до кота, слушающего на 8 080. Аналогично, domain2.com будет проксирован до sinatra.
Я уверен, что это могло быть сделано легко с nginx, haproxy, или чем-то еще довольно легко. У меня нет опыта с теми, тем не менее, таким образом, необходимо будет посмотреть в другом месте, если Вы хотите пойти то направление.
Можно также использовать 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
Здесь кот слушает на порте 8080, и sinatra слушает на порте 8081.
(можно хотеть использовать что-то как Shorewall или некоторый другой инструмент управления брандмауэром вместо управления iptables
непосредственно)
Только один процесс может обычно собственный порт, таким образом, Вам будет нужна некоторая форма Прокси HTTP для фактического слушания на порте 80, который имеет ум для передачи запросов к Tomcat или sinatra на основе имени хоста (или безотносительно других критериев, как путь URL). В то время как Apache mod_proxy может сделать это, он имеет некоторые ограничения, и Apache может быть тяжеловесом. Я предложил бы специальный прокси как nginx или lighthttpd. Намного меньшее место с точки зрения памяти, и быстрее при высокой загрузке, если это - Ваша потребность.