varnish - 如何让 Varnish 满足 Cloudcontrol 上静态文件的请求?

标签 varnish cloudcontrol

我正在从(希望)无cookie的域中提供静态文件(图像,javascript,css文件),该域也映射到了我的cloudcontrol部署。这是请求和响应 header 。我在请求中没有看到cookie头,ETag和日期检查应该可以满足要求,因此我希望cloudcontrol部署之前的 Varnish 代理可以获取请求并为其提供服务,但是每次尝试时,所有静态文件都可以从Apache根据响应 header 进行处理。任何小费表示赞赏。

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

最佳答案

假设Varnish正在通过所有Apache header ,则似乎没有设置任何 header 告诉Varnish进行缓存。

默认情况下,Varnish会默默地缓存2分钟,不包含标题,但是您可能想要的更多。

出于您说的原因,您还应该删除Etag。有关Etags的更多信息是here

如果您拥有指纹 Assets (按部署/更改),则应在Apache中将其设置为1年。

只要您能站着,其他任何人都可以(请记住,这可能会阻止您频繁更新这些 Assets ,因为它们可能会缓存在某处)。

这是您在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>

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

关于varnish - 如何让 Varnish 满足 Cloudcontrol 上静态文件的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16123955/

相关文章:

php - 如何在cloudControl上使用Symfony2和MongoDB?

node.js - 我是否需要在 Node.js 中创建 2 个独立的应用程序,一个用于访问者,一个用于 CRUD 管理员?

nginx - Varnish 缓存-连接被拒绝

部署 Rails 应用程序时 MySQL max_user_connections 错误

caching - 如何从Varnish缓存中删除文件

php - 为什么PaaS提供商建议在部署时安装依赖项? (对于 PHP 或 NodeJS 以及可能其他)

node.js - 构建期间 NODE_ENV 的解决方法

varnish - 以编程方式向 Varnish-cache 4.x 添加/删除后端

apache - 尽管有vcl规则,但Varnish不会忽略子域

amazon-web-services - 有没有办法向AWS ELB中的所有实例发送http请求?