varnish 503 no backend connection

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; 
 
}

Varnish 的详细介绍请点这里
Varnish 的下载地址请点这里

相关阅读

Varnish Cache 的架构笔记

CentOS 5.8下Varnish-2.1.5的安装配置

RedHat脚本改用CentOS源更新安装Nginx、PHP 5.3、Varnish

利用Varnish构建Cache服务器笔记

缓存服务Varnish安装配置

Varnish 编译安装所需准备

Linux下Varnish缓存的配置优化

Varnish权威指南(中文) PDF

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/8e4c80134eb9fb87cd20d585b37d862d.html