码迷,mamicode.com
首页 > 其他好文 > 详细

varnish 4.0 官方文档翻译19-VCL Examples

时间:2015-06-19 20:22:54      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

VCL Examples


Manipulating request headers in VCL

在VCL中操作请求的header。

当我们想移除发送到web服务器/images目录的所有对象的cookie可以这样:

sub vcl_recv {
    if (req.url ~ "^/images") {
    unset req.http.cookie;
    }
}

这样当请求被后端处理时在http的header中将不再有cookie信息。有用的是使用if语句。在匹配的URL中,也支持正则表达式。注意匹配操作。


Altering the backend response

修改后端响应。

如果匹配到当前规则我们可以重新设置从后端响应的对象的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


ACLs

你可以使用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."));
        }
    }
}

Implementing websocket support

实现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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!