在HAProxy中实现Minecraft的虚拟主机功能
阅读本文后您可以做什么
dev1.domain.tldでアクセスしたときはdev1のMinecraftサーバへ、
dev2.domain.tldでアクセスしたときはdev2のMinecraftサーバへアクセスできるようにする。
ただし、dev1.domain.tldも、dev2.domain.tldも、同じグローバルIPを指すものとする。
Routing connections of Minecraft based on their domain names such as dev1.domain.tld or dev2.domain.ld WHILE those domains point the same global ip address.
方法概要:逻辑解释
HAProxy(L7プロキシ)を使う。
Minecraftの接続確立時の通信内容(ドメイン名が含まれる)を一部読み取り、その内容に応じてルーティング先を制御する。
We use the Layer-7 proxy called HAProxy. Based on the payload information in the tcp packet after TCP handshake, determine to where the following packets go.
环境
CentOS 7.1:中文名为“CentOS 7.1”。
Craft Bukkit 1.8.8:中文名为“Craft Bukkit 1.8.8”。
HAProxy 1.5.14-3.el7:中文名为“HAProxy 1.5.14-3.el7”。
如何+手順
詳しくはここを。
frontendとして以下を記述。
mode, bind, tcp-request
frontend minecraft
mode tcp # MinecraftはTCP接続
bind 0.0.0.0:25565 # Minecraftポート(25565)で待ち受け
tcp-request inspect-delay 5s # 最大5秒の遅延までOK(SSLやSMTPでは必要だけどMinecraftでは要らないかも)
acl mc_dev1_flg payload(4,4) -m sub dev1 # ドメイン名の先頭4文字がdev1なら
tcp-request content accept if mc_dev1_flg # 受け入れる
use_backend mc_dev1_app if mc_dev1_flg # mc_dev1_appのバックエンドへ
acl mc_dev2_flg payload(4,4) -m sub dev2
tcp-request content accept if mc_dev2_flg
use_backend mc_dev2_app if mc_dev2_flg
在后端中进行如下描述。
backend mc_dev1_app
server mc_dev1_srv 10.0.0.1 # 同じポートへならポート指定要らず
backend mc_dev2_app
server mc_dev2_srv 10.0.0.2 # 10.0.0.1:25564 とかでもOK
结果
好玩。XD