网站中应用了varnish,若没出现过503错误,可以说要么是网站流量与压力不大或从一开始就应用了解决503错误的方案
(新浪微博,前不久在迁移时,也出现过^_^)
那么倒底什么是503错误呢
503(服务不可用)服务器目前无法使用(由于超载或停机维护)。通常这是瞬间状态,刷新一下又好了
varnish server 返回异常信息如下
一、什么原因导致503错误
下面列出常见几种类型
1. 服务器上相关应用停止或没有了
2. 请求超时
3. 对请求响应时间超时
4. 服务器本身问题
5. 其他
二、解决方案
针对上面几个原因,提出解决方法
1. 检查应用:
1)到实际Web Server上检查web应用程序是否存在
2)web 应用程序是否运行正常
2. 请求超时,这里指域名解析与路由、网络连接建立时间
设置适当超时时间
关键两个参数 connect_timeout,http_req_hdr_len
如 connect_timeout=20s http_req_hdr_len=8192
3. 响应超时,与包括响应时间,响应内容大小等主要参数有关
可设置两个参数 http_resq_hdr_len=8192, first_byte_timeout=60s
4.服务器本身问题
需检查系统日志,如apache 日志
5.其他情况,如排查所有F5b的负载均衡策略,关闭cookie
三、varnish相关参数的设置
可以在backend 定义中设置,如
backend mydomain{
.host = "127.0.0.4";
.port = "80";
.connect_timeout = 600s;
.first_byte_timeout = 600s;
.between_bytes_timeout = 600s;
}
但从实际结果看,有时在vcl脚本中的设置,可能不生效
所以可考虑在运行参数中增加这些设置
如,varnishd xxxx -p connect_timeout=20s
到这里有人可能会有疑问,为什么要设置这些值,Varnish没有默认值吗
实际是有默认值,但有个别参数值需要考虑实际情况,比如connect_timeout默认值为0.7s
若你的网络环境中,无法保证每次请求connect 时间都在 0.7s以内,那么就需要调整这个参数值