**この回答の下部にある回避策で更新されました**
私のWebアプリケーションは2つの外部レポートサーバーにプロキシする必要があります。したがって、外部レポートサーバーごとにメニュー項目を用意します。
しかし、ブラウザーのURLはサーバーのように見えるため、リダイレクトすることはできません。これらのサーバーは両方とも同じcontext-root/ibmを持っています
どちらのサーバーでも、ブラウザのURLは http://example.com/ibm ..のようになりますが、Apacheは正しいサーバーにプロキシします。
このような設定はどのように行う必要がありますか? Apacheはどのようにプロキシする必要があるかをどのようにして知ることができますか?
URLが次のようになるように変更を加える必要がある場合、私は採掘しません。
http://example.com/rep1/ibm and http://example.com/rep2/ibm
私はなんとかweblogic-proxyサーブレットを使用してURLなどを操作することで目的の効果を得ることができましたが、これが何らかの方法で可能であれば、Apacheがより効率的なソリューションになります。
私はどんな入力にも感謝します。
また、外部レポートサーバーへの最初のリクエストは、ブラウザーからではなく、私のWebアプリから起動されます。
**更新**
現在、この問題が発生した他の約10のWebサーバーにプロキシする必要があります。しかし、ターゲットのWebサーバーがルートにデプロイされたときはいつでも、本体などを書き換える必要がありました。これらのプロキシ統合の一部では、これは多くの試行錯誤でした。
回避策:これらのプロキシされたウェブサーバーのサブドメインに切り替えましたが、実際にはサブドメインのURLは引き続き独自のApacheを指していますが、これらのサブドメイン名を使用すると、Apache構成で仮想ホストとプロキシをより簡単に設定できます。レスポンスボディなどを書き換える必要はありません。
これはmod_proxy
で簡単に行えます:
ProxyPass /rep1/ibm http://reportingserver1.example.com/ibm
ProxyPassReverse /rep1/ibm http://reportingserver1.example.com/ibm
ProxyPass /rep2/ibm http://reportingserver2.example.com/ibm
ProxyPassReverse /rep2/ibm http://reportingserver2.example.com/ibm
詳細は mod_proxyのApacheドキュメントサイト にあります。
外部サイトから返されたコンテンツのリンクを変更する必要がある場合は、 mod_ext_filter を使用して変更できます。リンクを書き換えるための設定例は次のとおりです。
# mod_ext_filter directive to define a filter which
# replaces text in the response
#
# Note: I'm Using a '#' instead of an '/' in the sed command since I want to
# include '/' in the string
#
ExtFilterDefine rep1 mode=output intype=text/html \
cmd="/bin/sed s#reportingserver1.example.com/ibm#example.com/rep1/ibm#g"
<Location /rep1>
# core directive to cause the fixtext filter to
# be run on output
SetOutputFilter rep1
ProxyPass /rep1/ibm http://reportingserver1.example.com/ibm
ProxyPassReverse /rep1/ibm http://reportingserver1.example.com/ibm
</Location>
リバースプロキシのmod_proxyと、返されたコンテンツを書き換えるためのProxyHTMLURLMapとのmod_proxy_htmlの組み合わせを使用して、これを実行できます。最初のページは正常に読み込まれ、すべてのURLなどが書き換えられます。それらにカーソルを合わせると、rep1プレフィックスが表示されます。
しかし、プロキシされたアプリケーションのメニューの1つをクリックすると、Ajaxリクエストが実行され、返されたページが挿入されると思います。しかし、返されたコンテンツが"<html><body>"
タグで囲まれているという問題に直面しています。このため、ページが更新されていないと思います。
私はproxy_htmlがこれを行うのをどのように止めることができるかを理解しようとしています。
私の現在の構成:
ProxyPass /MD/ http://xx.xxx.xxx.xx:8080/
<Location /MD/>
ProxyHTMLURLMap /ibm/ /MD/ibm/
ProxyHTMLURLMap /mum/ /MD/mum/
ProxyPassReverse /
RequestHeader unset Accept-Encoding
ProxyHTMLEnable On
#ProxyHTMLInterp On
ProxyHTMLEvents On
ProxyHTMLExtended On
#SetOutputFilter DEFLATE
#SetOutputFilter INFLATE;proxy-html;DEFLATE
#SetOutputFilter INFLATE;proxy-html;SUBSTITUTE;DEFLATE
#SetOutputFilter proxy-html
#ProxyHTMLBufSize 6000000
#ProxyHTMLMeta On
ProxyHTMLLinks a href
ProxyHTMLLinks area href
ProxyHTMLLinks link href
ProxyHTMLLinks img src longdesc usemap
ProxyHTMLLinks object classid codebase data usemap
ProxyHTMLLinks q cite
ProxyHTMLLinks blockquote cite
ProxyHTMLLinks ins cite
ProxyHTMLLinks del cite
ProxyHTMLLinks form action
ProxyHTMLLinks input src usemap
ProxyHTMLLinks head profile
ProxyHTMLLinks base href
ProxyHTMLLinks script src for
ProxyHTMLLinks frame src longdesc
ProxyHTMLLinks iframe src longdesc
ProxyHTMLLinks body background
ProxyHTMLLinks applet codebase
ProxyHTMLCharsetOut *
ProxyHTMLEvents onclick ondblclick onmousedown onmouseup onmouseover onmousemove onmouseout onkeypress onkeydown onkeyup onfocus onblur onload onunload onsubmit onreset onselect onchange
</Location>