将会每隔五秒钟发送 "/" 到 backend 群的每个服务器。如果有任何通信错误或者超时发生,或者代理服务器返回为 2XX 或者 3XX 之外的状态码,健康检查失败,这台服务器就被认为是不健康的了。来自客户端的请求不会被传递给不健康的服务器。
健康检查可以被配置成测试返回的状态码,头字段以及其值,还有正文内容。测试单独地使用 match 参数引用到的 match 指令进行配置,例如:
http {
server {
...
location / {
proxy_pass ;
health_check match=welcome;
}
}
match welcome {
status 200;
header Content-Type = text/html;
body ~ "Welcome to nginx!";
}
}
这一配置说明了健康检查通过的条件是,健康检查请求应该成功返回,拥有状态码 200,Content-Type 是为 "text/html",并且在正文中包含 "Welcome to nginx!"。
服务器群必须属于共享内存。
如果一些健康检查是为同一群服务器而定义,一个失败的任何检查就会使相关服务器被认为是不健康的。
这个指令仅作为我们的商业订阅的一部分。
语法:match name { ... }
默认值:—
上下文:http
定义已命名测试设置,用于核对健康检查请求的返回。
可以在一个返回中进行以下项目测试:
status 200;
状态码为 200。
status ! 500;
状态码不是 500。
status 200 204;
状态码为 200 或者 400。
status ! 301 302;
状态码既不是 301 也不是 302。
status 200-399;
状态码在 200 - 399 之间。
status ! 400-599;
状态码不在 400 - 599 之间。
status 301-303 307;
状态码是 301,302,303,或者 307。
header Content-Type = text/html;
头包含字段 "Content-Type" 值为 text/html。
header Content-Type != text/html;
头包含字段 "Content-Type" 值不是 text/html。
header Connection ~ close;
头包含字段 "Connection" 值匹配正则表达式 close。
header Connection !~ close;
头包含字段 "Connection" 值不匹配正则表达式 close。
header Host;
头包含字段 "Host"。
header ! X-Accel-Redirect;
头没有 "X-Accel-Redirect" 字段。
body ~ "Welcome to nginx!";
正文匹配正则表达式 "Welcome to nginx!"。
body !~ "Welcome to nginx!";
正文不匹配正则表达式 "Welcome to nginx!"。
如果以上有些被定义,那么返回必须全都匹配时才能说明它测试通过。
仅仅检查返回正文的头 256 k 个字节。
例如:
# status is 200, content type is "text/html",
# and body contains "Welcome to nginx!"
match welcome {
status 200;
header Content-Type = text/html;
body ~ "Welcome to nginx!";
}
# status is not one of 301, 302, 303, or 307, and header does not have "Refresh:"
match not_redirect {
status ! 301-303 307;
header ! Refresh;
}
# status ok and not in maintenance mode
match server_ok {
status 200-399;
body !~ "maintenance mode";
}