文档章节

tengine后端服务器健康检查HEAD请求400错误

liuleidefeng
 liuleidefeng
发布于 2016/11/12 15:00
字数 621
阅读 130
收藏 0

tengine中后端服务器健康检查模块ngx_http_upstream_check_module可以主动向后端服务器定时发送请求以检测后端服务器的存活状态,这个功能很实用。原来一直按照官方文档配置的:

#注意,后端服务器长连接超时时间要大于interval,要不然没啥意义
check interval=10000 rise=2 fall=5 timeout=2000 default_down=false type=http;
check_http_send "GET / HTTP/1.0\r\n\r\n"
check_http_expect_alive http_2xx http_3xx;

一切正常,但是发现会积累多个处于TIME_WAIT的连接,如此一来,感觉甚是不爽。心想,如果可以使用HTTP1.1 长连接就好了(后端服务器支持长连接,并且超时时间大于interval的设置),查看官方文档说可以启用长连接,原文是这样说的:

当采用长连接进行健康检查时,需在该指令中添加keep-alive请求头,
如:"HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n"。

于是直接复制了上去,然后重新加载配置文件,以为万事大吉。结果不一会,网站无法访问了,赶紧查看upstream check status,发现配置的upstream都被标示为down的状态。赶紧去看了一下后端服务的日志,看到一堆Http 400 的日志。心中很是疑惑,官方的配置也是这样,没啥错啊,怎么就不能用了呢。再三检查自己没有写错东西后,去google搜索了一番,终于找到了一个类似的问题。文章的大概意思是,如果后端服务器对于Http1.1的协议检测比较严格,则HEAD请求时必须加上Host字段。

接着,按照文章的意思,尝试性的把相关配置更改如下:

check interval=10000 rise=2 fall=5 timeout=2000 default_down=false type=http;
check_keepalive_requests 100;
check_http_send "HEAD /css/main.css HTTP/1.1\r\nConnection: keep-alive\r\nHost: check.com\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;

然后,重启nginx服务。查看后端日志,已经正常,并且这些请求长连接已经启用,网站也可以正常访问。

问题到此解决。ps:Host字段的值可以根据自己的需求写,这里我随便写了个 check.com

© 著作权归作者所有

共有 人打赏支持
liuleidefeng
粉丝 1
博文 3
码字总数 1039
作品 0
郑州
程序员
Nginx实战系列之功能篇----后端节点健康检查

公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查。目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1、ngxhttpproxymodule 模块和ngxht...

aaao
2014/12/23
0
0
Nginx 负载均衡 后端 监控检测 nginx_upstream_check_module 模块的使用

在使用nginx 的负载均衡 中,我们通常会使用到 Nginx 自带的 ngxhttpproxy_module 健康检测模块。 ngxhttpproxy_module 自带的 健康检测模块参数如下: weight : 轮询权值也是可以用在ip_ha...

jicki
2016/02/15
0
0
为什么7层负载均衡压测性能低

为什么7层负载均衡压测性能低 7层性能会比4层性能低 负载均衡集群采用LVS和Tengine实现,其中4层监听经过LVS后直接到达后端服务器,而7层监听经过LVS后,还需要再经过Tengine,最后达到后端服...

cmlq
2016/02/16
214
0
Nginx负载均衡中后端节点服务器健康检查的操作梳理

正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样势必造成网站访问...

吞吞吐吐的
2017/09/08
0
0
Tengine-1.2.5 版本发布

我们很高兴的告诉大家,Tengine-1.2.5 版本正式发布了。您可以在这里下载:http://tengine.taobao.org/download/tengine-1.2.4.tar.gz 或者可以在github上检出代码: https://github.com/tao...

shudu
2012/05/10
773
5

没有更多内容

加载失败,请刷新页面

加载更多

Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
今天
1
0
linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
15
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部