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

    В этой статье я хотел бы поделиться опытом, как организовать доступ к 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.

    Был рад, если кому-то эта информация покажется интересной.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 18

      0
      Почему именно nginx? Апач и лайти под винду есть.
        0
        Потому что nginx как бы изначально под это разрабатывался, а к апачу и lighttpd (это он лайти?) это уже потом прикрутили и они в первую очередь вебсерверы.
          0
          www.kevinworthington.com/nginx-for-windows/ — это тот nginx?
          А nginx это что в первую очередь?
          Необходимый функционал в апаче и лайти есть, почему вы отказались от нативных серверов под win32?
            0
            Функционал, не спорю, есть.
            nginx выбрал потому, что он сам по себе наиболее легкий и довольно просто конфигурируется. Мне с ним удобнее и привычнее.
              +1
              А почему бы инет? Ведь автор не писал что нельзя использовать что-то друагое. nginx ни чем не хуже виндового апача, для задач, описаных в статье.
                0
                Не спорю, по функциям не хуже. Но он не нативный по винду. В моем понимании это тоже самое, что запускать в линуксе виндовый апач под вайном, если абстрагироваться от существования нативного апача для линукс. Какая-то сторонняя сборка. Поэтому и спрашивал, без упреков, просто интересуюсь.
          • UFO just landed and posted this here
            0
            Только вчера тоже самое делал, но для Unix :)
            Там в nginx ещё можно делать различие по портам :)
              0
              Да, вроде, различия по портам все вышеперечисленные сервера обрабатывают :)
              –2
              Однако, изврат…
                +2
                Хорошее руаководство. Уверен, пригодится многим пользователям, которые только начинают изуачать уадобный и легкий реверсный proxy-сервер nginx.
                  0
                  неплохое руководство для начинающих по созданию reverse-proxy на nginx, но не понятно чем оно лучше ssh туннелей. ssh как бонус дает туннелирование не только хттп но и любого порта + секурность.
                    0
                    Я пользуюсь uRemote для работы с uTorrent (Это что-то вроде Sancho).
                    Ктото полбхуется утилиткой по заливке торрента в uTorrent с помощью еще одной утилиты (названия не вспомню, увы)
                    Соответственно, аспекта два: Поднимать тоннель перед работой программы означает: а) написать собственную программу с 2мя потоками (один под SSH, второй под HTTP). либо извращаться с BAT-файлами (там тоже можно мультипоток создать, но вот контролировать это все...).

                    И потом, когда у меня работает uRemote, мне ненадо держать связку plink + hidec в работе. Следить за соединением тоже не очень хочется, так как plink не всегда правильно обрабатывает обрыв связи, и бывает что висит до тех пор пока через него что-нибудь не попытаешься отправить.
                      0
                      я б ответил что-нить толковое, но я не знаю что такое: uRemote, Sancho, plink, hidec. Отчасти по этому я не понял зачем нужно писать собственую програмку или батник, что за 2 потока и зачем они нужны.
                      Так много сложностей описано, которые необходимо преодолеть чтоб просто получить доступ к простенькой веб морде. Мне чего-то даже страшно вдруг стало…
                        0
                        uRemote — это программа, которая работает как WEB-интерфейс (и работает через JSON с сервером uTorrent). Плюс в том, что не нужно держать браузер.

                        Sancho — это такая-же программа, которая использует функции WEB-интерфейса mldonkey, но запущена локально

                        plink — это PuTTY в командной строке
                        hideс — это программа, которая прячет консольное приложение.
                        0
                        у меня запущен путти с включенным туннелингом
                        использую как web так и uRemote и даже не могу понять почему возникает необходимость делать то что вы сейчас написали:

                        >>написать собственную программу с 2мя потоками (один под SSH, второй под HTTP).

                        приходя на работу, подключаюсь по SSH к домашнему роутеру.

                        настраиваю (было сделано 1 раз, потом конечно же используется сохраненная сессия) проброс портов:
                        L2122: 192.168.1.7:2123, что в браузере, что в uRemote забиваю адрес: 127.0.0.1:2122.
                        L3000: 192.168.1.7:3389, теперь могу ходить по rdp 127.0.0.1:3000 и попадать на тачку дома.
                        D1080 — сокс на 127.0.0.1:1080 для аськи

                        так что реально не понимаю тех сложностей, о которых Вы выше сказали
                      0
                      Я аналогичную штуку попросил админов сделать в офисе для удобства доступа к интранет-сервисам. В качестве бонуса — поскольку домен тот же, на любой сервис можно зайти просто по имени в адресной строке браузера. Пример: если в адресной строке написать blog, попадаем в блог, если wiki — на wiki. Удобнее, чем закладки :)
                        0
                        Здравствуйте, сегодня пытался настроить все как описано.
                        Сразу оговорюсь что я нуб в администратировании, програмировании и всем что с этим связано.
                        Захотелось настроить, нашел вашу статью, понемногу разобрался с настройками, портами серверами и брендмауэрами. Все получилось, НО.

                        Когда через username.Dyndns.org захожу, вижу долгую загрузку Webui, и в скором времени ошибку «WebUI is having trouble contacting µTorrent. Try reloading the page.»
                        При этом если прописать динамический iP ip:8081/gui/, предварительно открыв в модеме порт, все работает.

                        Кажется я недоразобрался какие порты открывать.

                        Only users with full accounts can post comments. Log in, please.