ngx_http_upstream_check_module 是一个 Nginx 模块,用于主动检查后端服务器的健康状态。通过这个模块,可以实现对后端服务器的健康检查,确保只有健康的服务器接收请求,从而提高系统的可靠性和性能。
1. 编译和安装
1. 下载nginx源码
wget http://nginx.org/download/nginx-1.22.1.tar.gz
tar -zxvf nginx-1.22.1.tar.gz
2. 下载 ngx_http_upstream_check_module 模块
git clone https://github.com/yaoweibin/nginx_upstream_check_module.git
3. 打补丁
nginx并不支持直接使用nginx_upstream_check_module模块,因此在使用之前,需要先打补丁。
cd nginx-1.22.1
patch -p1 < /path/to/ngx_http_upstream_check_module/check_1.20.1+.patch
4. 配置nginx
./configure --add-module=/path/to/nginx_upstream_check_module
5. 编译安装
make
make install
2. 配置示例
在 Nginx 配置文件中(通常位于 /usr/local/nginx/conf/nginx.conf),添加健康检查的配置(upstream配置块),如下所示:
http {
upstream backend {
server 192.168.1.1:8080;
server 192.168.1.2:8080;
check interval=2000 rise=2 fall=4 timeout=3000 type=http;
check_http_send "GET /health_check HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
}
配置说明:
check:
- interval: 向后端发送的健康检查包的间隔。
- rise:如果连续成功次数达到rise_count,服务器就被认为是up。
- fall:如果连续失败次数达到fall_count,服务器就被认为是down。
- timeout:后端健康探测请求的超时时间。
- type:健康检查包的类型,现在支持以下多种类型: tcp/ssl_hello/http/fastcgi/mysql/ajp,对于后端ATS探测来说,需要配置为http。
- default_down:设定初始时服务器的状态,如果是true,就说明默认是down的,如果是false,就是up的。默认值是true,也就是一开始服务器认为是不可用,要等健康检查包达到一定成功次数以后才会被认为是健康的。
- 缺省配置:如果没有配置参数,默认值是:`interval=30000 fall=5 rise=2 timeout=1000 default_down=true type=tcp`
check_http_send:http健康检查包发送的请求内容
check_http_expect_alive:该指令指定HTTP回复的成功状态,默认认为2XX和3XX的状态是健康的。
3. 测试健康检查
(1)启动nginx服务:/usr/local/nginx/sbin/nginx
(2)关停/启动后端服务(对应上述配置中的192.168.1.1:8080和192.168.1.2:8080),观察nginx日志,测试健康检查是否正常工作。