我在 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"
如果是这种情况)注意:将其更改为正则表达式以满足您的要求,其中说保持这个尺寸较小
并检查是否仍然出现该错误,