配置 varnish 和 django (apache/modwsgi)

配置 varnish 和 django (apache/modwsgi)

我正在尝试弄清楚为什么我在 Apache 前面设置了 varnish 后,应用程序仍不断访问数据库。我想我缺少一些重要的配置,欢迎提供任何提示

这是我的卷曲结果:

HTTP/1.1 200 OK
Server: Apache/2.2.16 (Debian)
Content-Language: en-us
Vary: Accept,Accept-Encoding,Accept-Language,Cookie
Cache-Control: s-maxage=60, no-transform, max-age=60
Content-Type: application/json; charset=utf-8
Date: Sat, 15 Sep 2012 08:19:17 GMT
Connection: keep-alive

我的清漆日志:

   13 BackendClose - apache
   13 BackendOpen  b apache 127.0.0.1 47665 127.0.0.1 8000
   13 TxRequest    b GET
   13 TxURL        b /api/v1/events/?format=json
   13 TxProtocol   b HTTP/1.1
   13 TxHeader     b User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3
   13 TxHeader     b Host: foobar.com
   13 TxHeader     b Accept: */*
   13 TxHeader     b X-Forwarded-For: 92.64.200.145
   13 TxHeader     b X-Varnish: 979305817
   13 TxHeader     b Accept-Encoding: gzip
   13 RxProtocol   b HTTP/1.1
   13 RxStatus     b 200
   13 RxResponse   b OK
   13 RxHeader     b Date: Sat, 15 Sep 2012 08:21:28 GMT
   13 RxHeader     b Server: Apache/2.2.16 (Debian)
   13 RxHeader     b Content-Language: en-us
   13 RxHeader     b Content-Encoding: gzip
   13 RxHeader     b Vary: Accept,Accept-Encoding,Accept-Language,Cookie
   13 RxHeader     b Cache-Control: s-maxage=60, no-transform, max-age=60
   13 RxHeader     b Content-Length: 6399
   13 RxHeader     b Content-Type: application/json; charset=utf-8
   13 Fetch_Body   b 4(length) cls 0 mklen 1
   13 Length       b 6399
   13 BackendReuse b apache
   11 SessionOpen  c 92.64.200.145 53236 :80
   11 ReqStart     c 92.64.200.145 53236 979305817
   11 RxRequest    c HEAD
   11 RxURL        c /api/v1/events/?format=json
   11 RxProtocol   c HTTP/1.1
   11 RxHeader     c User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3
   11 RxHeader     c Host: foobar.com
   11 RxHeader     c Accept: */*
   11 VCL_call     c recv lookup
   11 VCL_call     c hash
   11 Hash         c /api/v1/events/?format=json
   11 Hash         c foobar.com
   11 VCL_return   c hash
   11 VCL_call     c miss fetch
   11 Backend      c 13 apache apache
   11 TTL          c 979305817 RFC 60 -1 -1 1347697289 0 1347697288 0 60
   11 VCL_call     c fetch deliver
   11 ObjProtocol  c HTTP/1.1
   11 ObjResponse  c OK
   11 ObjHeader    c Date: Sat, 15 Sep 2012 08:21:28 GMT
   11 ObjHeader    c Server: Apache/2.2.16 (Debian)
   11 ObjHeader    c Content-Language: en-us
   11 ObjHeader    c Content-Encoding: gzip
   11 ObjHeader    c Vary: Accept,Accept-Encoding,Accept-Language,Cookie
   11 ObjHeader    c Cache-Control: s-maxage=60, no-transform, max-age=60
   11 ObjHeader    c Content-Type: application/json; charset=utf-8
   11 Gzip         c u F - 6399 69865 80 80 51128
   11 VCL_call     c deliver deliver
   11 TxProtocol   c HTTP/1.1
   11 TxStatus     c 200
   11 TxResponse   c OK
   11 TxHeader     c Server: Apache/2.2.16 (Debian)
   11 TxHeader     c Content-Language: en-us
   11 TxHeader     c Vary: Accept,Accept-Encoding,Accept-Language,Cookie
   11 TxHeader     c Cache-Control: s-maxage=60, no-transform, max-age=60
   11 TxHeader     c Content-Type: application/json; charset=utf-8
   11 TxHeader     c Date: Sat, 15 Sep 2012 08:21:29 GMT
   11 TxHeader     c Connection: keep-alive
   11 Length       c 0
   11 ReqEnd       c 979305817 1347697288.292612076 1347697289.456128597 0.000086784 1.163468122 0.000048399

Varnish 配置

## Redirect requests to Apache, running on port 8000 on localhost
backend apache {
        .host = "127.0.0.1";
        .port = "8000";
}
## Receive
sub vcl_recv {
        if (req.url ~ "^/api") {
                set req.http.host = "foobar.com";
                set req.backend = apache;
        } else {
                set req.backend = apache;
        }
        remove req.http.Cookie;
        return( lookup );
}

## Fetch
sub vcl_fetch {
        ## Remove the X-Forwarded-For header if it exists.
        remove req.http.X-Forwarded-For;

        ## insert the client IP address as X-Forwarded-For. This is the normal IP address of the user.
        set    req.http.X-Forwarded-For = req.http.rlnclientipaddr;
        ## Added security, the "w00tw00t" attacks are pretty annoying so lets block it before it reaches our webserver
        if (req.url ~ "^/w00tw00t") {
                error 403 "Not permitted";
        }

        if(req.http.host == "foorbar.com") {
                ## force 1 day cache on any requests
                set beresp.ttl = 86400s;
                ## if clients will check for an update every hour, this will just come from varnish
                set beresp.http.Cache-Control = "max-age=3600";
        }

        ## Deliver the content
        return(deliver);
}

## Deliver
sub vcl_deliver {
        ## We'll be hiding some headers added by Varnish. We want to make sure people are not seeing we're using Varnish.
        ## Since we're not caching (yet), why bother telling people we use it?
        remove resp.http.X-Varnish;
        remove resp.http.Via;
        remove resp.http.Age;

        ## We'd like to hide the X-Powered-By headers. Nobody has to know we can run PHP and have version xyz of it.
        remove resp.http.X-Powered-By;
}

答案1

然后将其放入答案中:

您的配置看起来不错,您需要使用 varnishadm 或简单地重新启动 varnish 来加载它。使用 varnishadm 的 vcl.load 和 vcl.use,您可以重新加载它而不会丢失缓存:

$ varnishadm -T localhost:6081

vcl.load update1 /etc/varnish/default.vcl
vcl.use update1

相关内容