[alibaba/tengine]后端服务器(tomcat 7.0)和tengine(2.0.3)部署在同一台机器上时,健康检查一直报错

2025-11-05 10 views
5

为了调试方便,在开发机上同时部署了tengine 2.0.3和tomcat 7. tomcat提供后端服务,健康检查配置如下: server 127.0.0.1:8080;

check_keepalive_requests 1;

check interval=3000 rise=2 fall=5 timeout=1000 type=http; check_http_send "HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n"; check_http_expect_alive http_2xx http_3xx;

运行tengine,日志报: 2014/10/02 19:07:28 [error] 10288#0: check protocol http error with peer: 127.0.0.1:8080

请教两个问题:

只有一台后端服务的情况下,健康检查是否能正常工作? tengine和后端服务在同一个ip不同端口时,健康检查是否能正常工作? 谢谢。

回答

8

可以的,你的后端配置不对,响应状态码不是2xx或者3xx。

9

后端是普通的Tomcat,curl -I http://127.0.0.1:8080/ 返回: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/html;charset=ISO-8859-1 Transfer-Encoding: chunked Date: Thu, 02 Oct 2014 14:32:41 GMT

9

你可以curl一下看啊:curl http://127.0.0.1:8080/ -I

4

呵呵,我刚才开始看错了。正改回复,你也说了同样的事情。 :)

9

找到问题了。将 check_http_send "HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n"; 改为: check_http_send "HEAD / HTTP/1.0\r\nConnection: keep-alive\r\n\r\n"; 就正常了。

但是不理解为什么会这样。Tomcat7显然支持http/1.1,从curl的返回信息也能得知这一点。为什么check_http_send一定要以http/1.0的形式发送?打算明天看一下源码,看看能找到什么线索。