Squid Konfiguration, um sicherzustellen, HTTP-Header übereinstimmt, der im Cache gespeicherten Inhalte
-
29-09-2019 - |
Frage
Wir haben eine Cloud-Setup wie folgt aus:
User Request -> Perlbal (SSL unwrapping) -> Squid (Caching) -> Apache -> HTTP Response
Wir unterstützen SSL auf einigen Seiten und nicht auf andere. Alles über die Perlbal Schicht nur verarbeitet Anfragen über unverschlüsselte HTTP seit Perlbal auspackt die SSL, aber es funktioniert fügen Sie einen X-Forwarded-Proto
Header, so dass die Anwendung weiß, ob SSL verwendet wurde oder nicht.
Wenn eine Anforderung trifft auf die Anwendung (Apache) über HTTP, wenn diese bestimmte Seite erfordert SSL es zu HTTPS umleitet.
Wenn eine Anforderung für eine sichere Ressource erreicht unsere Anwendung, und wenn die Anwendung sendet Cache-Control: public
, Tintenfisch-Caches, die Inhalt richtig. Das Problem ist, dass, wenn der Benutzer versucht dann, die HTTP-Version dieser Ressource zuzugreifen, sobald es zwischengespeichert, Tintenfisch Prozesse es als Cache-HIT und gibt die zwischengespeicherten Ressource über HTTP, wenn in der Tat wir sie brauchen es eine Cache-Miss, weil X zu prüfen, -Forwarded-Proto nicht die ursprüngliche Anforderung entsprechen.
Wie wird das gemacht? Unsere Anwendung sendet:
Vary: X-Forwarded-Proto,Accept-Encoding
Ich habe eine harte Zeit auf dieser keine Artikel / Dokumentation zu finden und diese Vary Header scheint zu sein, was andere Leute vorschlagen, aber es funktioniert nicht. Squid dient die im Cache gespeicherten Inhalte unabhängig von dem X-Forwarded-Proto-Header angibt, SSL oder nicht.
Lösung
OMFG.
Wir haben dies in unserer .htaccess aus historischen Gründen:
BrowserMatch "MSIE" brokenvary=1
BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
BrowserMatch "Opera" !brokenvary
SetEnvIf brokenvary 1 force-no-vary
Drei Vermutungen, was einmal ein IE 6 Nutzer besucht unsere Website auf den Tintenfisch Cache passiert. Vary Header entfernt. Caching-Strategie gebrochen.
Schraube IE. Entfernen dies war ein guter Schritt. Alles funktioniert jetzt.