2012-08-29 102 views
4

我正在努力使我的兩個Minecraft服務器更易於訪問。我嘗試了一些解決方案,但到目前爲止,還沒有人有效地開展工作。將非HTTP流量重定向到基於子域的端口

我有一個正常的vanilla Minecraft服務器監聽mysite.com:25560和一個Tekkit Minecraft服務器監聽mysite.com:25570。也就是說,兩個Minecraft服務器都在同一臺機器上運行。當用戶直接連接到指定端口的服務器時,它們可以正常工作。

香草服務器最初正在mysite.com:25565,標準Minecraft端口上進行監聽。我已經改變了它,所以我可以讓Apache在mysite.com:25565上監聽並適當地重定向流量,但目前爲止還沒有工作。

我希望能夠做的是將所有發送到mine.mysite.com的請求重定向到mysite.com:25560,並將所有發送到tekkit.mysite.com的請求重定向到mysite。 COM:25570。我知道DNS本身無法管理此重新路由,因爲DNS只處理域名和IP地址。

在朋友的建議之後,我最近的嘗試是重新配置Apache,正如我剛纔所述,要監聽端口25565並將流量代理到正確的端口。這是我的apache2.conf的一部分:

Listen 25565 

NameVirtualHost *:25565 

<VirtualHost *:25565> 
    ServerName tekkit.mysite.com 
    ServerAlias www.mysite.com 
    <Proxy *> 
     Order allow,deny 
     Allow from all 
    </Proxy> 
    ProxyPreservehost On 
# ProxyPass/www.mysite.com:25570/ 
    ProxyPassReverse/mysite.com:25570/ 
</VirtualHost> 

<VirtualHost *:25565> 
    ServerName mine.mysite.com 
    ServerAlias www.mysite.com 
    ProxyPreserveHost On 
    <Proxy *> 
     Order allow,deny 
     Allow from all 
    </Proxy> 
# ProxyPass/mysite.com:25560/ 
    ProxyPassReverse/mysite.com:25560/ 
</VirtualHost> 

用的ProxyPass被註釋掉的線條讓Apache開始錯誤 的ProxyPass URL必須是絕對的!

爲了確定我是否能夠正常工作,我試圖在各自的地方替換http://www.mysite.com:25560/60,並且Apache沒有任何錯誤地啓動,但用戶無法連接到服務器。我相信這是因爲Minecraft服務器不會將HTTP請求重定向到服務器連接,無論使用哪種協議。

這使我相信Apache在處理非HTTP請求時不會有幫助。如果我錯了,我該如何讓Apache正確地將子域流量重定向到一個端口?否則,任何人都可以提出一種方法來做到這一點沒有Apache?我可以訪問所有標準的Linux/Ubuntu實用程序。我一直在尋找相當長的一段時間而沒有進步。

謝謝!

回答

0

我相信,iptables就會爲你做這個,假設你在Linux上:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 25565 -j REDIRECT --to-port 25560 

你必須以root運行此命令,它不是永久的。每次服務器重新啓動時,您都必須運行此操作。

+1

我很感激它,但我希望可以從域名訪問這兩個服務器實例中的每一個 - 使用該命令將不允許用戶通過輸入地址tekkit.mysite連接到在mysite.com:25570上運行的服務器.COM。我想要mine.mysite.com(這意味着Minecraft中的mine.mysite.com:25565)和tekkit.mysite.com(tekkit.mysite.com:25565)被重定向到mysite.com:25560和mysite.com :25570。 – millinon

+0

啊,我明白了。對不起,我誤解了你的問題。 – monitorjbl

2

解決方案1:

我不認爲這會和Apache一起工作,因爲你只能得到錯誤。在互聯網上搜索一段時間後,我發現以下內容:https://github.com/SirCmpwn/MCVHost。我不確定它是否有效,但是如果它確實符合我的想法,那麼它就完全符合您的需求。

如果你在Linux上,你可以使用Mono來運行它,因爲我還沒有發現任何Java或Python的等價物。

編輯:我只是測試它,它不適用於1.4。6,因爲該協議改變

解決方案2(也可能是最好的):

使用SRV記錄,因爲這1.3認可的Minecraft。 Multiplay在​​3210上發佈了一本手冊。