初心者の質問です。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 として表示するようにする必要があります。