nginx增加健康检查接口的实现示例
作者:Dxy1239310216
在docker中部署的nginx或者在nginx部署的nginx一般是需要一个健康检查接口的
这样的话,就可以确定容器当前的状态是否是健康的
那么,如何给nginx增加一个健康检查的接口呢?
接下来呢,我们就演示一个在nginx中如何增加健康检查的接口
1、打开nginx的配置文件(nginx.conf)
2、增加如下的location
location /healthcheck { default_type text/plain; return 200 "ok"; }
参数说明:
200是请求这个url返回的状态码 OK是返回的数据
default_type text/plain;表示是纯文本显示,浏览器访问不会进行下载!
3、检查配置文件、重启nginx服务
nginx -t && nginx -s reload
4、浏览器访问
OK,这样就完成了,对一个nginx服务,增加健康检查接口的能力。
Nginx健康检查分为被动探测与主动探测两种,
Nginx被动健康检查:
- 通过自带健康检查模块ngx_http_upstream_module实现
- 当收到访问时才对后端发起探测
- 请求根据转发规则首次可能落到不可用节点,如多个节点故障则可能出现转发多台后才将请求转到正常的服务,在高并发的时候影响转发效率
max_fails:在配置的fail_timeout期间,最大的连接错误数,默认配置为1,如配置为0则表示不启用探测,不管后端服务是否异常仍然会转发,单位次数
fail_timeout:服务被认为不可用的的时间,单位为s
如下配置:在3s内中如果有1次连接失败,则表示该节点不可用,将该节点下线3s后才会再次探测
upstream personal_1 { server ip:port max_fails=1 fail_timeout=3; server ip:port max_fails=1 fail_timeout=3; } server { listen 80 ; server_name _; location ~ / { proxy_pass http:// personal_1; } }
模拟每秒1次请求,可以发现192.168.125.133服务在17:42探测异常,此时同步转发至IP1服务,同时17:43-17:46将IP2剔除下线,17:47开始重新探测。
Nginx主动健康检查:
- 通过nginx_upstream_check_module模块实现,官方nginx暂未加载该模块,需要自行编译
- 主动对后端服务发起探测,如后端服务不可用,则不转发
- 后端服务恢复后,则主动添加进负载
主动探测关键参数interval、rise、fall、timeout、type、check_http_send、check_http_expect_alive:
interval:健康检查时间,单位ms
rise:检查成功次数,达到该值则认为服务正常,加入负载
fall:检查失败次数,达到该值则认为服务异常,剔除下线
timeout:检查超时时间,单位ms
type:检查类型,支持tcp/http等多种协议类型
check_http_send:http探测发送的请求,支持自定义接口,默认:"GET / HTTP/1.0\r\n\r\n"
check_http_expect_alive:http探测状态码,除了该配置上的其他状态码均认为服务不可用
如下配置:每1s发起主动探测,如出现1次失败,则认为该节点不可用,剔除下线,检验返回码2xx/3xx则认为服务可用。
upstream personal { server IP1; server IP2; check interval=1000 rise=1 fall=1 timeout=1000 type=http default_down=false; check_http_send "GET / HTTP/1.0\r\n\r\n"; check_http_expect_alive http_2xx http_3xx; } server { listen 80 ; server_name _; location ~ / { proxy_pass http:// personal; } }
如下每秒探测1次,返回非2xx或3xx,服务异常,剔除下线,多次均未向该服务转发。
到此这篇关于nginx增加健康检查接口的实现示例的文章就介绍到这了,更多相关nginx增加健康检查接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!