Linux
在不使用 Web 伺服器的情況下在 Linux/CentOS 中“基於名稱”的埠轉發或綁定?
我在 Centos 6.3 上有一個遊戲伺服器,它有一個靜態 IP,但託管 3 個不同的遊戲,每個遊戲都在不同的埠上。埠
4000
是遊戲的預設查詢埠,我在後續埠上託管實例。目前,玩家必須通過輸入 IP/主機名和埠來連接到每個遊戲,如下所示:
123.123.123:4001
或server1.mygame.com:4001
遊戲 1123.123.123:4002
或server2.mygame.com:4002
遊戲 2123.123.123:4003
或server3.mygame.com:4003
遊戲 3我想做的是讓玩家不需要輸入埠,只需要記住主機名:
server1.mygame.com
對於遊戲 1server2.mygame.com
對於遊戲 2server3.mygame.com
對於遊戲 3我知道這(埠重定向/轉發)僅使用 DNS A-Records 或其他方式是不可能的。所以我設置 Apache 監聽遊戲的預設查詢埠,並使用基於名稱的虛擬主機嘗試 301 將連接重定向到相應的埠。
server1.mygame.com
例如,與埠 4001匹配的虛擬主機名稱是 301。這在瀏覽器中有效 - 我看到重定向工作正常!但遺憾的是,它在遊戲中並沒有奏效。我的猜測是遊戲無法遵循 301 重定向。我還通過 Apache 嘗試了反向代理,但這也失敗了。
所以我想知道是否有任何方法可以在不使用 Apache 的情況下設置基於名稱的埠轉發。
概括:
基本上我需要以某種方式實施這些規則:
Connection to 123.123.123 established on port 4000 (query port). If the hostname is "server1.mygame.com" --> forward to 4001. If the hostname is "server2.mygame.com" --> forward to 4002. If the hostname is "server3.mygame.com" --> forward to 4003.
全部沒有 Apache 或 301 重定向。
這可能嗎?
TCP和UDP協議中沒有“名稱”這樣的概念,所以你不能這樣做。
替代方案是在應用程序級協議(例如,在 HTTP 1.1 中)實現名稱事物,或者使用不同的 IP 地址或不同的 TCP/UDP 埠。
除非您的遊戲使用 HTTP,否則您放置的整個 Apache 都是無用的,因為 Apache 是一個 HTTP 伺服器。如果你的遊戲聲稱使用 HTTP,那麼它必須理解重定向……否則它只是一個部分的、未完成的 HTTP 客戶端。
(Apache 也可以為其他協議提供服務,但這在這裡無關緊要)