2013-11-24 2 views
0

У меня есть Synology DSM, настроенный для домашнего хостинга, и я пытался поиграть с ним. Моя текущая цель - назначить субдомены определенным службам, например. панель администратора DSM, SickBeard и т. д.Apache mod_rewrite - переписать порт в поддомен

Единственная проблема заключается в том, как Synology управляет своими услугами. Некоторые из них просто основаны на веб-хосте (и помещаются в папку/var/services/web/в своей собственной подпапке), а некоторые из них работают на отдельных портах (например, Sickbeard работает на порту 8083, а панель администратора работает на порт 5000).

Результаты очень просты: перенаправлять поддомены (см. Ниже) к этим портам, БЕЗ отображения портов.

admin.fonix232.net -> fonix232.net:5000
sb.fonix232.net -> fonix232.net:8083
home.fonix232.net -> fonix232.net:8085
т.д.

Я создал простое правило mod_rewrite для подобласти admin.fonix232.net, следующим образом (в HTTPd-vhost.conf-пользователь):

<VirtualHost *:*> 
ServerName admin.fonix232.net 

RewriteEngine on 
RewriteCond %{HTTP_HOST} admin\.fonix232\.net [NC] 
RewriteRule ^/(.*)$ http://fonix232.net:5000/$1 [P,QSA,L] 
</VirtualHost> 

он отлично работает, за исключением того, что не переписать порт - он останется 5000, но, по крайней мере, на субдомене.
Как я могу удалить его?

+0

Эта строка: _it не переписывает the_port - он остается 5000, _ кажется противоречивым. Посещение http://admin.fonix232.net будет на порту 80, так что вы имеете в виду, когда говорите «он остается 5000»? – TecBrat

+0

Я имею в виду, что посещение admin.fonix232.net не будет оставаться на порту 80 - оно бросает меня в admin.fonix232.net:5000 и перенаправляет каждый вызов на это. Было бы также полезно перенаправить прямые вызовы портов (* .fonix232.net: [PORT], где * не соответствует [target], [target] .fonix232.net) к их соответствующей цели. – fonix232

ответ

0

Решение было довольно простым, мне пришлось использовать mod_proxy и mod_proxy_http.

Благодаря тому, как Synology построила свою систему Apache (три отдельные службы для системы/веб-мастера, пользователя и webdav), лучшим решением было создание нового файла конфигурации и расширение существующего путем незначительной модификации сценария запуска для импорта это тоже (по каким-то таинственным причинам, любое ручное дополнение к файлам конфигурации стирается, как только кто-то редактирует настройки у веб-мастера).

Таким образом, после этого я должен был создать отдельные VirtualHosts для отдельных услуг, которые я хотел перенаправить, следующим образом:

<VirtualHost *> 
    ServerName [full subdomain you want to redirect to] 
    ProxyRequests On 
    ProxyPreserveHost On 

    <Proxy *> 
      Order deny,allow 
      Allow from all 
    </Proxy> 

    ProxyPass/[target address and port you want to reach] 
    ProxyPassReverse/[target address and port you want to reach] 

    <Location /> 
      Order allow,deny 
      Allow from all 
    </Location> 

Хотя большинство учебников показывают, что ProxyRequests должен быть выключен, для меня это никогда не срабатывало, только включив его.

Теперь остается одна вещь, точное обратное. Значение, если порт X вызывается из * .domain.tld, независимо от того, что, отбросьте меня на назначенный subdomain.domain.tld. Тяжелый орешек, чтобы взломать, но попасть туда.

Смежные вопросы