解決策 1:
Apache ProxyPassRewrite は、http://test.example.com から受信した応答本文を書き換えず、ヘッダーのみを書き換えます (404 ページへのリダイレクトなど)。
いくつかの選択肢:
1 ) 絶対パスではなく相対パスを使用するように内部アプリを書き直します。すなわち ../css/style.css
/css/style.css
の代わりに
2 ) 内部アプリを同じサブディレクトリ /folder
に再デプロイします test.example.com のルートではなく。
3 ) 1 つと 2 つが発生する可能性はほとんどありません... 運が良ければ、内部アプリは 2 つまたは 3 つのサブディレクトリのみを使用し、メイン サイトでは使用されません 、単純に一連の ProxyPass 行を記述します:
# Expose Internal App to the internet.
ProxyPass /externalpath/ http://test.example.com/
ProxyPassReverse /externalpath/ http://test.example.com/
# Internal app uses a bunch of absolute paths.
ProxyPass /css/ http://test.example.com/css/
ProxyPassReverse /css/ http://test.example.com/css/
ProxyPass /icons/ http://test.example.com/icons/
ProxyPassReverse /icons/ http://test.example.com/icons/
4 ) 内部アプリ用に別のサブドメインを作成し、単純にすべてを逆プロキシします:
<VirtualHost *:80>
ServerName app.example.com/
# Expose Internal App to the internet.
ProxyPass / http://test.internal.example.com/
ProxyPassReverse / http://test.internal.example.com/
</VirtualHost>
5 ) 時々、開発者は完全に無知で アプリケーションで絶対 URL を生成するだけでなく、URL にホスト名の部分を含めることさえすると、結果の HTML コードは次のようになります:<img src=http://test.example.com/icons/logo.png>
.
あ ) スプリット ホライズン DNS とシナリオ 4 の組み合わせソリューションを使用できます。内部ユーザーと外部ユーザーの両方が test.example.com を使用しますが、内部 DNS は test.example.com のサーバーの IP アドレスを直接指しています。外部ユーザーの場合、test.example.com のパブリック レコードはパブリック Web サーバー www.example.com の IP アドレスを指し、ソリューション 4 を使用できます。
B )実際に apache を取得して、リクエストを test.example.com にプロキシするだけでなく、レスポンス ボディを書き換えることもできます。 ユーザーに送信される前に。 (通常、プロキシは HTTP ヘッダー/応答のみを書き換えます)。 Apache 2.2 の mod_substitute。 mod_proxy とうまくスタックするかどうかはテストしていませんが、次のように動作する可能性があります:
<Location /folder/>
ProxyPass http://test.example.com/
ProxyPassReverse http://test.example.com/
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|test.example.com/|www.example.com/folder/|i"
</Location>
解決策 2:
HBruijn の回答の補足として、ソリューション (3) を選択した場合 "ProxyPass"、HTML ページの一部の URL を書き換えるために mod_proxy_html も使用する必要がある場合があります。
参照。いくつかの例で、リバース プロキシを使用して相対 URL を正しく処理する方法。
応用例として、ProxyHTMLURLMap
を使用して Apache を構成する方法を次に示します。 your-domain-name.com/pad ですべてを転送するルール ポート 9001 でローカルに実行されている Etherpad インスタンスに:
<Location /pad>
ProxyPass http://localhost:9001 retry=0
# retry=0 => avoid 503's when restarting etherpad-lite
ProxyPassReverse http://localhost:9001
SetOutputFilter proxy-html
ProxyHTMLURLMap http://localhost:9001
</Location>
RewriteRule ^/pad$ /pad/ [R]
解決策 3:
次の方法でリバース プロキシを作成できます。
1. mod_proxy_html をインストールします
yum install mod_proxy_html
-
mod_proxy_html モジュールを読み込む
LoadModule proxy_html_module modules/mod_proxy_html.so
-
そして、次の設定を使用します
ProxyRequests off ProxyPass /folder/ http://test.madeupurl.com ProxyHTMLURLMap http://test.madeupurl.com /folder <Location /folder/> ProxyPassReverse / ProxyHTMLEnable On ProxyHTMLURLMap / /folder/ RequestHeader unset Accept-Encoding </Location>
これが役に立てば幸いです。