Apache-2.2

Apache 伺服器將子域重定向到埠

  • November 26, 2012

我正在嘗試在具有子域重定向的非標準埠上使用 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 層之前,因此虛擬主機與它無關。:)

引用自:https://serverfault.com/questions/451847