mod_proxy 將 http://myserver/game 對應到 http://localhost:5732/?

mod_proxy 將 http://myserver/game 對應到 http://localhost:5732/?

N00b 問題。我有一個網址

 http://myserver.com/game

並想調用內部資源

 http://localhost:5732/

我試過:

AllowCONNECT 5732
ProxyPass /game/ http://localhost:5732/ nocanon
ProxyPassReverse /game/ http://localhost:5732/

但傳回的 HTML 包含未添加 /game/ 前綴的鏈接,並且 JS 和 CSS 損壞。所以我嘗試:

 RewriteEngine On
 RewriteRule ^/game(.*) http://localhost:5732$1

但這會向瀏覽器發送重定向(這當然不起作用)。

我做錯了什麼?我的目標是:

 http://myserver/game --> http://localhost:5732/ 

非常感謝幫助

答案1

如果您的 Apache 版本足夠新(2.4+),您可以嘗試mod_proxy_html

ProxyPass /game http://localhost:5732 nocanon
ProxyPassReverse /game http://localhost:5732
<Location /game/>
    ProxyHTMLEnable On
    ProxyHTMLURLMap / /game/
</Location>

對於舊版的 apache,您可以嘗試使用mod_替換。但是,這需要您手動編寫正規表示式。這可能是個起點:

ProxyPass /game http://localhost:5732 nocanon
ProxyPassReverse /game http://localhost:5732
<Location /game/>
    SetOutputFilter SUBSTITUTE
    Substitute s|href='/|href='/game/|nq
    Substitute s|src='/|src='/game/|nq
</Location>

當然,確切的配置取決於您目前從遊戲伺服器獲得的輸出。

答案2

您使用 ProxyPass 和 ProxyPassReverse 所做的第一個版本是執行您想要的操作的最常見方法。問題是,無論您在 localhost:5732 上運行的是什麼,都會建立將發送回的 HTML - 並且它不知道它不會被稱為 localhost:5732。您的 proxypass 不會更改所通過的頁面,因此如果您的遊戲包含所有錯誤的鏈接,這就是您將看到的內容。

因此,為了使其工作,您需要重新配置您的遊戲,以便它知道將其連結等顯示為 your.server/game 而不是 localhost.5732。

相關內容