我正在同一个 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 功能。