到Minecraft服务器的Nginx proxy_pass

问题描述 投票:5回答:4

我正在尝试在同一计算机上的两个不同端口上运行两个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则发出了请求。但是我完全茫然。任何帮助,将不胜感激。

nginx minecraft
4个回答
4
投票

如Dag Nabbit所述,Minecraft服务器不会使用http。通常,您将通过NAT进行此操作。代理服务器需要知道协议,因为顾名思义,它代表客户端运行。 Nginx知道各种协议,不仅是http,而且Minecraft也不是其中之一。但是,您可以为此协议编写代理模块,并使用现有的nginx基础结构。由于我不熟悉该协议,因此我无法对此进行评论,因为它比NAT具有任何优势。


6
投票

在您的DNS记录中尝试此操作

记录

Name     one.example.com
Value    <server_ip>
TTL  86400

Name     two.example.com
Value    <server_ip>
TTL  86400

SRV记录

Name     _minecraft._tcp.one.example.com
Port     25500
Value    one.example.com

Name     _minecraft._tcp.two.example.com
Port     25501
Value    two.example.com

0
投票

有待将来的读者注意的一件事,虽然是的,nginx确实将连接作为“代理”传递给通过袜子代理连接方式的上游定义定义的任何server:port列表。当nginx本身正在侦听HTTP通信时,这将不起作用。这仅仅是因为nginx默认情况下被设计为已死的简单静态http服务器。

TCP / UDP连接的任何类型的反向传播都可以在较低的OSI级别(即,在nginx进行操作时,第3层或第2层而不是第6/7层)进行扩展。这是源和目标NAT发挥作用的地方,边缘设备的防火墙或路由策略指令可以更好地处理它。

DNS-RR并不是最好的解决方案,因为只有低端OSI分层才是可行的,只有在最终应用程序(第7层OSI)理解该方法的情况下才可行。我的世界(或几乎所有游戏服务器)在最后检查时并未将此内容内置到游戏的网络代码中。

现在,我确实对此进行了调查,对于Minecraft本身,有一些解决方案应该进一步研究:

  • Transporter插件
  • 蹦极绳

请务必阅读所有文档,因为这些文档的配置和安装非常复杂。建议不要使用NAT版本的网络拓扑。


0
投票

嗯...现在我们有了BungeeCord。它完全满足您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.