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

2019-10-17 16:29:58王冬梅

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!'.