私は複数のゲームサーバーを持っていますTCPポートが1台のホストマシン上にあります。目的は、ユーザーがserver1.domain.netに接続し、そのサブドメインに基づいてユーザーを指定できるようにすることです。最初の本能は次のように書いたが、TCPトラフィックには読み取るヘッダーがないことに気付いた。HAProxy1.5.8を使用して、同じことを複数のバックエンド、use_backendおよび完全なACL行ですが、同じ結果になります(当然です)。
listen game-listener
bind x.x.x.x: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(Host)のようなチェックはありますか?それとも正しく実行していて、ゲームがうまくいかないのですか?
ありがとう!
プロキシの代わりに(ホスト名に基づいて実行できるかどうかがアプリケーションプロトコルに依存する場合)、クライアントソフトウェアが SRV
対応かどうかを確認できます。 DNSだけでこれを設定できるはずです。
SRV
レコードの形式は次のとおりです。
_Service._Proto.Name TTL Class SRV Priority Weight Port Target
Minecraftの複数のインスタンスについて言及した特定の例では、SRV
レコードに基づいてこれを行うことが可能であり、レコードは次のようになります。
_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アドレスを使用するか、アプリケーション層でプロトコル固有のコードを使用してプロキシを実装し、ホスト名を検出する必要があります。
このようなプロキシは、特定のプロトコルでは可能ですが、他のプロトコルでは不可能です。簡単なものから不可能なものまで、私が十分に知っているプロトコルは次のとおりです。
そのような目的で使用される可能性のある、ホスト名を持つ他のプロトコルについては知りません。したがって、上記のリストにないプロトコルのほとんどは、ホスト名でプロキシすることは不可能だと思います。