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。