我正在尝试在具有子域重定向的非标准端口上使用 Minecraft 服务器设置我的服务器,当由 minecraft 导航到它时将转到其正确的端口,或者如果通过网络浏览器导航到将显示网页。IE:
**Minecraft**
minecraft.example.com:25565 -> example.com:25465
**Web Browser**
minecraft.example.com:80 -> Displays HTML Page
我试图通过在 Apache 中使用以下 VirtualHosts 来做到这一点:
Listen 25565
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName minecraft.example.com
DocumentRoot /var/www/example.com/minecraft
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/example.com/minecraft/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
<VirtualHost *:25565>
ServerAdmin [email protected]
ServerName minecraft.example.com
ProxyPass / http://localhost:25465 retry=1 acquire=3000 timeout=6$
ProxyPassReverse / http://localhost:25465
</VirtualHost>
当我浏览到 minecraft.example.com 时运行此配置我能够看到 /var/www/example.com/minecraft/ 文件夹中的文件,但是如果我尝试在 minecraft 中连接我得到一个异常,并且在浏览器我得到一个包含以下信息的页面:
minecraft.example.com:25565 ->
Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /.
Reason: Error reading from remote server
任何人都可以分享一些关于我可能做错了什么以及解决这个问题的最佳解决方案的见解吗?
Minecraft 服务器协议不是 HTTP,因此您不能像那样代理请求。
假设您使用的是 Linux,请使用 iptables 转发 TCP 端口。您仍然可以在同一 IP 的端口 80 上运行 Apache,但在您的配置中删除 Listen 指令和相应的虚拟主机。
IPTables 规则应该类似于:
iptables -t nat -A PREROUTING -p tcp -d --dport 25565 -j DNAT --to 127.0.0.1:25465
当然,请记住实际上也允许在 INPUT/OUTPUT 链中有一个条目的流量。
iptables -t nat -A PREROUTING -p tcp -d 12.13.14.15 --dport 25565 -j DNAT --to 127.0.0.1:25465
12.13.14.15
的IP地址在哪里minecraft.example.com
。请注意,您不能为此使用虚拟主机。如果你想在同一个公共 IP 上托管 server1.example.com 和 minecraft.example.com,两者都进行这种端口级重定向......抱歉,不会发生。这些东西发生在HTTP 层之前,因此虚拟主机与它无关。:)