Nginx官方提供的模块中,默认没有对负载均衡后端节点健康检查模块,必须使用第三方模块以打补丁形式安装使用,所以推荐使用Tengine
ngx_http_upstream_check_module
该模块可以为Tengine提供主动式后端服务器健康检查的功能,1.40+以上默认开启
upstream report {
server 10.96.6.65:8080 weight=1 ;
server 10.96.6.66:8080 weight=1 ;
check interval=15000 rise=2 fall=3 timeout=5000 type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
server_name localhost;
location / {
root html;
proxy_pass http://report;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
index index.jsp index.html index.htm;
}
以上配置将针对后端 http://IP:8080/做健康检测,但有问题的是,我们的服务不一定都是/结尾,有时需要加后缀才能访问到资源。比如,如果不在后端tomcat配置上下文路径那么(test.war)正常访问路径就是http://IP:8080/test,对于非根访问上述配置健康检查就一定都是error状态。
check_http_send字段 HEAD后面的 / 就是路径的配置,与其对应的正确能被识别到的地址为"HEAD /test/raqsoft/center/centerIndex.jsp HTTP/1.0\r\n\r\n",/后面可以为项目中的某个url只要能请求到就可以
upstream report {
server 10.96.6.65:8080 weight=1 ;
server 10.96.6.66:8080 weight=1 ;
check interval=15000 rise=2 fall=3 timeout=5000 type=http;
check_http_send "HEAD /test/raqsoft/center/centerIndex.jsp HTTP/1.0\r\n\r\n";#增加绝对路径
check_http_expect_alive http_2xx http_3xx;
}
指令 | 说明 |
---|---|
interval | 向后端发送的健康检查包的间隔 |
rise | 如果连续成功次数达到rise_count,服务器就被认为是up |
fall | 如果连续失败次数达到fall_count,服务器就被认为是down |
timeout | 后端健康请求的超时时间 |
type | tcp/http/mysql |
check_http_send | 可以配置http健康检查包发送的请求内容,推荐采用"HEAD" |
check_http_expect_alive | HTTP回复的成功状态,默认认为2XX和3XX的状态是健康的 |
weight | 权重值越高,被请求频率越高 |