OpeenSSOがインストールされているセカンダリプロキシにリクエストを送信するプライマリプロキシがあります。
OpenSSOエージェントは、ユーザーがログインしていないと判断した場合、認証サーバーへの302リダイレクトを発生させ、ユーザーがGETパラメーターとして要求した元の(エンコードされた)URLをリダイレクト場所ヘッダーに提供します。
ただし、GET変数のURLは、元のプロキシサーバーではなく、内部(セカンダリ)プロキシサーバーのURLです。したがって、「Location」応答ヘッダーを編集/書き換えて、正しいURLを指定したいと思います。
例えば。
ヘッダーと書き換えのほとんどすべての組み合わせを運が悪かったので、それは不可能かもしれないと思っています。私が得た最も近いものはこれでしたが、mod_headers編集関数は環境変数を解析しません。
# On the primary proxy.
RewriteEngine On
RewriteRule ^/(.*)$ - [E=orig_request:$1,P]
Header edit Location ^(http://auth\.a\.com/login/\?orig_request=).*$ "$1http%3A%2F%2Fa.com%2F%{orig_request}e"
ProxyPassReverse これを行う必要があります:
このディレクティブにより、ApacheはHTTPリダイレクト応答のLocation、Content-Location、およびURIヘッダーのURLを調整できます。
ProxyPassディレクティブとProxyPassReverseディレクティブのペアを使用して定義していると仮定すると、リバースプロキシがこのように動作していない理由がわかりません。
説明したとおりにLocationヘッダーを編集できるようにする場合は、それを行うことができます Apache 2.4.7以降 :
編集には、正規表現であるvalue引数と、追加の置換文字列の両方があります。バージョン2.4.7以降、置換文字列にはフォーマット指定子も含まれる場合があります。
ドキュメントに記載されている「フォーマット指定子」には、環境変数を使用できることが含まれます。 %{VAR}e
。
また、orig_request URLパラメーターが相対化されるようにアプリケーションを変更することを検討することもできます。これにより、環境変数を使用してヘッダーを編集する必要がなくなる可能性があります。
Locationヘッダーで相対パスを使用することもできます。これにより、一方のドメインをもう一方のドメインに明示的にマッピングする必要がなくなります。これは公式に有効です RFC 7231現在 (2014年6月)、 しかしそれ以前から広くサポートされていました 。 Apache Header edit
ディレクティブを使用してLocationヘッダーを相対化できます(環境変数の置換を必要としないため、バージョン2.4.7より前でも)。これは次のようになります。
Header edit Location "(^http[s]?://)([a-zA-Z0-9\.\-]+)(:\d+)?/" "/"