Varnish 将所有请求传递给 Apache

Varnish 将所有请求传递给 Apache

我正在同一个 Xubuntu 服务器上设置 Varnish Cache 3.0.4 和 Apache 2.22,其中 Varnish 在端口 80 上接受连接,Apache 在端口 81 上监听。目的是在 Varnish 中缓存 .html 文件,但目前,所有请求都传递到服务器。

我设置 /usr/local/etc/varnish/default.vcl 如下:

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

sub vcl_recv {
  # Do not cache following pages (edit as needed for your configuration).
  if (!( req.url ~ "wp-(login|admin|comments-post)" )) {
      return (pass);  
  }

  # Drop the cookies for everything else
  unset req.http.cookie;

  # Try a cache-lookup
  return (hash);
}

sub vcl_backend_response {
    # Below will cache the page for one week.(1s = 1 sec, 1d = 1 day)
    set beresp.ttl = 1w;
}

我使用这个脚本来启动 Varnish:

#!/bin/sh
ulimit -n 10240
ulimit -l 16384
/usr/local/sbin/varnishd -f /usr/local/etc/varnish/default.vcl \
-a :80 \
-s malloc,16M -l 8m,1m,+ -u varnishd

我启用了 mod headers 并将此代码添加到 /etc/apache2.conf:

<FilesMatch "\.html$">
    Header set Cache-control "public, max-age=9200"
</FilesMatch>

GET 请求的 HTTP 标头如下:

HTTP/1.1 200 OK
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Thu, 10 Oct 2013 13:50:01 GMT
ETag: "e719-1884-4e8634739cce1"
Accept-Ranges: bytes
Vary: Accept-Encoding
Cache-control: public, max-age=9200
Content-Type: text/html
Date: Fri, 11 Oct 2013 17:54:29 GMT
X-Varnish: 21561442
Age: 0
Via: 1.1 varnish
Connection: close
Accept-Ranges: bytes

我在另一台电脑上使用此命令进行了测试:

seige -d1 -c800 -t1 http://192.168.0.7/specs.html

我查看了 varnishstat 的输出,它似乎显示所有请求都已传递到后端。MAIN.s_req 和 MAIN.s_pass 的值均为 126003。有人能解释一下为什么 Varnish 不缓存任何数据吗?

答案1

请在此处查看 varnish 示例模板:https://www.varnish-cache.org/trac/wiki/VCLExamples您的 VCL 缺少一些关键的 varnish 功能。

相关内容