标签:
在VCL中操作请求的header。
当我们想移除发送到web服务器/images目录的所有对象的cookie可以这样:
sub vcl_recv { if (req.url ~ "^/images") { unset req.http.cookie; } }
这样当请求被后端处理时在http的header中将不再有cookie信息。有用的是使用if语句。在匹配的URL中,也支持正则表达式。注意匹配操作。
修改后端响应。
如果匹配到当前规则我们可以重新设置从后端响应的对象的TTL:
sub vcl_backend_response { if (bereq.url ~ "\.(png|gif|jpg)$") { unset beresp.http.set-cookie; set beresp.ttl = 1h; } }
我们也移除http头中的Set-Cookie,是为了避免hit-for-pass对象被创建。查看actions。
你可以使用acl关键字创建一个权限控制列表。你可以让客户端的ip地址匹配到acl列表,使用匹配操作:
# Who is allowed to purge.... acl local { "localhost"; "192.168.1.0"/24; /* and everyone on the local network */ ! "192.168.1.23"; /* except for the dialin router */ } sub vcl_recv { if (req.method == "PURGE") { if (client.ip ~ local) { return(purge); } else { return(synth(403, "Access denied.")); } } }
实现WebSocket的支持
WebSockets是一种用于创建基于HTTP的双向基于流的通道的技术。为了通过Varnish运行WebSockets你需要用管道传递它,并复制Upgrade头。使用下面的VCL来实现:
sub vcl_pipe { if (req.http.upgrade) { set bereq.http.upgrade = req.http.upgrade; } } sub vcl_recv { if (req.http.Upgrade ~ "(?i)websocket") { return (pipe); } }
varnish 4.0 官方文档翻译19-VCL Examples
标签:
原文地址:http://my.oschina.net/monkeyzhu/blog/468946