tengine后端服务器健康检查HEAD请求400错误
tengine后端服务器健康检查HEAD请求400错误
liuleidefeng 发表于1年前
tengine后端服务器健康检查HEAD请求400错误
  • 发表于 1年前
  • 阅读 77
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: tengine后端服务器健康检查模块ngx_http_upstream_check_module,配置时按照tengine官方文档配置check_http_send "HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n" 时,服务器直接被标示为“down”,查看后端日志请求结果为http 400

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

共有 人打赏支持
粉丝 2
博文 3
码字总数 1039
×
liuleidefeng
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: