你好,我的电脑里有一个 Minecraft 服务器。当我们在同一个局域网中时,我可以和朋友一起玩。但我想将它发布到互联网上,这样我的朋友就可以在任何地方和我一起玩。
我已经有一个互联网 IP(我们称之为12.12.12.12
)并且我购买了一个域名(我们称之为example.com
)。
问题是我的电脑位于防火墙后面,我无法控制。我只能使用端口 80 来为服务器提供服务,而我在端口 80 上已经有一台 Apache 服务器。
我尝试使用 apache vhost 反向代理,但不幸的是 minecraft 不使用 http,所以它无法工作。
我想到了一个想法,重定向minecraft.example.com:80
到12.12.12.12:25565
(minecraft 服务器)和www.example.com:80
(12.12.12.12:8000
apache 服务器)。我该怎么做?
我的电脑是ubuntu18.04
答案1
您无法使用非 HTTP/非 TLS 协议执行此操作,因为无法确定客户端尝试使用的域名。请求的域名带有里面HTTP 请求中或者 TLS 握手中。
(你可以如果您有可用的 HTTPS 端口 443,并且 Minecraft 使用 TLS 进行自己的通信,则可以轻松实现这一点……但不幸的是它没有。)
剩下的一个选择是使用风俗“反向代理”程序,它根据初始数据包转发连接 - 例如,如果客户端的第一个数据以GET
或另一个 HTTP 动词开头,则整个连接将转发到 Apache;否则将转发到 Minecraft。
(也许可以使用专门的负载平衡软件(例如 HAproxy)来构建它?但从头开始编写程序可能更容易...此外,该程序需要在路由器上运行,以便能够保留真实的客户端 IP 地址。)