Apache 伺服器將子域重定向到埠
我正在嘗試在具有子域重定向的非標準埠上使用 Minecraft 伺服器設置我的伺服器,當通過 minecraft 導航到它時將轉到其正確的埠,或者如果通過 Web 瀏覽器導航到將顯示一個網頁。IE:
**Minecraft** minecraft.example.com:25565 -> example.com:25465 **Web Browser** minecraft.example.com:80 -> Displays HTML Page
我試圖通過在 Apache 中使用以下 VirtualHosts 來做到這一點:
Listen 25565 <VirtualHost *:80> ServerAdmin matt@example.com ServerName minecraft.example.com DocumentRoot /var/www/example.com/minecraft <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/example.com/minecraft/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> </VirtualHost> <VirtualHost *:25565> ServerAdmin matt@example.com ServerName minecraft.example.com ProxyPass / http://localhost:25465 retry=1 acquire=3000 timeout=6$ ProxyPassReverse / http://localhost:25465 </VirtualHost>
當我瀏覽到 minecraft.example.com 時執行此配置,我可以看到 /var/www/example.com/minecraft/ 文件夾中的文件,但是如果我嘗試在 minecraft 中連接,則會出現異常,並且在瀏覽器我得到一個包含以下資訊的頁面:
minecraft.example.com:25565 -> Proxy Error The proxy server received an invalid response from an upstream server. The proxy server could not handle the request GET /. Reason: Error reading from remote server
任何人都可以分享一些關於我可能做錯了什麼以及解決此問題的最佳解決方案的見解嗎?
Minecraft 伺服器協議不是 HTTP,所以你不能代理這樣的請求。
假設您在 Linux 上,請使用 iptables 轉發 TCP 埠。您仍然可以在同一 IP 上的埠 80 上執行 Apache,但在您的配置中刪除 Listen 指令和相應的虛擬主機。
IPTables 規則應類似於:
iptables -t nat -A PREROUTING -p tcp -d –dport 25565 -j DNAT –to 127.0.0.1:25465
當然,請記住實際上也允許帶有 INPUT/OUTPUT 鏈中條目的流量。
iptables -t nat -A PREROUTING -p tcp -d 12.13.14.15 --dport 25565 -j DNAT --to 127.0.0.1:25465
12.13.14.15
的IP地址在哪裡minecraft.example.com
。請注意,您不能為此使用虛擬主機。如果您想將 server1.example.com 和 minecraft.example.com 託管在同一個公共 IP 上,都要做這種埠級重定向……抱歉,不會發生。這些東西發生在HTTP 層之前,因此虛擬主機與它無關。:)