Varnish 的随机 502 错误

Varnish 的随机 502 错误

我在 Apache Web 服务器前面安装了 varnish 4。一切都很好,除了我遇到了一些随机的 502 错误。

奇怪的是,varnishlog 文件中没有关于此错误的任何内容!(所有其他请求都已记录)

我的参数:VARNISH_MIN_THREADS = 50 VARNISH_MAX_THREADS = 1000 VARNISH_THREAD_TIMEOUT = 120

我该怎么做才能修复此问题?

我的默认.vcl:

vcl 4.0;

backend default {
  .host = "127.0.0.1";
  .port = "8055";
}

backend php53 {
  .host = "127.0.0.1";
  .port = "8053";
}

sub vcl_recv {
  # Compatiblity with Apache log
  if (req.http.X-Forwarded-For) {
    set req.http.X-Forwarded-For = client.ip;
  } else {
    set req.http.X-Forwarded-For = client.ip;
  }

  if (
    req.http.Host ~ "site1" ||
    req.http.Host ~ "site2")
  {
    set req.backend_hint = php53;
  }

  if (req.http.Host ~ "mainsite" ){
    if (req.method == "POST") {
       return (pipe);
    }
    if (req.method == "GET" && (req.url ~ "^/admin")) {
       return (pass);
    }
  }

  if (req.method != "GET" && req.method != "HEAD")
  {
    return (pass);
  }

  if (req.url ~ "(?i)\.(jpeg|jpg|png|gif|ico)$") {
    unset req.http.Cookie;
    return (hash);
  } else {
    return (pass);
  }
}
sub vcl_backend_response {
   if (beresp.http.Content-Length !~ "[0-9]{7,10}") {
     return(deliver);
   }
}

我在“主站点”(prestashop 电子商务,有很多图片)上遇到 502 错误

我目前的状况:

MAIN.uptime 151353 1.00 子进程启动时间 MAIN.sess_conn 59309 0.39 会话接受

MAIN.sess_drop 0 0.00 会话丢失

MAIN.sess_fail 0 0.00 会话接受失败

MAIN.backend_conn 24076 0.16 后端连接成功

MAIN.backend_unhealthy 0 0.00 未尝试后端连接

MAIN.backend_busy 0 0.00 后端连接过多

MAIN.backend_fail 85 0.00 后端连接失败

MAIN.backend_reuse 53606 0.35 后端连接重用

MAIN.backend_toolate 11249 0.07 后端连接已关闭

MAIN.backend_recycle 64856 0.43 后端连接回收

MAIN.backend_retry 0 0.00 后端连接重试

MAIN.threads 100 . 线程总数

MAIN.threads_created 108 0.00 已创建线程

MAIN.threads_destroyed 8 0.00 线程被破坏

MAIN.threads_failed 0 0.00 线程创建失败

MAIN.busy_sleep 3 0.00 繁忙 objhdr 上发送至睡眠状态的请求数

MAIN.busy_wakeup 3 0.00 忙碌 objhdr 睡眠后唤醒的请求数

MAIN.sess_queued 11 0.00 排队等待线程的会话

ps aux | grep -i varnish | grep -v grep:

root     22319  0.0  0.5 121896 84060 ?        SLs  12:21   0:00 /usr/sbin/varnishd -P    /var/run/varnish.pid -a :80 -f /etc/varnish/default.vcl -T 127.0.0.1:6082 -t 120 -p thread_pool_min=50 -p thread_pool_max=1000 -p thread_pool_timeout=120 -u varnish -g varnish -S /etc/varnish/secret -s malloc,1G
varnish  22321  0.4  0.5 321348 92604 ?        Sl   12:21   0:00 /usr/sbin/varnishd -P /var/run/varnish.pid -a :80 -f /etc/varnish/default.vcl -T 127.0.0.1:6082 -t 120 -p thread_pool_min=50 -p thread_pool_max=1000 -p thread_pool_timeout=120 -u varnish -g varnish -S /etc/varnish/secret -s malloc,1G

答案1

您是否查看过“mainsite”的 apache 错误日志?

粘贴输出:

ps aux | grep -i varnish | grep -v grep

看看你的 malloc 大小是否不足以满足大内容大小的要求

尝试:(beresp.http.Content-Length !~ "keep this size small"如果是这种情况)注意:将其更改为正则表达式以满足您的要求,其中说保持这个尺寸较小

并检查是否仍然出现该错误,

相关内容