在Nginx中配置负载均衡时,为了防止将请求转发到正在启动或尚未准备好接收请求的Tomcat服务器,可以利用Nginx的健康检查(Health Check)功能。在Nginx Plus中,健康检查是内置功能;而在开源版Nginx中,可以通过第三方模块如ngx_http_upstream_check_module实现。
Nginx Plus健康检查配置:
在Nginx Plus中,配置健康检查的方式如下:
stream {
upstream backend_tomcats {
server backend1.example.com:8080;
server backend2.example.com:8080;
health_check type=http port=8080 path=/health-check-url;
}
server {
listen 80;
proxy_pass backend_tomcats;
}
}
这里,Nginx Plus会定期向Tomcat服务器发送HTTP健康检查请求到指定的路径(如/health-check-url
),只有当Tomcat返回成功的HTTP响应时,Nginx才会将请求转发到该服务器。
开源版Nginx使用ngx_http_upstream_check_module:
对于开源版Nginx,需要先安装ngx_http_upstream_check_module模块,然后配置健康检查:
http {
upstream backend_tomcats {
server backend1.example.com:8080;
server backend2.example.com:8080;
check interval=30000 rise=2 fall=5 timeout=1000;
check_http_send "HEAD /health-check-url HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
location / {
proxy_pass http://backend_tomcats;
}
}
}
这里的配置意味着Nginx每隔30秒(interval=30000
)对每个后端服务器发送一个HEAD请求到/health-check-url
,只有当收到200系列或300系列的HTTP响应时,才认为服务器是健康的。若服务器连续两次健康(rise=2
)则加入可用列表,连续五次不健康(fall=5
)则移出可用列表。
通过以上配置,Nginx在转发请求时只会将请求发送到通过健康检查的Tomcat服务器上,从而避免了将请求转发到正在启动或无法正常处理请求的服务器上。