途中でApache Proxyを使用して302 App Server ReDirect URLを書き換える


8

奇妙な設定があります。次のようになります。

Browser ----------> HTTPs Proxy ------> Apache HTTP -----> Tomcat AJP
           HTTPS                 HTTP                AJP

HTTPSプロキシ(非常にダムなプロキシ)では、URLはhttps://proxy.domain.com/appのようになります。次に、http://apache.domain.com/app(ホストproxy.domain.comを渡す)のように、HTTPを使用してApacheにトンネリングされます。Apacheは、AJPプロトコルを使用してローカルでajp:// localhost:8009 / app /にリクエストをトンネルします。

アプリサーバーがリクエストされたパスをリダイレクトしたい場合があります。たとえば、/ app /を/ app / webappにリダイレクトします。したがって、パスをリダイレクトする302をApacheに送り返します-おそらくajp:// localhost:8009 / app / webappのようなものです。次に、ApacheはリダイレクトURLをhttp://proxy.domain.com/app/webappに書き換えます。HTTPSプロキシはダムなので、リダイレクトを分析してhttpをhttpsに変更しません。

したがって、ユーザーをhttpsに送信するために302リダイレクトURLを書き換えるようにApacheを設定できるかどうかを考えたいと思います。

これが、Apacheのhttps.confでこれまでに使用した設定です。

ProxyPreserveHost       on
RewriteEngine           on
RewriteRule ^/app$ /app/ [PT]
ProxyPass /app ajp://localhost:8009/app

ProxyPassReverseを使用してみましたが、302リダイレクトURLをhttpではなくhttpsで強制的に書き換える方法を理解できませんでした。

何かご意見は?

回答:


9

私はいつも問題をあきらめて質問を投稿する前に何時間も取り組んでいます-投稿してから自分の問題分を解決するためだけに...

興味のある方は、解決策はProxyPassReverseを使用することではなくHeaderディレクティブを使用することです。これにより、送信ヘッダーを混乱させることができます。この場合、Locationレスポンスヘッダーをキャプチャして正規表現を実行し、URLのプロトコルを修正できます。

ProxyPreserveHost       on
RewriteEngine           on
RewriteRule ^/app$ /app/ [PT]
ProxyPass /app ajp://localhost:8009/app
Header edit Location ^http(\:\/\/proxy.*)$ https$1

出来上がり!

Apacheが文句を言うなら、それはmod_headersがまだ有効になっていない可能性があります: a2enmod headers


ヘッダーを編集する必要はありません。@ wondyソリューションを使用して、RempteIpValveを通じてTomcatにLB / RProxyプロトコルを認識させます
Muhammad Hewedy

このソリューションを使用しました。Tomcatに私がやりたいことをさせるよりも、Apacheの設定を行う方がずっと好きです!
froderik

3

別のオプションを見つけました。

基づいて/programming/5741210/handling-x-forwarded-proto-in-java-apache-tomcatおよびhttpsではなくHTTPにはApache ReverseProxyPass redrectsいくつかのサーバーがX-転送されたプロトコルヘッダを認識らしいです。以下を追加することで、Tomcatにそれを認識させることができます。

<Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="x-forwarded-protocol" />

server.xml


1
これが最良のソリューションです。したがって、Tomcatはこのように機能するように設計されています
Muhammad Hewedy

と思いますX-Forwarded-Proto
マイケルハンプトン

私は「プロトコル」を使ったことがあると確信しています。しかし、それは2013年3月でした。両方のバージョンがしばらく使用されていることがわかります。その間に見ることができるように、新しいRFC 7239が書かれました(2014年6月)。おそらく「プロト」バージョンが勝ち、今では標準となっています。
2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.