2013-11-24 76 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

我已經設置了子域admin.fonix232.net一個簡單的mod_rewrite規則,以下列方式(在的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],其中*不匹配[目標],[目標] .fonix232.net)重定向到它們各自的目標也不錯。 – fonix232

回答

0

解決方案非常簡單,我不得不使用mod_proxy和mod_proxy_http。

由於Synology建立Apache系統的方式(系統/網絡管理員,用戶和webdav有三個獨立的服務),最好的解決方案是創建一個新的配置文件並通過略微修改啓動腳本來擴展現有的文件(因爲某些神祕的原因,只要有人編輯webman的設置,任何手動添加到配置文件都會被刪除)。

所以在那之後,我不得不爲單獨的服務,我想重定向,通過以下方式創建單獨的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應該是斷開的,對我來說,它永遠不會那樣工作,只有通過啓用它。

現在剩下一件事了,確切的結果。這意味着,如果從* .domain.tld調用端口X,則無論如何,請將我放在指定的subdomain.domain.tld上。更難的堅果開裂,但到達那裏。