varnish 是一種反向代理伺服器軟體,以記憶體方式存取 cache。透過 VCL (Varnish Configuration Language) 讓使用者設定 varnish。
安裝
在 Rocky Linux 8 安裝
dnf -y install varnish
設定
修改原本的設定檔
mv /etc/varnish/default.vcl /etc/varnish/default.vcl.bak
vi /etc/varnish/default.vcl
此設定檔只會 cache png 圖片檔案 7 天
backend default {
.host = "127.0.0.1"; # Your app server
.port = "8081"; # Your app server port
}
sub vcl_recv {
# 僅對 GET 和 HEAD 快取
if (req.method != "GET" && req.method != "HEAD") {
return (pass);
}
# 僅快取 .png 圖檔,其餘請求不快取
# 比對 URL 結尾為 .png
if (req.url ~ "\.png$") {
# cache
return (hash);
} else {
# pass
return (pass);
}
}
sub vcl_backend_response {
if (beresp.status == 200) {
# Cache for 7 day
set beresp.ttl = 7d;
} else {
set beresp.ttl = 0s;
}
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
啟動
systemctl start varnish
systemctl enable varnish
修改 disk cache
Varnish 無法永久將 cache 儲存到 disk (decprecated),但可透過 memory mapping,將記憶體的資料存放到 file
sudo systemctl edit varnish
修改 service
[Service]
ExecStart=
ExecStart=/usr/sbin/varnishd \
-a :6081 \
-f /etc/varnish/default.vcl \
-s file,/var/lib/varnish/varnish_storage.bin,2G
確認 file folder 存在
sudo mkdir -p /var/lib/varnish
sudo chown varnish: /var/lib/varnish
restart Varnish
# restart varnish
sudo systemctl daemon-reexec
sudo systemctl restart varnish
沒有留言:
張貼留言