config Squid per garantire header HTTP corrisponde quella del contenuto memorizzato nella cache
-
29-09-2019 - |
Domanda
Abbiamo un setup nuvola in questo modo:
User Request -> Perlbal (SSL unwrapping) -> Squid (Caching) -> Apache -> HTTP Response
supporta SSL in alcune pagine, e non su altri. Tutto oltre lo strato Perlbal elaborare solo le richieste oltre in chiaro HTTP dal scarta Perlbal l'SSL, ma lo fa aggiungere un'intestazione X-Forwarded-Proto
in modo che l'applicazione sa se è stato utilizzato SSL o meno.
Se una richiesta colpisce l'applicazione (Apache) su HTTP, quando quella determinata pagina richiede SSL che reindirizza a HTTPS.
Quando una richiesta di una risorsa sicura raggiunge la nostra applicazione, e se l'applicazione invia Cache-Control: public
, cache calamari che il contenuto in modo corretto. Il problema è che se l'utente tenta quindi di accedere alla versione HTTP di quella risorsa una volta che è memorizzato nella cache, i processi calamari come HIT cache e restituisce la risorsa memorizzata nella cache su HTTP, quando in realtà abbiamo bisogno di prendere in considerazione una cache di MISS perché X -Forwarded-Proto non corrisponde alla richiesta originale.
Come si fa? La nostra applicazione invia:
Vary: X-Forwarded-Proto,Accept-Encoding
Sto avendo difficoltà a trovare tutti gli articoli / documentazione su questo e questo Vary intestazione sembra essere quello che gli altri suggeriscono, ma non funziona. Squid serve il contenuto memorizzato nella cache indipendentemente dalla X-Forwarded-Proto intestazione che indica SSL o in altro modo.
Soluzione
OMFG.
Abbiamo avuto questo nella nostra .htaccess per ragioni storiche:
BrowserMatch "MSIE" brokenvary=1
BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
BrowserMatch "Opera" !brokenvary
SetEnvIf brokenvary 1 force-no-vary
Tre indovina cosa succede alla cache squid una volta un IE 6 visite degli utenti del nostro sito. Vary intestazione rimosso. Caching strategia di rotto.
Vite IE. La rimozione di questo è stata una buona mossa. Tutto ora di lavoro.