Я ищу решение для пересылки одного общедоступного IP-адреса и одного конкретного порта на разные машины в зависимости от имени хоста (на данный момент он мне нужен только для HTTP).
Текущая настройка - NAT на обычном маршрутизаторе (он предоставляет только простой общедоступный порт на частный IP-адрес / переадресацию портов). При необходимости я могу добавить компьютер с Windows Server 2008 R2 перед маршрутизатором, но предпочитаю этого не делать.
Итак, в идеале я хотел бы иметь текущую настройку, а пересылка выполняется на одном из серверов Windows. Можно ли это сделать?
Попробуйте использовать виртуальные хосты на основе имени Apache и mod_proxy, чтобы перенаправить его на другой хост.
<VirtualHost *:80>
ServerName www.example.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass / http://192.168.254.197/
ProxyPassReverse / http://192.168.254.197/
</VirtualHost>
<VirtualHost *:80>
ServerName www.other_example.com
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass / http://192.168.254.198/
ProxyPassReverse / http://192.168.254.198/
</VirtualHost>
Вышеупомянутое будет перехватывать example.com и other_example.com на вашем переднем IP-адресе, а затем передавать каждый из них на другой IP-адрес.
Похоже, что вам действительно нужны виртуальные хосты на основе имен.
http://httpd.apache.org/docs/2.2/mod/core.html#namevirtualhost
Вы можете купить очень дорогие устройства у Cisco, f5 и других компаний, которые это делают, или, проще говоря, вы можете установить экземпляр кеш кальмара для прослушивания входящих запросов, а затем либо переписать URL-адрес на squid, либо сохранить локальные сопоставления имени / адреса в вашем файле hosts.
Если вам нужно обрабатывать HTTPS, запустите экземпляр станнель перед прокси-сервером HTTP, чтобы завершить работу SSL.