mod_proxy 将 http://myserver/game 映射到 http://localhost:5732/?

mod_proxy 将 http://myserver/game 映射到 http://localhost:5732/?

新手问题。我有一个 URL

 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_substitute。但是,这需要您手动编写正则表达式。这可能是一个起点:

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。您的代理密码不会更改通过的页面,因此如果您的游戏包含所有错误的链接,您就会看到这些。

因此,为了使其正常工作,您需要重新配置您的游戏设备,以便它知道将其链接等显示为 your.server/game 而不是 localhost.5732。

相关内容