本文概述
- HTTP运行状况检查
- 指定请求的URI
- 定义自定义条件
在TCP模式下, 对TCP连接请求执行运行状况检查。在标准健康检查类型的HTTP模式下, 使用HTTP GET或HTTP POST方法执行健康检查。
HTTP运行状况检查Nginx Plus和Nginx开源可以持续测试我们的上游服务器, 避免出现故障的服务器, 并可以将恢复的服务器正常地添加到负载均衡组中。
被动健康检查
对于被动运行状况检查, Nginx Plus和Nginx监视事务的发生, 并尝试恢复失败的连接。如果仍然无法恢复交易, 则Nginx Plus和Nginx开源会将服务器标记为不可用, 并暂时停止向服务器发送请求, 直到再次将其标记为活动。
使用上游块中server指令的参数为每个上游服务器定义将上游服务器标记为不可用的条件。
例:
在以下示例中, 如果Nginx将无法向服务器发送请求或在30秒内没有收到3次响应, 它将在30秒内将服务器标记为不可用:
upstream backend {server backend1.example.com;
server backend2.example.com max_fails=3 fail_timeout=30s;
}
主动健康检查
Nginx Plus通过向每个服务器发送特殊的运行状况检查请求并验证正确的响应来定期检查上游服务器的运行状况。
【NGINX运行状况检查详解】要启用主动健康检查:
1)将请求传递到上游组的位置, 包括health_check指令:
server {location / {proxy_pass http://backend;
health_check;
}}
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;
}
指定请求的URI我们可以使用health_check指令的uri参数来设置要在运行状况检查中请求的URI:
location / {proxy_pass http://backend;
health_check uri=/some/path;
}
将指定的URI(统一资源标识符)附加到上游块中为服务器设置的服务器域名或IP地址。在上面的示例中, 对于示例后端组中的第一台服务器, 运行状况检查将请求URI http://backend1.example.com/some/path。
定义自定义条件我们可以指定响应必须满足的自定义条件, 服务器才能通过运行状况检查。条件在match块中定义, 在health_check指令的match参数中引用该块:
1)在http {}级别上, 定义match {}块并为其命名, 例如server_ok:
http {#...match server_ok {# tests are here}}
2)通过定义match参数和match块的名称来引用health_check指令中的块:
http {#...match server_ok {status 200-399;
body !~ "maintenance mode";
}server {#...location / {proxy_pass http://backend;
health_check match=server_ok;
}}}
在上面的示例中, 如果响应的状态代码在200-399范围内, 并且其主体不包含字符串维护模式, 则通过运行状况检查。
推荐阅读
- HTTP负载均衡配置详解
- NGINX动态模块
- Nginx指令与上下文
- NGINX所有指令
- nginx|Nginx学习笔记(五)(浅析Nginx原理)
- NGINX压缩和解压缩
- NGINX内容缓存
- Mac安装NGINX详细步骤
- Debian/Ubuntu安装NGINX详细步骤