📜  NGINX HTTP运行状况检查

📅  最后修改于: 2021-01-07 06:09:27             🧑  作者: Mango

什么是健康检查?

健康检查是用于将相同请求发送给每个成员的计划规则。运行状况检查将向负载均衡器组的每个成员发送一个请求,以建立每个成员服务器接受客户端请求的可用性。对于某些类型的运行状况检查,将计算服务器的响应以确定每个成员服务器的运行状况。成功完成运行状况检查需要服务器通过常规的TCP和HTTP连接标准。

在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通过向每个服务器发送特殊的运行状况检查请求并验证正确的响应来定期检查上游服务器的运行状况。

要启用主动健康检查:

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范围内,并且其主体不包含字符串维护模式,则通过运行状况检查。