如何让Varnish在Cloudcontrol上查看静态文件的请求?

时间:2013-04-20 18:51:52

标签: varnish cloudcontrol

我正在从一个(希望)无cookie的域中提供静态文件(图像,javascript,css文件),这些域也映射到我的cloudcontrol部署。以下是请求和响应标头。我在请求中看不到cookie头,ETag和日期检查应该满足,所以我希望cloudcontrol部署前面的varnish代理会获取请求并提供服务,但每次我尝试时都会提供所有静态文件Apache根据响应头进行处理。任何tipps赞赏。

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

3 个答案:

答案 0 :(得分: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>

您可以根据需要使用多个位置 - 只需确保它们不重叠!

答案 1 :(得分:1)

您发布的示例请求包含

Cache-Control:max-age=0

阻止缓存的答案iirc。您也可以尝试在响应中设置Cache-Control: max-age=<x>标题。

答案 2 :(得分: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
<