Apache 服务器将子域名重定向到端口

Apache 服务器将子域名重定向到端口

我正在尝试使用子域重定向在非标准端口上设置 Minecraft 服务器,当通过 Minecraft 导航到该服务器时将转到其正确的端口,或者如果通过 Web 浏览器导航到该服务器将显示一个网页。即:

**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

有人可以分享一些我可能做错的事情以及解决这个问题的最佳解决方案吗?

答案1

Minecraft 服务器协议不是 HTTP,因此您无法像那样代理请求。

假设您使用的是 Linux,请使用 iptables 转发 TCP 端口。您仍然可以在同一个 IP 上的端口 80 上运行 Apache,但要删除那里的配置中的 Listen 指令和相应的 vhost。

IPTables 规则应如下所示:

iptables -t nat -A PREROUTING -p tcp -d --dport 25565 -j DNAT --to 127.0.0.1:25465

当然,请记住实际上也要允许 INPUT/OUTPUT 链中有一个条目的流量。

答案2

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 层,因此虚拟主机与它无关。:)

相关内容