我在 varnish 中间歇性地进行大师冥想(因为我发出了 50 个请求,其中 3 个返回错误)。varnishlog 中显示
15 VCL_return c hash
15 HitPass c 1394372109
15 VCL_call c pass pass
15 Backend c 17 default default
15 TTL c 1394372164 RFC 0 -1 -1 1384590297 0 1384590291 0 0
15 VCL_call c fetch
15 TTL c 1394372164 VCL 120 -1 -1 1384590297 -0
15 VCL_return c hit_for_pass
15 ObjProtocol c HTTP/1.1
15 ObjResponse c OK
15 ObjHeader c Date: Sat, 16 Nov 2013 08:24:51 GMT
15 ObjHeader c Server: Apache
15 ObjHeader c Accept-Ranges: bytes
15 ObjHeader c Cache-Control: max-age=0, no-cache
15 ObjHeader c Vary: Accept-Encoding
15 ObjHeader c X-Mod-Pagespeed: 1.5.27.2-2912
15 ObjHeader c Content-Encoding: gzip
15 ObjHeader c Content-Type: text/html; charset=utf-8
15 Gzip c u F - 3755 13624 80 0 0
15 FetchError c TestGunzip error at the very end
15 VCL_call c error deliver
15 VCL_call c deliver deliver
15 TxProtocol c HTTP/1.1
15 TxStatus c 503
15 TxResponse c Service Unavailable
您可以看到15 FetchError c TestGunzip error at the very end
问题所在。我不确定如何解释上面的行Gzip c u F - 3755 13624 80 0 0
,也看不出这为什么是个问题。在我们把 varnish 放在前面之前,该网站没有报告任何加载页面的问题。
假设 Varnish 对于 gzip 的要求比浏览器更严格,我尝试关闭 gzip 处理,因此我http_gzip_support
在 中将其设置为 off /etc/defaults/varnish
:
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m \
-p http_gzip_support=off"
这没有任何作用。我现在已经没有主意了,任何帮助都将不胜感激。
答案1
这是修复
if (beresp.status == 301 || beresp.status == 302) {
if (beresp.http.Content-Encoding ~ "gzip") {
if (beresp.http.Content-Length == "0") {
unset beresp.http.Content-Encoding;
}
}
}
答案2
if (req.http.Accept-Encoding) {
if (req.http.Accept-Encoding ~ "gzip") {
# If the browser supports it, we'll use gzip.
#set req.http.Accept-Encoding = "gzip";
unset req.http.Accept-Encoding;
}
else if (req.http.Accept-Encoding ~ "deflate") {
# Next, try deflate if it is supported.
set req.http.Accept-Encoding = "deflate";
}
else {
# Unknown algorithm. Remove it and send unencoded.
unset req.http.Accept-Encoding;
}
}
我取消设置了 Accept-Encoding,当响应从后端返回时,它不会尝试对其进行 TestGunZip。看起来就是这样。这是我的修复方法,因为我也遇到过同样的问题。