Varnish 3.0 Guru Meditation 最后出现 FetchError TestGunzip 错误

Varnish 3.0 Guru Meditation 最后出现 FetchError TestGunzip 错误

我在 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。看起来就是这样。这是我的修复方法,因为我也遇到过同样的问题。

相关内容