Pull to refresh

Все вебморды в одной. virtualhost и proxy_pass в nginx для дома.

Lumber room
В этой статье я хотел бы поделиться опытом, как организовать доступ к Web-интерфейсам различных домашних качалок через один единственный проброшеный наружу порт. Делать будем под винду (на Win32 порту nginx), но точно также можно сделать под unix.

Где это может понадобиться? Очень простой пример, состоящий из двух условий:
— У меня дома стоит СТРИМ, который блокирует входящий 80 порт
— У меня на работе открыты наружу только порты 443, 80, 5190.
— Как итог: я могу достучаться домой только к 2 сервисам, один из которых у меня SSH, и один остается свободным. Задача сводится к тому, чтобы завернуть все WEB-морды в один сайт, ибо замучался я с SSH-туннелингом. Универсального интерфейса, конечно же, не получится, так что их надо логически разделить.

Ничего революционного я не скажу, лишь подскажу, как это сделать. Весь рассказ основывается на следующих вещах, но при желании вы с легкостью подключите любой другой веб-интерфейс:
У вас есть динамический реальный IP
DynDNS
nginx для Win32
µTorrent
µTorrent WebUI
eMule

DynDNS — принцип, регистрация и настройка

Принцип работы DynDNS очень прост: программа на компьютере, маршрутизаторе или модеме периодически обращается к сервису DynDNS. Сервис смотрит IP, с которого произошло обращение, и привязывает зарегистрированную вами бесплатную DNS-запись к IP, с которого произошло обращение. Таким образом, адрес вида myname.dyndns.org всегда указывает именно на ваш внешний IP-адрес, даже если у вас он динамический.

Вам нужно зарегистрировать аккаунт на сайте DynDNS, затем создать одну бесплатную DNS-запись в том домене второго уровня, который вам больше понравится. Мне, например, .homedns.org нравится. В настройках вам следует выставить галочку «Create wildcard alias». Тип записи должен быть «Host with IP address». Пример можете посмотреть на картинке:

Теперь нам нужно настроить программу-клиент. Сразу оговорюсь, что во многих роутерах Asus WL* уже встроен DynDNS-клиент, его настройки находятся в мень IP Config -> Miscellaneous. Так же во многих других домашних роутерах и модемах присутствует DynDNS-клиент. Если же его нет, то его нужно будет поставить на наш сервер. Скачать можно на самом сайте DynDNS в соответствующем разделе.

Включаем, вводим свой логин, пароль, и уже зарегистрированное на сайте DynDNS.org DNS-имя, которое мы хотим задействовать, и вуаля, теперь вы можете обращаться к своему домашнему роутеру по DNS-имени, например, vpedalkin.dyndns.org.

uTorrent, eMule, ...

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

WebUI uTorrent нам следует настраивать на альтернативном порту и настраивать фильтрацию по IP. Так как сервер nginx мы будем ставить на той же машине, на которой стоит uTorrent, то делаем фильтрацию по 127.0.0.1 (т.е. только с этой машины). Альтернативный порт мы используем для того, чтобы у нас Web-морда не торчала наружу в двух экземплярах — через nginx и через проброшенный до uTorrent порт.
Подсказка для тех, кто не настраивал uTorrent WebUI никогда: Нужно положить скачанный с сайта uTorrent файл webui.zip, не распаковывая, в папку профиля. Чтобы ее открыть, нажмите Win + R и введите %USERPROFILE% (с процентиками) и нажмите ОК.

Вебморду eMule настраивать легче легкого: прописываем порт, пароль и все.

Я использовал порт 8081 для uTorrent и 8082 для eMule.

Переходим к настройке nginx

К моему большому сожалению, nginx под Win32 официально нет, но есть его сторонняя сборка на cygwin. Из основных недостатков можно отметить то, что nginx win32 ставится только в C:\nginx и никуда его оттуда не денешь.

Итак, устанавливаем nginx, открываем C:\nginx\conf\nginx.conf. Я Предпочитаю использовать редактор AkelPad — он очень похож на блокнот, но хорошо дружит с кодировками и мелкими рюшечками.

В моем случае HTTP-сервер у меня висит на порту 5190, ибо 443 занимать было жалко, да и неудобно это было мне — настраивать секурный сервер, так как uRemote, которой я пользуюсь, не поддерживает HTTPS-соединений.
Полный пример моего конфига здесь.
В общем случае мы добавляем директивы Server, например так:
server {
listen 5190;
server_name emule.vpedalkin.xxxxdns.org;
access_log logs/emule.log main;
location / {
#Аккуратно тут поправьте URL при копировании
proxy_pass h ttp://127.0.0.1:8082/;
proxy_buffer_size 8k;
proxy_buffering off;
proxy_connect_timeout 3;
proxy_ignore_client_abort off;
}
}


Обращаю ваше мнимание: для разделения мы используем Virtual Hosts. Таким образом сервер, в зависимости от того, как к нему обращаются (как к utorrent.vpedalkin.dyndns.org или emule.vpedalkin.dyndns.org), выполняет транспорт к определенному серверу (до uTorrent или eMule соответственно).
Не забываем поправить в конфиге все listen на тот порт, который вы собираетесь открыть наружу для веб-сервера. Также замените все vpedalkin.xxxdns.org на свои собственные реквизиты, зарегистрированные в DynDNS. Обращаю внимание что emule.vpedslkin.dyndns.org не надо регистрировать дополнительно — благодаря той галочке, которую мы поставили в свойствах записи на сайте DynDNS.org в самом начале, все это само будет перебрасываться туда же, куда и сам vpedalkin.dyndns.org
Проброс

Теперь главное не забыть пробросить порт до виндовой машины на роутере. Я использую порт 5190 для веб-сервера.
Результат

Как результат, я получил Web-интерфейс к eMule по адресу httр://emule.vpedalkin.xxxdns.org:5190, У меня спокойно настроен и работает uRemote по адерсу utorrent.vpedalkin.xxxdns.org порт 5190, а также веб-морда uTorrent по адресу httр://utorrent.vpedalkin.xxxdns.org:5190/gui. Можно было бы убрать эту приставку /gui/, но во многих программах типа uRemote эта строка зашита, и избавившись от нее мы не сможем подружить программу и вебморду.
Дополнительно у нас есть сайт httр://vpedalkin.homedns.org:5190, на котором у меня располагаетсяя набор ссылок на все мои веб-морды (у меня их чуточку больше чем описано). Файлы этого сайта лежат в папке c:\nginx\html.

Был рад, если кому-то эта информация покажется интересной.
Tags:
Hubs:
Total votes 33: ↑27 and ↓6 +21
Views 2.1K
Comments Comments 18