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の場合は、以下を試してください。代替ただし、これには正規表現を手動で記述する必要があります。これは出発点になる可能性があります:

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 は通過するページを変更しないため、ゲームに間違ったリンクがすべて含まれている場合は、それが表示されます。

したがって、これを機能させるには、ゲームを再設定して、リンクなどを localhost.5732 ではなく your.server/game として表示するようにする必要があります。

関連情報