【问题标题】:Varnish 3 VCL Config to Cache Only Home Page - Not WorkingVarnish 3 VCL 配置仅缓存主页 - 不工作
【发布时间】:2016-01-21 09:35:27
【问题描述】:

我正在尝试使用 Varnish 仅缓存主页(用于测试目的)。 我现在只想为匿名用户缓存主页。为此,如果有一个名为“sessionid”的 cookie,我想忽略缓存。

此外,Django 的后端总是发送 Varying: cookie 标头,我想将其删除,因为 Varnish 将为每种 cookie 组合生成不同的缓存。而且这种组合一直在变化,因为 be 也总是发送 'csrf' cookie,这总是不同的。

总结:

  • 仅缓存主页
  • 仅为匿名用户缓存(当 sessionid cookie 不存在时)
  • 删除可变标题

服务器配置:


DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

VCL:

backend default {
    .host = "127.0.0.1";
    .port = "8000";
}

sub vcl_recv
{
    if (! req.http.Authorization ~ "Basic xxxxxxxxx=")
    {
      error 401 "Restricted";
    }

    # caching only home page
    if (! req.url == "/" || req.http.Cookie ~ "sessionid" || req.request == "POST") {
        return(pass);
    }

    unset req.http.Cookie;
}

sub vcl_fetch
{
    # Remove 'vary' header if home page is called
    if (bereq.url == "/") {
        unset beresp.http.Vary;
        set beresp.ttl = 20m;
    }

}

sub vcl_error
{
    if (obj.status == 401) {
      set obj.http.Content-Type = "text/html; charset=utf-8";
      set obj.http.WWW-Authenticate = "Basic realm=Secured";
      synthetic {" 

     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
     "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">

     <HTML>
     <HEAD>
     <TITLE>Error</TITLE>
     <META HTTP-EQUIV='Content-Type' CONTENT='text/html;'>
     </HEAD>
     <BODY><H1>401 Unauthorized (varnish)</H1></BODY>
     </HTML>
     "};
      return (deliver);
    }    
}

此配置适用于 Varnish 4,但似乎不适用于 Varnish 3(稍作修改)。

要知道它不起作用,查看服务器的响应,我看到“年龄”标头始终为 0。

这是请求/响应的详细信息:

响应头:

Accept-Ranges:bytes
Age:0
Connection:keep-alive
Content-Encoding:gzip
Content-Length:10808
Content-Type:text/html; charset=utf-8
Date:Thu, 22 Oct 2015 08:32:41 GMT
Server:nginx/1.4.6 (Ubuntu)
Set-Cookie:csrftoken=UFON6QI7JHAOVDAOk2fusWtZirOF3dlc; expires=Thu, 20-Oct-2016 08:32:41 GMT; Max-Age=31449600; Path=/
Via:1.1 varnish
X-Varnish:1495644039

请求头:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-CA,en;q=0.8,fr-CA;q=0.6,fr;q=0.4
Authorization:Basic xxxxxx=
Cache-Control:no-cache
Connection:keep-alive
Cookie:csrftoken=iclCbw25qRf25gYscUVyM1P6mHItWXPq
DNT:1
Host:dev.xxxxxx.com
Pragma:no-cache
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36

【问题讨论】:

  • 发布不起作用的 Varnish 3 配置 - 让我们看看“小修改”是什么意思。
  • 这是“不工作”的配置。请注意,我只是修改了它,但它并没有改变任何东西。取消设置 req.http.Cookie;未设置'req.http.cookie;' (在小写字母中)。我也添加了用于身份验证的东西。它仍然没有在主页上缓存任何内容。

标签: varnish varnish-vcl


【解决方案1】:

这是一个有效的配置。老实说,我不知道是什么使它起作用。

backend default {
    .host = "127.0.0.1";
    .port = "8000";
}

sub vcl_recv
{
    set req.backend = default;

    if (! req.http.Authorization ~ "Basic xxxxxxx=")
    {
      error 401 "Restricted";
    }

    # caching only home page
    if (req.url != "/" || req.http.Cookie ~ "sessionid" || req.request == "POST") {
        return(pass);
    }

    unset req.http.cookie;

    return(lookup);
}

sub vcl_fetch
{
    # Remove 'vary' header if home page is called
    if (bereq.url == "/") {
        set beresp.ttl = 20m;
    }

    unset beresp.http.Vary;    
    return(deliver);

}

sub vcl_deliver 
{    
    return(deliver);
}


sub vcl_hit 
{
    return(deliver);
}


sub vcl_error
{
    if (obj.status == 401) {
      set obj.http.Content-Type = "text/html; charset=utf-8";
      set obj.http.WWW-Authenticate = "Basic realm=Secured";
      synthetic {" 

     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
     "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">

     <HTML>
     <HEAD>
     <TITLE>Error</TITLE>
     <META HTTP-EQUIV='Content-Type' CONTENT='text/html;'>
     </HEAD>
     <BODY><H1>401 Unauthorized (varnish)</H1></BODY>
     </HTML>
     "};
      return (deliver);
    }    
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-25
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2015-11-24
    • 2011-04-13
    相关资源
    最近更新 更多