的我們有一個雲的設置是這樣的:魷魚配置,以確保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都會緩存內容。