Apache プロキシ構成 (Web アプリケーション リソース URL は切り捨て)

Apache プロキシ構成 (Web アプリケーション リソース URL は切り捨て)

Apache Web サーバーでプロキシを設定しようとしていますが、結果の URL にパスの一部が欠落しているため、URL の構築に問題があります。例:

http://server/webapp/style.css(期待される)

http://server/style.css(実際の結果)

Web 上に公開されているサーバー (フロントエンド サーバーと呼びます) と、外部にプロキシする Web アプリケーションがある内部ネットワーク (Web からはアクセスできません) に別のサーバー (バックエンド サーバー) があります。いくつかの方法を試しましたが、主な問題はプロキシで URL が正しい方法で (再) 書き込まれず、サーバーまたはブラウザーが一部を見逃していることです。

私が試したこと:

ProxyPass /webapp http://backendserver
ProxyPassReverse /webapp http://backendserver

ブラウザ内のアプリのURLは正しいですhttp://frontendserver/webappインデックス.htmlは表示されますが、添付されているリソース (js、ソケット、css など) はすべて、URL が ではhttp://frontendserver/style.cssなく であるため、表示されませんhttp://frontendserver/webapp/style.css


このタイプのプロキシを適切に設定するにはこれが正しい方法でしょうか?

Apache 書き換えモジュールを使用して他の解決策もいくつか試しましたが、良い結果が得られませんでした。おそらく、誰かがこの問題を解決するための良い提案を持っているでしょう。

ありがとう

答え1

ProxyPassURL の応答方法を変更しますが、index.html 内の URL は書き換えられません。この問題を解決するには、次のオプションがあります。

  1. css/style.css絶対リンク ( ) ではなく相対リンク ( )を使用するように index.html を書き直して/css/style.css、異なる URL ベースからでも機能するようにします。

  2. 使用mod_proxy_html送信される HTML、Javascript、CSS コンテンツ内のリンクを書き換えます。次のようになります。

    <Files *.html>
      ProxyHTMLEnable On
      ProxyHTMLLinks  a  href
      ...
      ProxyHTMLURLMap http://frontendserver/ http://frontendserver/webapp/
    </Files>
    

最初の解決策は、簡単に実行できる場合に最適です。コンテンツの移植性が向上し、信頼性も高まります。

コンテンツ内のすべての URL が静的である場合、2 番目の解決策が機能する可能性があります。ただし、mod_proxy_html は、動的に計算された URL (たとえば、JavaScript で URL を計算する場合) については何も認識しません。そのため、その場合は、動的な URL ベースを使用するようにコードも修正しない限り、失敗します。

関連情報