我正在尝试在两个不同端口上的同一台计算机上运行两台Minecraft服务器。我想基于子域引用它们:
one.example.com -> <minecraft>:25500
two.example.com -> <minecraft>:25501
之前我曾经使用过nginx之类的东西,但它不适用于Minecraft。它以http状态400响应。以下是我日志中的示例:
192.168.0.1 - - [21/Apr/2013:17:25:40 -0700] "\x02<\x00\x0E\x00t\x00h\x00e\x00s\x00a\x00n\x00d\x00y\x00m\x00a\x00n\x001\x002\x003\x00\x1C\x00t\x00e\x00s\x00t\x00.\x00r\x00y\x00a\x00n\x00s\x00a\x00n\x00d\x00y\x00.\x00i\x00s\x00-\x00a\x00-\x00g\x00e\x00e\x00k\x00.\x00c\x00o\x00m\x00\x00c\xDD" 400 173 "-" "-"
这是我的nginx配置:
upstream mine1 {
server 127.0.0.1:25500;
}
upstream mine2 {
server 127.0.0.1:25501;
}
server {
listen 25565;
server_name one.example.com;
access_log /var/log/nginx/one.access;
error_log /var/log/nginx/one.error;
location / {
proxy_pass http://mine1;
}
}
server {
listen 25565;
server_name two.example.com;
access_log /var/log/nginx/two.access;
error_log /var/log/nginx/two.error;
location / {
proxy_pass http://mine2;
}
}
如果我正确读到这个,nginx正在响应400.我的猜测是Minecraft客户端没有发送有效的HTTP头,而Nginx正在抛出请求。但我完全不知所措。任何帮助将不胜感激。
答案 0 :(得分:6)
在您的DNS记录中尝试此操作
Name one.example.com
Value <server_ip>
TTL 86400
Name two.example.com
Value <server_ip>
TTL 86400
Name _minecraft._tcp.one.example.com
Port 25500
Value one.example.com
Name _minecraft._tcp.two.example.com
Port 25501
Value two.example.com
答案 1 :(得分:2)
正如Dag Nabbit所说,Minecraft服务器不会说http。您通常会通过NAT执行此操作。代理服务器需要知道协议,因为顾名思义,它代表客户端。 Nginx知道各种协议,而不仅仅是http,但是Minecraft不是其中之一。但是,您可以为此协议编写代理模块,并使用现有的nginx基础结构。由于我不熟悉协议,我不能评论这个优于NAT的事实。
答案 2 :(得分:0)
有一点需要注意未来的读者,而是nginx确实将连接作为“代理”传递给任何服务器:通过socks代理连接方式的上游定义定义的端口列表。当nginx本身正在侦听HTTP通信时,这不起作用。这只是因为nginx默认设计为死的简单静态http服务器。
任何类型的TCP / UDP连接的反向代理在较低的OSI级别(即nginx运行时的第3层或第2层而不是第6/7层)更具可扩展性。这是源和目标NAT发挥作用的地方,可以通过边缘设备的防火墙或路由策略指令更好地处理。
DNS-RR不是最好的解决方案,而更低级别的OSI分层是唯一可行的,如果最终应用程序(第7层OSI)理解该方法。 Minecraft(或几乎任何游戏服务器)在最后一次检查时没有内置到游戏的网络代码中。
现在我确实对此进行了调查,并且有一些解决方案可以让我自己进一步了解:
请务必阅读所有文档,因为这些文档配置和安装非常复杂。 Hench建议只使用NAT-ed网络拓扑。
答案 3 :(得分:-1)
我尝试使用 SRV 设置我的多个 minecraft 实例,但这也不起作用 我的 srv 记录的 nslookup 显示:
C:\Users\Administrator>nslookup -type=SRV _minecraft._tcp.xxx.net 服务器:mijnmodem.kpn 地址:192.168.1.1
非权威答案:
_minecraft._tcp.xxx.net SRV 服务位置:
priority = 5
weight = 5
port = 25565
svr hostname = camelot.xxx.net
_minecraft._tcp.xxx.net SRV 服务位置:
priority = 5
weight = 5
port = 25566
svr hostname = cityworld.xxx.net
在我的路由器(中兴 H369)上,端口 25565 和 25566 直接转发(TCP 和 UDP)到运行实例的 IP。访问网址(在 Minecraft 中)会出现 io.netty.channel.Abstart$AnnotatedConnectException
对如何进一步调查有什么建议吗?