Nginx http运行状况健康检查配置过程解析

被动检查

对于被动健康检查,NGINX 和 NGINX Plus 会在事件发生时对其进行监控,并尝试恢复失败的连接。如果仍然无法恢复正常,NGINX 开源版和 NGINX Plus 会将服务器标记为不可用,并暂时停止向其发送请求,直到它再次标记为活动状态。

上游服务器标记为不可用的条件是为每个上游服务器定义的,其中包含块中 server 指令的参数 upstream:

  • fail_timeout - 设置服务器标记为不可用时必须进行多次失败尝试的时间,以及服务器标记为不可用的时间(默认为 10 秒)。
  • max_fails - 设置在 fail_timeout 服务器标记为不可用期间必须发生的失败尝试次数(默认为 1 次尝试)。 在以下示例中,如果 NGINX 未能在 30 秒内向服务器发送请求或未收到响应 3 次,则表示服务器在 30 秒内不可用:
upstream backend {
  server backend1.example.com;
  server backend2.example.com max_fails=3 fail_timeout=30s;
}

需要注意的是如果只有一个单一的服务器组中,将 fail_timeout 和 max_fails 参数被忽略,服务器永远不会标记为不可用。

服务器慢启动

最近恢复的服务器很容易被连接淹没,这可能导致服务器再次被标记为不可用。慢启动允许上游服务器在恢复或变得可用之后逐渐将其权重从零恢复到其标称值。这可以指定 upstream 的 server 模块的 slow_start 参数来完成:

upstream backend {
  server backend1.example.com slow_start=30s;
  server backend2.example.com;
  server 192.0.0.1 backup;
}

注意:如果组中只有一台服务器,则 slow_start 参数将被忽略,而服务器永远不会被标记位不可用状态。慢启动是 NGINX Plus 的专有功能

NGINX Plus的主动检查

NGINX Plus 可以通过向每个服务器发送特殊的健康检查请求并验证正确的响应来定期检查上游服务器的运行状况。

要启用活动运行状况检查:

1.在 location 区块将 requests(proxy_pass)传递给上游组的过程中,包含 health_check 指令:

server {
 location / {
   proxy_pass http://backend;
   health_check;
 }
}

此代码段定义了一个服务器,它将所有请求匹配到 location / 传递给调用的上游组 backend。它还使用该 health_check 指令启用高级运行状况监视:默认情况下,NGINX Plus 每五秒向组中的每个服务器发送一个 “/” 请求 backend。

如果任何通信错误或发生超时(在服务器返回的状态码超出 200- 399的范围)的健康检查失败。服务器被标记为不健康,并且 NGINX Plus 在再次通过运行状况检查之前不会向其发送客户端请求。

另一个可选项:您可以指定另一个用于运行状况检查的端口,例如,用于监视同一主机上的许多服务的运行状况。使用指令的 port 参数指定新端口 health_check:

server {
 location / {
   proxy_pass  http://backend;
   health_check port=8080;
 }
}

2.在上游服务器组,使用 zone 指令定义一个共享内存区域:

http {
 upstream backend {
   zone backend 64k;
   server backend1.example.com;
   server backend2.example.com;
   server backend3.example.com;
   server backend4.example.com;
 }
}

该区域在所有工作进程之间共享,并存储上游组的配置。这使工作进程能够使用同一组计数器来跟踪组中服务器的响应。

可以使用 health_check 指令的参数覆盖活动运行状况检查的默认值:

location / {
  proxy_pass http://backend;
  health_check interval=10 fails=3 passes=2;
}

此处,该 interval 参数将运行状况检查之间的延迟从默认的 5 秒增加到 10 秒。该 fails 参数要求服务器三次运行状况检查失败时,以将其标记为运行状况不佳(从默认值开始)。最后,passes 参数意味着服务器必须通过两次连续检查才能再次标记为健康,而不是默认值。

指定请求的URL

在 health_check 指令中指定 uri 参数来设置健康检查请求的路由:

location / {
  proxy_pass http://backend;
  health_check uri=/some/path;
}

指定的 URI 将附加到为 upstream 块中的服务器设置的服务器域名或IP地址。对于backend 上面声明的样本组中的第一个服务器,运行状况检查会请求URI http://backend1.example.com/some/path。

定义自定义条件

您可以设置响应必须满足的自定义条件,以便服务器通过运行状况检查。条件在match块中定义,该块match在health_check指令的参数中引用。

1.在 http {} 级别,指定 match {} 块并为其命名,例如:'server_ok'

http {
 #...
 match server_ok {
   # tests are here
 }
}

2.health_check 通过指定块的 match 参数和 match 参数块的名称:

http {
 #...
 match server_ok {
   status 200-399;
   body !~ "maintenance mode";
 }
 server {
   #...
   location / {
     proxy_pass http://backend;
     health_check match=server_ok;
   }
 }
}

