我已将 Varnish 配置为使用文件存储。Varnish 似乎可以正常工作,但缓存似乎只是我指定大小的一小部分,而且我为存储指定的文件似乎尚未创建。
我一直在运行service varnish reload
以在更改配置后重新启动服务。这样就够了吗?
运行varnishstat
显示一个不断增加的MAIN.n_lru_nuked
值,我认为这意味着它认为它已经用完了缓存空间SMA.s0.c_bytes
(我相信这是存储后端的大小?)只有3.46G
。
有什么想法可以调试这个问题吗?我的配置没有被选中吗?
/etc/default/varnish 的配置部分
VARNISH_LISTEN_PORT=80
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-b s3.amazonaws.com:80 \
-u varnish -g varnish \
-S /etc/varnish/secret \
-s disk=file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,30G"
/etc/varnish/默认.vcl
vcl 4.0;
backend default {
.host = "cdn.webampskins.org.s3.amazonaws.com";
.port = "80";
}
sub vcl_recv {
set req.http.Host = "cdn.webampskins.org.s3.amazonaws.com";
}
sub vcl_backend_response {
set beresp.ttl = 3y;
set beresp.storage_hint = "disk";
# I've confirmed that in my response I see this header
set beresp.http.x-storate = "disk";
}
sub vcl_deliver {
# Empty
}
更新:
看来我的文件存储配置没有被选中:
~# varnishadm storage.list
Storage devices:
storage.s0 = malloc
storage.Transient = malloc
不确定为什么或如何调试这个问题。
答案1
如果您的操作系统使用系统化,不要用来/etc/default/varnish
配置运行时参数。
请使用以下命令来编辑这些设置:
sudo systemctl edit varnish
完成编辑后,使用以下命令重新启动 Varnish:
sudo systemctl restart varnish
看https://www.varnish-software.com/developers/quick-start/#through-the-systemctl-edit-command有关通过systemctl
二进制文件管理 Varnish 的更多信息。
警告:我们强烈反对使用 stevedore
file
。虽然它允许您扩展缓存的大小(相对于内存),但它不提供任何持久性。这可能是您可以忍受的。然而,根据我们的经验,
file
装卸工随着时间的推移很容易产生磁盘碎片。消除碎片的唯一方法是定期完全重启该varnishd
过程。sudo systemctl restart varnish