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

Перенаправление на другие внутренние серверы на основе поддомена

Вот моя ситуация

домашняя сеть, машины с Windows, 1 внешний IP-адрес (который позволяет порт 80), 1 домашний сервер Windows всегда на машине, в ближайшее время планируется обновление до WHS 2011. несколько IP-камер, которые используют собственный веб-сервер и доступны напрямую.

Моя проблема / цель:

Я хотел бы иметь внешний доступ к моим IP-камерам и серверам в моей домашней сети через субдомен, через порт 80, то есть: cam1.mydomain.com, cam2.mydomain.com, nas.mydomain.com и т. Д.

В настоящее время они настроены с переадресацией портов, но во многих сетях, в которых я работаю, все нестандартные порты заблокированы, поэтому мне нужно, чтобы все они были на порту 80. Насколько я понимаю, это невозможно сделать на уровне маршрутизатора и будет нужно делать на уровне веб-сервера, и это нормально.

По сути, это просто внутренняя маршрутизация на разные серверы в зависимости от поддомена, что, как я надеюсь, является общей проблемой с относительно простым решением.

дайте мне знать, если я что-то упустил. заранее спасибо.

(кстати, IIS предпочтительнее apache, если все равно)

Если вы обращаетесь к службам через HTTP (т.е. в веб-браузере напрямую, а не через плагин или какое-либо другое клиентское приложение), вы можете сделать это, используя что-то вроде nginx в качестве обратного прокси - он может выбирать, куда отправлять каждый запрос, который он прокси для зависимости от входящей строки заголовка "host" (с помощью одной директивы "server" для каждого поддомена с собственными настройками прокси-доступа).

Вы не сможете сделать это на своем маршрутизаторе, если вы не используете специальную прошивку, которая запускает (или позволяет установить) такую ​​программу, как nginx, которая может действовать как обратный прокси, как это, но если вы перенаправляете TCP80 на машина с nginx, тогда техника будет работать.

https://help.ubuntu.com/community/Nginx/ReverseProxy дает пример конфигурации для nginx в качестве обратного прокси (будет еще много примеров, если вам нужно больше). Многие другие веб-серверы или любые приложения, разработанные специально для предоставления услуг обратного прокси, должны иметь возможность сделать это за вас. Apache может, если у вас есть mod_proxy (который обычно присутствует, но не загружается по умолчанию). IIRC IIS не могу без надстроек третьей части (которые могут стоить), но есть сборки Windows большинства инструментов с открытым исходным кодом, которые могут выполнять эту работу, поэтому вы все равно можете использовать их, даже если вы полностью используете среду Windows.

Вы можете сделать это, запустив один экземпляр apache на своем общедоступном адресе (на практике это просто означает переадресацию порта 80 с вашего маршрутизатора на любой внутренний ящик, который может запускать apache для вас) и определение виртуального хоста для каждого из поддоменов и использование прокси-сервера передать его на реальные внутренние адреса:

<VirtualHost *:80>
    ServerName cam1.domain.com

    ProxyRequests Off
        <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>
    ProxyErrorOverride On                       
    ProxyPass / http://192.168.1.123/
    ProxyPassReverse / http://192.168.1.123/
    <Location />
    Order allow,deny
        Allow from all
    </Location>

</VirtualHost>


<VirtualHost *:80>
    ServerName cam2.domain.com

    ProxyRequests Off
        <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>
    ProxyErrorOverride On                       
    ProxyPass / http://192.168.1.124/
    ProxyPassReverse / http://192.168.1.124/
    <Location />
    Order allow,deny
        Allow from all
    </Location>

</VirtualHost>

Где cam1 внутренне 192.168.1.123, а cam2 192.168.1.124 и т. Д.