1、错误超时指定状态码配置
http {
proxy_next_upstream error http_502 non_idempotent invalid_header
proxy_read_timeout 100s; #设置从后端/上游服务器读取响应的超时时间,默认为60s
}
a、 指定请求应传递到下一个服务器的情况
error:在与服务器建立连接,向其传递请求或读取响应标头时发生错误;
timeout:在与服务器建立连接,向其传递请求或读取响应头时发生超时;
invalid_header:服务器返回空响应或无效响应;
http_500:服务器返回了带有代码500的响应;
http_502:服务器返回具有代码502的响应;
http_503:服务器返回具有代码503的响应;
http_504:服务器返回具有代码504的响应;
http_403:服务器返回带有代码403的响应;
http_404:服务器返回具有代码404的响应;
non_idempotent:通常,如果请求已经被发送到上游服务器(1.9.13),则具有非幂等方法的请求(POST,LOCK,PATCH)不被传递到下一个服务器;启用此选项明确允许重试此类请求;
off:禁用将请求传递到下一个服务器。
b、proxy_next_upstream 默认 错误,超时的情况始终被认为是不成功的尝试,即使它们没有在指令中指定;
c、只有在指令中指定http_500,http_502,http_503和http_504的情况下,才会被视为不成功尝试。 http_403和http_404的情况绝不会被认为是失败的尝试;
d、proxy_next_upstream_timeout 和 proxy_next_upstream_tries 传递到下一个服务器的时间和尝试次数,默认都是关闭的, 建议不要开启, 配置开启后 尝试过程中会暴露后端错误状态码到客户端;
2、后端存活验证
upstream www {
server IP:8080 fail_timeout=30s max_fails=2;
server IP:8080 fail_timeout=30s max_fails=2;
server IP:8080 fail_timeout=30s max_fails=2;
}
a、fail_timeout=30s max_fails=2 如果30秒周期内 出现2次连接错误,认为这个服务器不可用,跳转到下一台,此配置主要验证后端 端口是否存活;
3、测试模拟验证
a、请求后端超过 proxy_read_timeout 限制时间,代理日志状态码504 后端服务器日志码499,客户端504
b、正在处理请求的一台后端 突然挂掉,此时被认为端口不可达,不存活,马上跳转到一台正常的;
c、如果proxy_next_upstream 配置相应参数 如502 ,后端某一台出现502 马上跳转到正常的一台,后台日志中 有502错误请求,客户端返回正常页面;
d、如果 后端都报 500 或者502,客户端肯定收到 错误状态码;
e、后端报403 代理也会报403;
4、建议使用配置
http {
proxy_next_upstream error http_502 non_idempotent invalid_header;
###proxy_read_timeout 600s; #设置从后端/上游服务器读取响应的超时时间,默认为60s
}
upstream www {
server IP:8080 fail_timeout=30s max_fails=2;
server iP:8080 fail_timeout=30s max_fails=2;
server IP:8080 fail_timeout=30s max_fails=2;
}
文章归属,轻易科技 分享部门:轻易科技-ops部门