VCL示例

本节主要是有一些vcl小示例:

在VCL中操作请求头

比方说,我们想将/images目录下面的多有对象的cookie全部删除:

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

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

修改后端响应

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

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."));
    }
  }
}

添加WebSockets支持

WebSockets是一种用于创建基于HTTP的双向基于流的通道的技术。为了通过Varnish运行WebSockets你需要用管道传递它,并复制Upgrade头。使用下面的VCL来实现:

sub vcl_recv {
    if (req.http.upgrade ~ "(?i)websocket") {
        return (pipe);
    }
}

sub vcl_pipe {
    if (req.http.upgrade) {
        set bereq.http.upgrade = req.http.upgrade;
    }
}

results matching ""

    No results matching ""