Apache 基于子域将非HTTP通信重定向到端口

Apache 基于子域将非HTTP通信重定向到端口,apache,subdomain,port,minecraft,Apache,Subdomain,Port,Minecraft,我正在努力使我的两台Minecraft服务器更容易访问。我尝试了一些解决方案,但到目前为止,没有一个有效 我有一个普通的香草Minecraft服务器在mysite.com上监听:25560,还有一个Tekkit Minecraft服务器在mysite.com上监听:25570。也就是说,两台Minecraft服务器都在同一台机器上运行。当用户使用指定的端口直接连接到服务器时,它们可以正常工作 香草服务器最初是在mysite.com上监听的:25565,标准的Minecraft端口。我已经更改了它

我正在努力使我的两台Minecraft服务器更容易访问。我尝试了一些解决方案,但到目前为止,没有一个有效

我有一个普通的香草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>
听25565
名称虚拟主机*:25565
ServerName tekkit.mysite.com
ServerAlias www.mysite.com
命令允许,拒绝
通融
代理主机
#ProxyPass/www.mysite.com:25570/
ProxyPassReverse/mysite.com:25570/
ServerName mine.mysite.com
ServerAlias www.mysite.com
代理主机
命令允许,拒绝
通融
#ProxyPass/mysite.com:25560/
ProxyPassReverse/mysite.com:25560/
带有ProxyPass的注释掉的行导致Apache以错误开头 ProxyPass URL必须是绝对的

为了看我是否能让它正常工作,我试着在相应的地方替换,虽然Apache启动时没有任何错误,但用户无法连接到服务器。我相信这是因为Minecraft服务器不会将HTTP请求重定向到服务器连接,无论是哪种协议

这让我相信Apache在处理非HTTP请求方面不会有帮助。如果我弄错了,我如何使Apache正确地将子域流量重定向到端口?否则,有人能建议一种不用Apache的方法吗?我可以访问所有标准的Linux/Ubuntu实用程序。我已经找了很长时间没有进展了


谢谢

假设您在Linux上,我相信iptables会为您做到这一点:

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

您必须是root用户才能运行此命令,而且它不是永久性的。每次服务器重新启动时,您都必须运行此操作。

解决方案1:

我认为这在Apache上是行不通的,因为您只能得到错误。在互联网上搜索了一段时间后,我发现了以下内容:。我不确定它是否有效,但如果有效,我认为它完全适合你的需要

如果您在Linux上,您可能可以使用Mono运行它,因为我还没有找到任何Java或Python的等效版本

编辑:我刚刚测试了它,但它不适用于1.4.6,因为协议已更改

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


使用SRV记录,Minecraft从1.3开始识别。Multiplay在发布了一本手册。

我很感激,但我希望这两个服务器实例中的每一个都可以通过域名访问-使用该域名将不允许用户通过输入地址tekkit.mysite.com连接到运行在mysite.com:25570的服务器。我想把mine.mysite.com(在Minecraft中意味着mine.mysite.com:25565)和tekkit.mysite.com(tekkit.mysite.com:25565)分别重定向到mysite.com:25560和mysite.com:25570。啊,我明白了。对不起,我误解了你的问题。