如果响应的状态代码在范围中,则传递运行状况检查 200- 399 并且其正文不包含字符串: ‘maintenance mode'

该 match 指令使 NGINX Plus 能够检查状态代码,标题字段和响应正文。使用此指令可以验证状态是否在指定范围内,响应是否包含标头,或者标头或正文是否与正则表达式匹配。该 match 指令可以包含一个状态条件,一个正文条件和多个标题条件。响应必须满足 match 块中定义的所有条件,以便服务器通过运行状况检查。

例如,下面的 match 指令匹配有状态代码响应 200,精确值 text/html 的Content-Type 标题,页面中的文字:'Welcome to nginx!'.

match welcome {
  status 200;
  header Content-Type = text/html;
  body ~ "Welcome to nginx!";
}

以下示例使用感叹号(!)来定义响应不得通过运行状况检查的特征。在这种情况下,健康检查在非 301,302,303,或 307状态码,同时并没有 Refresh 头信息时将通过检查,。

match not_redirect {
  status ! 301-303 307;
  header ! Refresh;
}

健康检查可以在其他非 HTTP 协议中启用, 例如 FastCGI, memcached, SCGI, uwsgi 甚至 TCP 和 UDP

很多很好的特性,就是需要 Nginx Plus 才能使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Centos7.3 安装部署Nginx并配置https的方法步骤

    安装环境 1. gcc 安装 安装 nginx 需要先将官网下载的源码进行编译 编译依赖 gcc 环境: yum install gcc-c++ 2. PCRE pcre-devel 安装 安装pcre-devel 是使用 pcre 开发的一个二次开发库.: yum install -y pcre pcre-devel 3. zlib 安装 zlib 库提供了很多种压缩和解压缩的方式, nginx 可以使用 zlib 对 http 包的内容进行 gzip: yum install -y zlib

  • nginx https反向代理tomcat的2种实现方法

    反向代理 在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担成千上万的用户请求,这些服务器提供相同的服务,对于用户来说,根本感觉不到任何差别. nginx做前端代理分发,tomcat处理请求.nginx反代tomcat实现https有二个方法. 一.nginx配置https,tomcat也配置https 1.nginx配置https upstream https_tomcat_web { se

  • 如何通过nginx负载均衡跳转https

    web端拷贝证书与密钥 scp -rp -P52113 /application/nginx/conf/key 10.0.0.5:/application/nginx/conf/ 在nginx负载均衡服务端配置 vim /application/nginx/conf/nginx.conf worker_processes 2; error_log logs/error.log; events { worker_connections 65535; } http { include mime.ty

  • linxu服务器上nginx启动、关闭、配置检查命令(推荐)

    关闭nginx ./nginx -s stop --快速停止nginx 也可以ps -ef|grep ninx kill -9 进程号 直接启动nginx,常用语第一次启 ./sbin/nginx -c conf/nginx.conf nginx检查配置 ./nginx -t --echo出来 success或者fail nginx重启 ./nginx -s reload --会重新加载配置文件后重启 常用方式: 1.假设你要修改你的域名,修改了server_name后,需要检查配置,执行nin

  • Nginx配置多个HTTPS域名的方法

    最近在玩微信小程序,手头有: 一台云服务器:CentOS 7 多个一级域名 开发测试过程中,因为某些原因,想要让手头的A.B域名同时指向云服务器的443端口,支持HTTPS. Nginx支持TLS协议的SNI扩展(同一个IP上可以支持多个不同证书的域名),只需要重新安装Nginx,使其支持TLS即可. 安装Nginx [root]# wget http://nginx.org/download/nginx-1.12.0.tar.gz [root]# tar zxvf nginx-1.12.0.t

  • Nginx http升级到https的完整步骤

    http和https的区别是 有的网站,http打开的时候,页面提示不安全,比如你点击下面的网站 [其实是同一个网站] http://www.511easy.com/bug/login http://www.88bugs.com/bug/login 怎样才能去掉这个不安全的提示呢? 从http升级到https呗 最终效果看一下: 如果目前有一个网站,要怎么升级为https呢 域名: 511easy.com 有域名了就可以申请免费的ssl证书,如下截图,基于各个Web服务器的证书,我这边用的是Ng

  • 详解nginx使用ssl模块配置支持HTTPS访问

    背景: 项目开发中用到了微信小程序,但是服务器配置URL必须是HTTPS,所以需要通过配置nginx的SSL模块来支持HTTPS访问,也就是说,要做一个网站域名为 dmsdbj.com 要求通过HTTPS://dmsdbj.com进行访问. SSL英文名为Secure Socket Layer,安全套接字层.SSL是一种数字证书,它使用ssl协议在浏览器和web server之间建立一条安全通道,数据信息在client与server之间的安全传输. 本篇博客是对这个操作步骤的详解. 前提: 1.

  • Nginx http运行状况健康检查配置过程解析

    被动检查 对于被动健康检查,NGINX 和 NGINX Plus 会在事件发生时对其进行监控,并尝试恢复失败的连接.如果仍然无法恢复正常,NGINX 开源版和 NGINX Plus 会将服务器标记为不可用,并暂时停止向其发送请求,直到它再次标记为活动状态. 上游服务器标记为不可用的条件是为每个上游服务器定义的,其中包含块中 server 指令的参数 upstream: fail_timeout - 设置服务器标记为不可用时必须进行多次失败尝试的时间,以及服务器标记为不可用的时间(默认为 10 秒

  • mybatis plus代码生成器配置过程解析

    这篇文章主要介绍了mybatis plus代码生成器配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 最近在玩项目,发现自己写严重浪费时间~于是想到了代码生成器,之前用过一次的mybatis-plus,再重新实现了一下 确保修改好对应的配置即可 依赖: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boo

  • Spring AOP AspectJ使用及配置过程解析

    这篇文章主要介绍了Spring AOP AspectJ使用及配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 AspectJ是一个基于Java语言的AOP框架,Spring2.0以后新增了对AspectJ切点表达式支持.因为Spring1.0的时候Aspectj还未出现; AspectJ1.5中新增了对注解的支持,允许直接在Bean类中定义切面.新版本的Spring框架建 议我们都使用AspectJ方式来开发AOP,并提供了非常灵活且

  • JavaWeb工程web.xml基本配置过程解析

    这篇文章主要介绍了JavaWeb工程web.xml基本配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.理论准备 先说下我记得xml规则,必须有且只有一个根节点,大小写敏感,标签不嵌套,必须配对. web.xml是不是必须的呢?不是的,只要你不用到里面的配置信息就好了,不过在大型web工程下使用该文件是很方便的,若是没有也会很复杂. 那么web.xml能做的所有事情都有那些?其实,web.xml的模式(Schema)文件中定义了多

  • Java加载property文件配置过程解析

    这篇文章主要介绍了java加载property文件配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1 properties简介: properties是一种文本文件,内容格式为: key = value #单行注释 适合作为简单配置文件使用,通常作为参数配置.国际化资源文件使用. 对于复杂的配置,就需要使用XML.YML.JSON等了 2 java加载Properties: java加载properties主要通过2个util包下的

  • 记录Nginx服务器的Split Clients模块配置过程

    ngx-http-split-clients模块基于一些特定条件分开客户端连接,(例如ip地址,请求头,cookies等) 示例配置: http { split-clients "${remote-addr}AAA" $variant { 0.5% .one; 2.0% .two; - ""; } server { location / { index index${variant}.html; 可以使用$cookie--作为来源来分离请求,来源字符串使用CRC32

  • Nginx实现集群的负载均衡配置过程解析

    Nginx 的负载均衡功能,其实实际上和 nginx 的代理是同一个功能,只是把代理一台机器改为多台机器而已. Nginx 的负载均衡和 lvs 相比,nginx属于更高级的应用层,不牵扯到 ip 和内核的修改,它只是单纯地把用户的请求转发到后面的机器上.这就意味着,后端的 RS 不需要配置公网. 一.实验环境 Nginx 调度器 (public 172.16.254.200 privite 192.168.0.48) RS1只有内网IP (192.168.0.18) RS2只有外网IP (19

  • Nginx反向代理springboot的jar包过程解析

    springboot项目部署到服务器常见的方式就是打成war包部署Tomcat或者打成jar包直接使用内置容易运行,很多人现在都打成war包部署到tomcat,这种方式虽然没问题 但是后期维护比较麻烦.从官方的说明中 打成jar部署是最好的方式,但是这样又有个问题 如果同时部署多个spring-boot项目 端口不一样 怎么通过域名来访问呢,接下来就需要Nginx出手了,Nginx 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.很适合部署springboot

  • Nginx使用反向代理实现负载均衡过程解析

    简介 基于docker容器以及docker-compose,所以需要自学docker在linux环境的基本使用 使用两个tomcat作为负载均衡的服务端 1.使用docker拉取tomcat和nginx镜像 拉取nginx参考 拉取tomcat参考 2.使用docker-compose创建两个tomcat服务 新建tomcat目录,在该目录下创建docker-compose.yml文件,输入如下内容: version: '3' services: tomcat1: image: tomcat c

  • Python本地及虚拟解释器配置过程解析

    1.准备工作 安装好Pycharm2017版本 电脑上安装好Python解释器 2.本地解释器配置 配置本地解释器的步骤相对简洁直观: (1)单击工具栏中的设置按钮. (2)在Settings/Preferences对话框中选中Project Interpreter页面,在Project Interpreter对应的下拉列表中选择对应的解释器版本,或者单击右侧的设置按钮手动添加. (3)在接下来的情况下,选择Add Local选项,然后选择预期的解释器(Python的可执行文件). 值得一提的是

随机推荐