我的单个主机上有多个游戏服务器TCP端口。 目标是让用户能够连接到server1.domain.net,并根据该子域名进行定向。 我的第一本能写了下面的内容,但后来我意识到,TCPstream量不会有任何头来读取。 使用HAProxy 1.5.8。 我尝试使用多个后端,use_backend和完整的ACL线做同样的事情,但得到了相同的结果(可以理解)。
listen game-listener bind xxxx:22222 mode tcp use-server server1 if { hdr(host) -i server1.domain.net } use-server server2 if { hdr(host) -i server2.domain.net } server server1 localhost:22201 check server server2 localhost:22202 check
是否有像我可以用于TCP连接的hdr(主机)检查? 还是我做对了,游戏只是不好玩?
谢谢!
作为代理的替代(如果可以根据应用程序协议来决定是否可以根据主机名进行),您可能需要检查客户端软件是否支持SRV ,在这种情况下,您应该可以单独在DNS中进行设置。
SRVlogging具有以下格式:
_Service._Proto.Name TTL Class SRV Priority Weight Port Target
在你提到的Minecraft多个实例的具体例子中,应该可以根据SRVlogging来做到这一点,logging可能是这样的:
_minecraft._tcp.foo.example.com. 86400 IN SRV 0 5 25565 server1.example.com. _minecraft._tcp.bar.example.com. 86400 IN SRV 0 5 25566 server1.example.com.
根据连接到客户端的主机名在TCP层上不可能做到,将连接分派到不同的后端。
您必须为每个主机名使用不同的IP地址,或者在应用层使用协议特定的代码来实现代理来检测主机名。
这样的代理对某些协议是可能的,但对其他协议不可行。 从简单到不可能,我所了解的协议是:
我不知道任何其他协议与主机名,可用于这种目的。 所以我猜测大多数协议不在上面的列表是不可能的主机名代理。