我在我的 centos 服务器上安装了 varnish,但是性能并没有提高,安装前我的网站加载需要 7 秒,安装后仍然需要 7 秒,
这是什么问题?
sub vcl_recv {
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
if(req.http.cookie ~ "userID" || req.url ~ "^/administrator" || req.url ~ "^/component/banners" || req.request == "POST") {
return (pass);
}
if(req.http.x-logged-in == "False" && req.request != "POST"){
unset req.http.cookie;
}
if (req.http.Accept-Encoding) {
if (req.url ~ "\.(jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$") {
remove req.http.Accept-Encoding;
} elsif (req.http.Accept-Encoding ~ "gzip") {
set req.http.Accept-Encoding = "gzip";
} elsif (req.http.Accept-Encoding ~ "deflate") {
set req.http.Accept-Encoding = "deflate";
} else {
remove req.http.Accept-Encoding;
}
}
if (req.url ~ "\.(js|css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$") {
return (lookup);
}
if (req.backend.healthy) {
set req.grace = 5m;
} else {
set req.grace = 1h;
}
return (lookup);
}
sub vcl_fetch {
if(req.request != "POST" && beresp.http.x-logged-in == "False") {
unset beresp.http.Set-Cookie;
}
set beresp.grace = 1h;
if (beresp.status == 503 || beresp.status == 502 || beresp.status == 501 || beresp.status == 500) {
set beresp.grace = 60s;
return (restart);
}
unset beresp.http.etag;
if(beresp.http.Cache-Control == "no-cache" || beresp.http.Cache-Control == ""){
set beresp.http.Cache-Control = "max-age=300, public, must-revalidate";
}
set beresp.ttl = 5m;
return (deliver);
}
和
NFILES=131072
MEMLOCK=82000
NPROCS="unlimited"
RELOAD_VCL=1
VARNISH_VCL_CONF=/etc/varnish/default.vcl
VARNISH_LISTEN_PORT=80
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
VARNISH_ADMIN_LISTEN_PORT=6082
VARNISH_SECRET_FILE=/etc/varnish/secret
VARNISH_MIN_THREADS=50
VARNISH_MAX_THREADS=1000
VARNISH_THREAD_TIMEOUT=120
VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin
VARNISH_STORAGE_SIZE=1G
VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"
VARNISH_TTL=120
DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
-f ${VARNISH_VCL_CONF} \
-T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
-t ${VARNISH_TTL} \
-w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
-u varnish -g varnish \
-S ${VARNISH_SECRET_FILE} \
-s ${VARNISH_STORAGE}"
答案1
您的网页是否使用了指示可缓存内容的标头?
如果标头中的缓存指令不允许缓存页面,则 vanish 每次都会从您的 Web 服务器获取它们,因此 Web 服务器延迟仍然存在。
有些页面总是需要从缓存中获取。如果这些页面需要 7 秒才能创建,则仍然有问题。
编辑:
我怀疑你的 Web 应用不支持缓存,但你的问题中没有提供相关信息。我甚至不知道你是否已成功通过 varnish 转移请求。
如果没有太多其他流量,那么也许可以使用 tcpdump 捕获一些流量以归档,包括对 varnish 的请求和 varnish 对 Web 服务器的请求以及响应,然后使用类似 wireshark 的工具查看所有请求和响应标头。也许您还可以从 varnish 获取一些日志数据,这些数据可能可以确认哪些是缓存命中,哪些不是。
根据需要阅读有关 http 标头的教程,以了解标头的作用,然后如果仍然不清楚为什么 varnish 没有缓存您认为应该缓存的内容,请提出更具体的问题。