5

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

我在 mysite.com:25560 上有一个普通的 Minecraft 服务器在监听,在 mysite.com:25570 上有一个 Tekkit Minecraft 服务器在监听。也就是说,两个 Minecraft 服务器都在同一台机器上运行。当用户使用指定的端口直接连接到服务器时,它们可以正常工作。

vanilla 服务器最初在 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 must be absolute!

为了看看我是否能让它正常工作,然后我尝试在各个地方替换http://www.mysite.com:25560/60,虽然 Apache 确实启动没有任何错误,但用户无法连接到服务器. 我相信这是因为 Minecraft 服务器不会将 HTTP 请求重定向到服务器连接,无论可能是哪种协议。

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

谢谢!

4

2 回答 2

3

解决方案1:

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

如果您在 Linux 上,您可能可以使用 Mono 运行它,因为我没有找到任何 Java 或 Python 等价物。

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

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

使用 Minecraft 自 1.3 起识别的 SRV 记录。Multiplay 已在http://wiki.multiplay.co.uk/Minecraft/Hostnames上发布了手册。

于 2013-01-03T14:54:11.963 回答
0

我相信 iptables 会为你做这件事,假设你在 Linux 上:

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

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

于 2012-08-29T17:17:32.087 回答