Nginx 中 max_fails 和 fail_timeout 指令有什么作用?

推荐答案

max_failsfail_timeout 是 Nginx 中用于控制上游服务器健康检查的两个重要指令。

  • max_fails:指定在 fail_timeout 时间内,允许的最大失败次数。如果超过这个次数,Nginx 会将该服务器标记为不可用。
  • fail_timeout:指定一个时间段,在这个时间段内,如果失败次数达到 max_fails,服务器将被标记为不可用。同时,fail_timeout 也定义了服务器被标记为不可用后,重新尝试连接的时间间隔。

本题详细解读

max_fails

max_fails 指令用于设置在一个 fail_timeout 时间段内,允许的最大失败次数。默认情况下,max_fails 的值为 1。如果在这个时间段内,Nginx 尝试与上游服务器通信失败的次数超过了 max_fails 的值,Nginx 会将该服务器标记为不可用,并停止向其转发请求。

例如:

在这个例子中,backend1.example.commax_fails 被设置为 3,意味着在 fail_timeout 时间内,如果 Nginx 尝试与 backend1.example.com 通信失败 3 次,Nginx 会将其标记为不可用。

fail_timeout

fail_timeout 指令有两个作用:

  1. 它定义了 max_fails 的时间范围。在这个时间段内,如果失败次数达到 max_fails,服务器将被标记为不可用。
  2. 它定义了服务器被标记为不可用后,Nginx 会等待多长时间再重新尝试连接该服务器。

例如:

在这个例子中,backend1.example.comfail_timeout 被设置为 10 秒。这意味着:

  • 在 10 秒内,如果 Nginx 尝试与 backend1.example.com 通信失败 3 次,Nginx 会将其标记为不可用。
  • 一旦 backend1.example.com 被标记为不可用,Nginx 会等待 10 秒后再次尝试连接该服务器。

综合示例

在这个配置中:

  • backend1.example.com 在 10 秒内最多允许 3 次失败,如果超过 3 次,Nginx 会将其标记为不可用,并在 10 秒后重新尝试连接。
  • backend2.example.com 在 5 秒内最多允许 2 次失败,如果超过 2 次,Nginx 会将其标记为不可用,并在 5 秒后重新尝试连接。

通过合理配置 max_failsfail_timeout,可以有效地管理上游服务器的健康状态,避免将请求转发到不可用的服务器上,从而提高系统的稳定性和可靠性。

纠错
反馈