varnish 503 no backend connection - varnish健康检查

varnish开启之后过一段时间就出现503错误,直接访问后端OK,前端ping后端OK,原因是varnish判断后端已挂掉,拒绝请求。
在配置backend时,配置了.prob,配置如下:
 
 

.probe= {
     .url = "/";
     .timeout = 1s;
     .interval = 10m;
     .window = 10;
     .threshold = 8;
     .expected_response = 200;
}

后端:nginx,php,yii框架,url重写

请求被转发到后端的 "/"上,经过yii路由,最后的请求地址为/site/index,也就是请求SiteController中的actionIndex,在做项目的时候还没有加入SiteController,所以后端给前端404,与.expected_response = 200不一致,当varnish重试几次以后就会判断后端为挂了。

 

所以建议在后端加一个varnish专用的检测文件,如

.probe= {
     .url = "/varnishTest";
     .timeout = 1s;
     .interval = 10m;
     .window = 10;
     .threshold = 8;
     .expected_response = 200;
}

当varnish检测的时候就会去请求 /varnishTest,经过yii路由,得到请求地址/varnishTest/index,此时会返回200,问题就解决了。

 

为了防止用户直接访问到varnish专用的测试地址,可以在varnish请求中加入set req.http.FromVarnish = "yes";,也就是在header中加入一个变量,在PHP中检测

<?php

if ( isset($_SERVER['FromVarnish']) && $_SERVER['FromVarnish'] === 'yes' ){
     echo 'yes';
}else {
     header("HTTP/1.1 404 Not Found");exit;  

}

转载于:https://www.cnblogs.com/lancelot-null/p/3440403.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值