nginx 做负载均衡与故障转移时,后端挂了会怎样?GET 和 POST 的重试有什么区别?健康检查是怎么发现问题的?这篇用真实的两个后端把每种情形跑出来(HTTPS 与代理头见第 134、135 篇)。
分布: {'A': 20, 'B': 20}
weight=3 比 1: {'A': 30, 'B': 10}上一篇:uWSGI 与 Flask;下一篇:ProxyFix 的作用。
nginx 是自己起的实例(非默认端口),后端是两个 gunicorn gthread 进程。
B 停掉后 40 个请求:成功 40,失败 0;落在 {'A': 40}
nginx 的 error.log 里记录了连接被拒: True (出现次数 1 )
proxy_next_upstream off 时 40 个请求:成功 39,失败 1(落到挂掉后端的请求直接 502) GET 6 个请求:状态 {200: 6},最慢 1015 ms,成功的落在 {'A': 6}
POST 6 个请求:状态 {504: 3, 200: 3},最慢 1004 ms,成功的落在 {'A': 3}这一节的 nginx 配置里设了 max_fails=0,不把后端标记为不可用,每个请求都会轮到卡住的那个。