2013-04-20 33 views
1

我正在爲映射到我的雲控件部署的(無希望)無Cookie域提供靜態文件(圖像,JavaScript,css文件)。這裏是請求和響應頭文件。我發現請求中沒有cookie頭,ETag和日期檢查應該滿足,所以我期望在雲控制部署前的varnish代理將獲取請求並提供它,但是每次我嘗試它時都會提供所有靜態文件Apache根據響應頭進行處理。任何tipps讚賞。如何獲得Varnish在Cloudcontrol上的靜態文件請求?

Request URL:http://static.hotelpress.mobi/bundles/viermediamagazine/icons/social/Facebook_64.png 
Request Method:GET 
Status Code:304 Not Modified 

請求頭

Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4 
Cache-Control:max-age=0 
Connection:keep-alive 
Host:static.hotelpress.mobi 
If-Modified-Since:Sat, 20 Apr 2013 18:23:31 GMT 
If-None-Match:"6008d436-1108-4daceeec74ec0" 
Referer:---stripped out or my boss kills me--- 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31 

響應頭

Accept-Ranges:bytes 
Age:0 
Connection:keep-alive 
Date:Sat, 20 Apr 2013 18:31:33 GMT 
ETag:"6008d436-1108-4daceeec74ec0" 
Last-Modified:Sat, 20 Apr 2013 18:23:31 GMT 
Server:Apache 
Via:1.1 varnish 
X-Varnish:995972028 
X-varnish-cache:MISS 

回答

2

假設Varnish正在通過所有的Apache頭文件,看起來您沒有設置任何頭文件來告訴Varnish進行緩存。

Varnish在默認情況下默認默認緩存2分鐘,沒有標題,但您可能需要更多。

您應該刪除Etag,出於您說的原因。有關Etags的更多信息是here

如果您有指紋資產(每個部署/更改),您應該在Apache中將其設置爲1年。

任何其他人可以,只要你能忍受(記住,這可能會阻止您經常更新這些資產,因爲它們可能被緩存的地方)。

這裏有你需要的Apache行:

<LocationMatch "^/path/to/fingerprinted/assets/.*$"> 
    Header unset ETag 
    FileETag None 
    # RFC says only cache for 1 year 
    ExpiresActive On 
    ExpiresDefault "access plus 1 year" 
    Header append Cache-Control "public" 
</LocationMatch> 

和他人:

<LocationMatch "^/bundles/viermediamagazine/icons/.*$"> 
    Header unset ETag 
    FileETag None 
    ExpiresActive On 
    ExpiresDefault "access plus 1 week" 
    Header append Cache-Control "public" 
</LocationMatch> 

,只要你想你可以使用盡可能多的地方 - 只是確保它們不重疊!

+0

有一點要補充的是,cloudControl(目前)有(按照DNS)連續3個負載均衡器,所以有三個獨立的油漆配有獨立的緩存。 – 2013-04-22 07:09:02

+0

感謝您的詳細解釋,請試用。 – Shannera 2013-04-22 12:29:10

+0

嘗試所有的東西后,只需一個簡短的跟進:如果你添加一個文件夾結構.buildpack/apache/conf(要包括的文件必須用conf後綴命名)和.buildpack/php/conf(要包含的文件必須用ini後綴命名),您可以添加這些指令和特殊設置,並且它們將被授予 - 這意味着Richards解決方案對我來說工作正常。 – Shannera 2013-05-13 20:29:50

1

的例子請您發佈包含

Cache-Control:max-age=0 

這IIRC防止緩存的答案。如果在響應中設置Cache-Control: max-age=<x>標題有幫助,您也可以嘗試。

+0

這可能是一個原因,至少它應該強制高速緩存重新驗證。另一方面,請求頭部來自瀏覽器,我不能真正改變這一點。 另外一個問題,在網絡上的類似問題搜索時,我才知道:ETag是最有可能與服務器的一些獨特的組件生成,所以在許多Apache進程集羣環境中它是最有可能你的要求得到不同的ETag請求...... – Shannera 2013-04-20 22:55:14

0

擴展其他答案:以下是對cloudControl上的應用的示例請求,該請求用於緩存(當?c = 1時)。在任何情況下多次發送請求,直到您持續點擊以確保所有Varnish實例已緩存響應。

$ curl -v http://impresstw.cloudcontrolled.com/?c=1 
* About to connect() to impresstw.cloudcontrolled.com port 80 (#0) 
* Trying 46.137.184.215... 
* connected 
* Connected to impresstw.cloudcontrolled.com (46.137.184.215) port 80 (#0) 
> GET /?c=1 HTTP/1.1 
> User-Agent: curl/7.27.0 
> Host: impresstw.cloudcontrolled.com 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Content-Type: text/html; charset=UTF-8 
< Server: TornadoServer/2.4.1 
< Cache-Control: max-age=36000, must-revalidate 
< Expires: Tue, 23 Apr 2013 20:18:12 GMT 
< Content-Length: 13 
< Accept-Ranges: bytes 
< Date: Tue, 23 Apr 2013 10:18:28 GMT 
< X-Varnish: 1434600184 1434599691 
< Age: 16 
< Via: 1.1 varnish 
< Connection: keep-alive 
< X-varnish-cache: HIT 
< 
+0

有沒有一種方法在CloudControl中定義像Richard Hulse提出的設置來設置靜態文件的設置(最好不要在每次向Apache請求時解析htaccess文件)?對於PHP請求,我可以根據需要調整標題,但不能用於靜態文件... – Shannera 2013-04-23 23:50:09

+0

Cloudcontrol在他們的文檔中說道:「要將您的請求直接緩存在Varnish中,並通過此操作加快響應時間,請確保您擁有爲請求設置正確的緩存控制標頭「。所以你幾乎不得不在你的Apache配置中這樣做。 https://www.cloudcontrol.com/dev-center/Platform%20Documentation#performance--緩存 – 2013-04-24 06:02:41

+0

您可以通過.htaccess文件設置這些指令,也可以在Pinky堆棧中使用PHP buildpacks自定義Apache配置選項。有關詳細信息,請參閱https://github.com/cloudControl/buildpack-php,並記住使用--stack pinky進行部署。 – pst 2013-04-30 08:41:45

相關問題