0

次のようなクラウド設定があります。

User Request -> Perlbal (SSL unwrapping) -> Squid (Caching) -> Apache -> HTTP Response

SSL をサポートするページとサポートしないページがあります。perlbal は SSL をラップ解除するため、perlbal 層を超えるものはすべて、暗号化されていない HTTP 経由のリクエストのみを処理しますX-Forwarded-Protoが、SSL が使用されているかどうかをアプリケーションが認識できるようにヘッダーを追加します。

要求が HTTP 経由でアプリケーション (Apache) にヒットした場合、その特定のページで SSL が必要な場合、HTTPS にリダイレクトされます。

安全なリソースのリクエストがアプリケーションに到達し、アプリケーションが を送信するCache-Control: publicと、squid はそのコンテンツを正しくキャッシュします。問題は、ユーザーがキャッシュされたリソースの HTTP バージョンにアクセスしようとすると、squid はそれをキャッシュ HIT として処理し、HTTP 経由でキャッシュされたリソースを返します。 -Forwarded-Proto が元のリクエストと一致しません。

これはどのように行われますか?私たちのアプリケーションは以下を送信します:

Vary: X-Forwarded-Proto,Accept-Encoding

これに関する記事やドキュメントを見つけるのに苦労しています。この Vary ヘッダーは他の人が提案しているようですが、機能していません。Squid は、X-Forwarded-Proto ヘッダーが SSL を示しているかどうかに関係なく、キャッシュされたコンテンツを提供します。

4

1 に答える 1

0

OMFG。

歴史的な理由から、これを .htaccess に含めました。

BrowserMatch "MSIE" brokenvary=1
BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
BrowserMatch "Opera" !brokenvary
SetEnvIf brokenvary 1 force-no-vary

IE 6 ユーザーがサイトにアクセスすると、squid キャッシュがどうなるかを 3 人が推測します。Vary ヘッダーが削除されました。キャッシング戦略が壊れています。

IEをねじ込みます。これを削除したのは良い動きでした。すべてが機能しています。

于 2010-11-05T04:14:45.727 に答える