首页 > 系统相关 >Nginx健康检查【转】

Nginx健康检查【转】

时间:2023-12-15 11:36:43浏览次数:29  
标签:http 探测 Nginx timeout 健康检查 server check

Nginx作为一款强大的反向代理服务和负载均衡服务,具有高并发、低消耗、配置简单等特点,而健康检查,则是为了保障nginx能够准确的转发到后端的可用服务。

Nginx健康检查分为被动探测与主动探测两种,顾名思义,被动探测指nginx被动的发起探测;而主动探测则是在固定时间(可配置)主动发起探测,更具灵活性。

一、Nginx被动健康检查

  • 通过自带健康检查模块ngx_http_upstream_module实现;
  • 当收到访问时才对后端发起探测;
  • 请求根据转发规则首次可能落到不可用节点,如多个节点故障则可能出现转发多台后才将请求转到正常的服务,在高并发的时候影响转发效率。

被动健康检查关键参数max_fails与fail_timeout,官方描述如下:

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健康检查 - 知乎
https://zhuanlan.zhihu.com/p/652813977

标签:http,探测,Nginx,timeout,健康检查,server,check
From: https://www.cnblogs.com/paul8339/p/17903014.html

相关文章

  • docker-挂载数据卷实现不重启Nginx容器展示不同的网页内容
    dockerpullnignxdockervolumecreatetest_volumesdockerrun-d-p80:80-hnginx--namenginx--mounttype=bind,source=/var/lib/docker/volumes/test_volumes,destination=/var/nginx/htmlnginx#-hnginx是必须的,不然就要去更改容器里面的Nginx.conf配置项容器......
  • nginx配置指定路径访问白名单
    444状态码说明444是Nginx中特殊的状态码,代表的含义是:Nginx关闭连接而不向客户端发送响应,可以用来抵挡ddos攻击配置#usernobody;#worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidl......
  • grpc使用nginx代理配置
    参考:https://www.nginx.com/blog/nginx-1-13-10-grpc/重点是标记红色的部分http{log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"'......
  • nginx国密ssl测试
    文章目录文件准备编译部署nginx申请国密数字证书配置证书并测试文件准备下载文件并上传到服务器,这里使用centos7.8本文涉及的程序文件已打包可以直接下载。点击下载下载国密版opensslhttps://www.gmssl.cn/gmssl/index.jsp下载稳定版nginxhttp://nginx.org/en/download.html编......
  • nginx配置多个站点共用80端口,不算端口冲突吗?
    在使用Nginx配置多个站点时,可以将它们共享一个端口(例如80端口)。这是因为Nginx使用虚拟主机(VirtualHost)的概念,通过对访问请求进行区分,将请求发送到不同的站点。Nginx的配置文件中,可以通过server块来定义不同的虚拟主机。每个server块中可以指定不同的域名或IP地址,并设置对应的站点......
  • k8s安装Ingress-Nginx
    目前,DHorse(https://gitee.com/i512team/dhorse)只支持Ingress-nginx的Ingress实现,下面介绍Ingress-nginx的安装过程。下载安装文件首先,需要匹配Ingress-nginx版本和kubernetes版本。在https://github.com/kubernetes/ingress-nginx可以找到,如下图所示:笔者用的k8s版本是v1.21......
  • Nginx
    简介Nginx(”enginex”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上Ngfinx的并发能力确实在同类型的网页服务器中表现较好。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数......
  • Nginx-server-文件下载配置
    server{ listen8001; server_namelocalhost; #错误日志:在location块中添加错误日志记录,以便于问题排查。 error_log/var/log/nginx/8001_down_error.log; #通过valid_referers指令来限制允许访问资源的来源。 valid_referersnoneblockedserver_nameslocalh......
  • 深入了解RPM包管理与Nginx源码包管理
    在Linux系统中,RPM(RedHatPackageManager)是一种流行的软件包管理工具,用于安装、查询和卸载软件包。同时,在编译和安装Nginx等软件时,源码包管理也是一个重要的方面。本文将详细介绍RPM包管理的基本操作以及Nginx源码包管理的方法。RPM包管理1.安装RPM包使用命令可以轻松安装RPM......
  • Nginx——记录post请求回执405的一种解决方式
    前言:nginx做反向代理,一直报405,由于之前配置过,一直是没问题的,这次一直报405,搞了一下午,终于找到原因了是因为开启了多个ngixn导致的。解决办法:cmd杀掉nginx后台进程命令杀掉nginx后台nginx常用命令taskkill/f/t/imnginx.exenginx 常用命令startnginx#启动Ng......