编程技术分享平台

网站首页 > 技术教程 正文

程序员快速上手 Nginx 运行原理之“失败重试”精华笔记

xnh888 2024-09-22 16:58:52 技术教程 32 ℃ 0 评论


一、问题?

Nginx 是如何剔除不可用的上游服务的呢?

Nginx 作为目前流行的反向代理服务,原生提供了一套失败重试机制,来保证服务的可用性。


二、失败的定义

Nginx 通过 proxy_next_upstream 参数来判断,分为 error、timeout 两种。

1. Error 的场景:常见的是上游服务器的无法提供正常服务。

  • 服务重启;
  • 停止;
  • 异常崩溃。



2.Timeout的场景:

  • 连接超时
  • 读取超时
  • 写入超时



三、判断逻辑

通过配置上游服务器的 max_fails 和fail_timeout ,来制定每个上游服务器,当 fail_timeout 时间内失败了 max_fails 次请求,则认为该上游服务器不可用,然后将其摘掉。 fail_timeout 时间后会再次将该服务加入到存活上游服务器列表进行重试。

上游服务配置

upstream backend {
  server 192.168.0.11 fail_timeout=20s max_fails=2; 
  server 192.168.0.12 fail_timeout=20s max_fails=2; 
  server 192.168.0.13 ; 
} 


代理配置

进行 proxy_next_upstream 相关配置,当遇到配置的错误时,会重试下一台上游服务器。

location /test {
    proxy_connect_timeout 5s;
    proxy_send_timeout 5s;
    proxy_read_timeout 5s;
    proxy_next_upstream error timeout;
    proxy_next_upstream timeout 10s;
    proxy_next_upstream_tries 2;
    proxy_pass http://backend;
}


四、参数说明

1.连接失败参数

proxy_connect_timeout (连接) 连接的时间,默认60s 不能超过75秒。

proxy_read_timeout (读) 读取响应的时间,默认60s

proxy_send_timeout (写) 发送请求时间,默认60s


2.失败重试机制参数说明:

proxy_next_upstream_tries 重试次数 默认0 ,表示不限制。
proxy_next_upstream timeout 重试最大超时时间, 默认0, 表示不限制。
proxy_next_upstream error  timeout ...;

proxy_next_upstream 详细说明
error             # 与服务器建立连接发生错误;
timeout           # 在与服务器建立连接超时;
invalid_header    # 服务器返回空的或无效的响应;
http_500          # 服务器返回代码为500的响应;
http_502          # 服务器返回代码为502的响应;
http_503          # 服务器返回代码为503的响应;
http_504          # 服务器返回代码504的响应;
http_403          # 服务器返回代码为403的响应;
http_404          # 服务器返回代码为404的响应;
http_429          # 服务器返回代码为429的响应;
off               # 禁用将请求传递给下一个服务器。

今天的分享就到这里了,大家有没有好的方法呢 ,欢迎来留言区评论 我们一起交流学习 ,如果喜欢我的文章 欢迎点赞和转发。

@程序员白老哥 专注分享 《高并发架构设计》 #知识创作者#


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表