(主な質問の下部にある更新、以下は余分な詳細かもしれません)
Apache が期待どおりにリバース プロキシしないという興味深い問題があります。
基本的に、自分のウェブサイトで相対パスに移動するリンクをクリックすると、URLが からのコンテンツであると/app1
予想されます。代わりに、ブラウザは直接.external.company.ca/app1
internal.company.ca/some_app
internal.company.ca/some_app
302などはありません。まっすぐそこにあります。internal.company.ca
これは、リバース プロキシ構成を除いて構成のどこにも言及されていないため、私には奇妙です。そのため、ブラウザがドメインをどのように学習しているかはまったくわかりません。
これは、クライアント (ブラウザー) の観点からの Fiddler のキャプチャで、次のリンクをクリックした直後の動作を示しています(緑の名前がで、黒の名前がで、パスが で/app1
あることを信頼する必要があります)。external.company.ca
internal.company.com
/some_app/blahblah
この時点以降に起こることはすべて、internal.company.com
. もちろん、これは本番環境ではまったく機能しません。
以下は、検討用の Apache 構成ファイルの (省略された) バージョンです。
<VirtualHost *:80>
# rewrite rules to 443
</VirtualHost>
<VirtualHost *:443>
ServerName external.company.ca
ServerAlias external.company.com
# Logging rules.........
SSLEngine on
SSLProxyEngine on
SSLProxyVerify none
# Most of this is off for testing purposes, adding in case it matters
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
# more SSL stuff.... Now on to the interesting part
ProxyPreserveHost On
ProxyPass /app1 https://internal.company.com/some_app
ProxyPassReverse /app1 https://internal.company.com/some_app
</VirtualHost>
ある時点で、Cookie が別のドメイン (前が .ca、後ろが .com) にあるため、Cookie が問題を引き起こしているのではないかと考えましたが、リバース プロキシが正しく機能していれば、ブラウザーはそれほど賢明ではないと思います。 . 上記に何か問題がある人はいますか?
アップデート
私は犯人を見つけました:
<script type="text/javascript">window.location.assign('https://internal.company.com/app1/login?redirectUrl=' + encodeURIComponent(window.location.pathname + window.location.hash));</script>
問題は、Apache を使用してこの絶対 URL をどのように書き換えるかということです。href
mod_proxy_html が要素の属性 (要素など) を変更することは知ってa
いますが、要素自体の任意のデータを書き換えることはできますか?
内部アプリケーションはベンダーから提供されたものであり、変更を加えて上記のようなコードを削除することは可能かもしれませんが、代替手段があるかどうかを確認するために、今のところそのパスから離れることをお勧めします。