我是靠谱客的博主 怕孤独向日葵,最近开发中收集的这篇文章主要介绍nginx 负载均衡 POST请求失败重试问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

关于nginx负载均衡策略配置,可参考nginx 负载均衡策略

从nginx 1.9.13开始,默认情况下不重试非幂等请求(PUT、POST等),当在配置中增加失败重试配置时,如果后端服务器响应超时,Get请求会重新选择一台上游服务器进行重试,而POST请求则会返回504 Gateway Time-out,不会进行重试。


可使用以下两种方式处理POST请求失败重试问题

方式1

想在1.9.13或更高版本上继续重试PUT、POST等(非幂等)请求,可使用:

proxy_next_upstream error timeout non_idempotent;

non_idempotent参数可让POST请求在请求失败时进行重试,但POST请求的重试是不合理的重试策略,会减弱nginx的处理能力,无论是发生500错误还是timeout,服务器上的业务可能都已经执行过了,而重试会导致非幂等方法重复执行,从而导致业务问题,例如一个请求会创建了多个订单,或者收到多条短信的问题。

方式2

有时我们需要配置POST请求的失败重试,比如在3S后服务器请求失败进行重试,此时如果POST请求和GET请求都是走同一个server模块,则POST请求出现3S超时时,会返回504 Gateway Time-out的异常。

为了避免这种情况,我们可以在nginx配置中增加if判断,让POST请求走没有重试配置的模块

upstream backend {
server localhost:8088;
server localhost:8089;
}
server {
listen 80;
#监听80端口
location / {
error_page 598 = @retry;
error_page 599 = @no_retry;
if ($request_method = POST) {
return 599;
}
return 598;
}
location @retry {
proxy_pass http://backend;
}
location @no_retry {
proxy_pass http://backend;
proxy_next_upstream off;
}
}

幂等和非幂等

幂等:多次操作或请求的结果都是一样的,比如说查询某条数据,即使请求接口超时,再继续请求第二第三次,查询的结果都是一致的。
非幂等:每一次操作的结果都是不一样的,比如说插入某条数据,发送插入请求时,插入接口发生超时,此时调用者再进行第二次发送请求,结果还是超时,再发送第三次请求,结果数据已经多次插入进去了,但我们只需要插入一条,这就是非幂。

最后

以上就是怕孤独向日葵为你收集整理的nginx 负载均衡 POST请求失败重试问题的全部内容,希望文章能够帮你解决nginx 负载均衡 POST请求失败重试问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部