需求:nginx负载均衡,任何一台机器出现404,403,500,503等非正常状态200的异常状态,自动(负载)跳转到另一个机器
解决办法:
nginx 通过proxy_next_upstream实现容灾和重复处理问题
ngx_http_proxy_module 模块中包括proxy_next_upstream指令
1 2 3 4 5 6 7 8 9 10 11 12 |
语法: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 |http_404 | off ...; 默认值: proxy_next_upstream error timeout; 上下文: http, server, location error :和后端服务器建立连接时,或向后端服务器发送请求时,或从后端服务器接收响应头时.出现错误. timeout:和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时出现超时. invalid_header:后端服务器返回空响应或者非法响应头 http_500:后端服务器返回的响应状态码为500 http_502:后端服务器返回的响应状态码为502 http_503:后端服务器返回的响应状态码为503 http_504:后端服务器返回的响应状态码为504 http_404:后端服务器返回的响应状态码为404 off:停止将请求发送给下一台后端服务器 |
运用场景
1 2 3 4 5 6 7 8 |
1、proxy_next_upstream http_500 | http_502 | http_503 | http_504 |http_404; 当其中一台返回错误码404,500...等错误时,可以分配到下一台服务器程序继续处理,提高平台访问成功率,多可运用于前台程序负载,设置proxy_next_upstream proxy_next_upstream http_500 | http_502 | http_503 | http_504 |http_404; 2、proxy_next_upstream off 因为proxy_next_upstream 默认值: proxy_next_upstream error timeout; 场景:当访问A时,A返回error timeout时,访问会继续分配到下一台服务器处理,就等于一个请求分发到多台服务器,就可能出现多次处理的情况, 如果涉及到充值,就有可能充值多次的情况,这种情况下就要把proxy_next_upstream关掉 proxy_next_upstream off |
另外,upstream 也需要配置,请求失败多少次,切换到下一个,upstream常用参数详解

实例配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
upstream domain_shooter { server 192.168.6.192:8088 max_fails=1 fail_timeout=5s weight=5; server 192.168.6.198:5555 max_fails=1 fail_timeout=5s weight=5; } server { listen 80; server_name www.shooter.com; access_log /var/www/logs/nginx/www.shooter.com-access.log; location / { proxy_set_header Host $host; proxy_next_upstream error timeout invalid_header http_500 http_503 http_404 http_403; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://domain_shooter; } } |
1 2 |
nginx负载均衡超时策略 https://www.cnblogs.com/lemon-flm/p/8352194.html |
- 本文固定链接: https://www.yoyoask.com/?p=2103
- 转载请注明: shooter 于 SHOOTER 发表