我正在使用 loader.io 进行测试并发现 varnish 前面的 SSL(终止)服务非常糟糕。
我的数字海洋图形似乎显示磁盘 I/O 最大为 1.21MB/s(这不是太低了吗?我的 M4 SSD 运行速度约为 1.500MB/s,这与 1.5 不一样,对吧?)
这loader.io 统计数据每秒 3000 个请求
Cache-Control: max-age=333s
我已将 Hitch 设置为 SSL 终止,如下所示:
sudo nano /etc/hitch/hitch.conf
# ADD:
## Basic hitch config for use with Varnish and Acmetool
# Listening
frontend = "[*]:443"
ciphers = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
# Send traffic to the Varnish backend using the PROXY protocol
backend = "[::1]:6086"
write-proxy-v2 = on
# List of PEM files, each with key, certificates and dhparams
pem-file = "/var/lib/acme/live/website.io/haproxy"
# END ADD
像这样涂上清漆:
sudo nano /etc/varnish/acmetool.vcl
# ADD:
backend acmetool {
.host = "127.0.0.1";
.port = "402";
}
sub vcl_recv {
if (req.url ~ "^/.well-known/acme-challenge/") {
set req.backend_hint = acmetool;
return(pass);
}
}
# END ADD
# include acmetool settings in default.vcl
cp /dev/null /etc/varnish/default.vcl
sudo nano /etc/varnish/default.vcl
# ADD:
vcl 4.0;
import std;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
if (std.port(local.ip) == 80) {
set req.http.x-redir = "https://" + req.http.host + req.url;
return(synth(850, "Moved permanently"));
}
}
sub vcl_synth {
if (resp.status == 850) {
set resp.http.Location = req.http.x-redir;
set resp.status = 301;
return (deliver);
}
}
include "/etc/varnish/acmetool.vcl";
# END ADD
我的设置有什么问题?如何才能提高性能?
答案1
首先,您必须检查 Varnish 是否有效地缓存了输出。使用varnishstat
(count hits vs misses),或者更好的方法是使用varnishhist
。您应该看到 1e-5 和 1e-4 之间的响应(因此在 0.01 毫秒和 0.1 毫秒之间)。请注意,命中用 表示|
,未命中用 表示#
。
另一个可能的问题是 Hitch,因为我今天遇到了这个问题:syslog
被归档为“打开的文件太多”。因此,请查看您的系统日志,看看您是否有同样的问题。要修复它,您需要在文件的部分中systemd
添加。LimitNOFILE
[Service]
hitch.service
答案2
当我们在与 varnish 相同的服务器上运行 SSLTermination 时,我们曾见过此问题。我们最终不得不增加打开的最大文件数的 ulimit,并让 varnish 将缓存项目存储在 RAM 中而不是磁盘上。
当您通过 https 传输大量流量时,Nginx 往往会突破 ulimit。您可能需要对此进行调整,以使其得到适当优化。