2010-11-05 77 views
0

的我們有一個雲的設置是這樣的:魷魚配置,以確保HTTP頭匹配的緩存內容

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

我們支持在一些網頁上的SSL,而不是別人。 perlbal層以外的所有內容僅處理未加密HTTP上的請求,因爲perlbal解開了SSL,但它確實會添加一個X-Forwarded-Proto標頭,以便應用程序知道是否使用了SSL。

如果請求點擊量超過HTTP應用程序(阿帕奇),當該特定頁面要求SSL重定向到HTTPS。

當安全資源的請求到達我們的應用程序,如果應用程序發送Cache-Control: public,魷魚緩存的內容正確。問題是,如果用戶在緩存後嘗試訪問該資源的HTTP版本,則squid將其作爲緩存HIT處理,並通過HTTP返回緩存的資源,實際上,我們需要將其視爲緩存MISS,因爲X -Forwarded-Proto與原始請求不匹配。

這是如何完成的?我們的應用程序發送:

Vary: X-Forwarded-Proto,Accept-Encoding 

我在發現有這方面的文章/文檔很難和這Vary頭部似乎是別人建議,但它不工作。無論指定SSL的X​​-Forwarded-Proto頭還是其他,Xquid都會緩存內容。

回答

0

OMFG。

我們在對歷史原因的.htaccess過這樣的:

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

三種猜測會發生什麼情況squid緩存一旦IE 6用戶訪問我們的網站。更改了標題。緩存策略被破壞。

Screw IE。取消這是一個很好的舉措。現在一切正常。