これは、ここ数時間私を怒らせています。PHP/Apache/Pound/Haproxy (よくわかりません) は、ページを以前と同じスキーム/ドメインにリダイレクトすることを主張しているようです。
背景: 通常、http:\\www.example.com ドメインが https:\\secure.example.com セキュア ドメインに結合されています (異なるサブドメインに注意してください)。すべての開発者/プロジェクト用の SSL 証明書を持っているわけではなく、URL が「secure.」で始まるかどうかを確認するだけでよいため、これにより開発が容易になります。このプロジェクトでは、クライアントは安全なドメインとして https:\\www.example.com を望んでいるので、問題ないと思いました。ロジックを変更して、本番用にそれを検出するだけです。その部分はうまく機能しています。
ただし、場合によっては、ログインしてホームページにリダイレクトされる場合など、ユーザーをセキュアから非セキュアにリダイレクトする必要があります。この単純なテスト ケースに絞り込みました (注: 安全なパブリック ディレクトリと安全でないパブリック ディレクトリは、単に相互のシンボリック リンクです)。
<?php
// this is our server-specific way of detecting secure/non-secure in production
if (isset($_SERVER['HTTP_X_SSL_CIPHER'])) {
header("HTTP/1.1 Moved permanently", true, 301);
header("Location: http://www.example.com/test.php");
}
echo 'bubbles!';
https:\\www.example.com/test.php を呼び出した後、一度リダイレクトし、"bubbles!" をエコーすることを期待するでしょう。しかし、私のブラウザは httpsS:\\www.example.com/test.php にリダイレクトすることを要求するため、無限ループが発生します。
ヘッダー呼び出しを HTTP メタ リフレッシュおよび/または JavaScript リダイレクトに置き換えると、すべて正常に動作しますが、実際にはロケーション ヘッダーで動作させたいと考えています。Apache/PHP/Pound/Haproxy は、私が安全なドメインに固執するべきだと自分たちで判断しているようです。
注意すべきもう 1 つの興味深い点は、逆 (非セキュアからセキュアへのリダイレクト) が正常に機能しているように見えることです。また、https:\\secure.example.com スキームを使用する (同じサーバー上の) 他のサイトでも、おそらくサブドメインが異なるため、すべてが正常に機能しています。
なぜこれが起こっているのか、何が原因なのか、誰にも分かりますか? 私たちのサーバーのセットアップは次のとおりです。ポート 8080 で非表示の Web サーバーに https 要求を分散するために Pound、ポート 80 (および IMAP などの他のもの) で非セキュアに対して同じことを行う haproxy、およびその背後にある単純なバニラ Apache Web サーバー。
私が考えることができる唯一のことは、どういうわけかロードバランサーが物事を台無しにしているということですが、Webサーバーからの応答がクライアントAFAICTに直接送信されるため、それは意味がありません...アイデアはありますか?
NB は、例のスラッシュをバックスラッシュに置き換えました。または、SO は、「リンクが多すぎる」と投稿すると考えました。それらはリンクではなく、サンプル ドメインです。リンクを投稿したい場合は、アンカーを追加します。