proxy_next_upstream 对POST无效

需要添加non_idemponent,官方文档的说明是:
normally, requests with a non-idempotent method (POST, LOCK, PATCH) are not passed to the next server if a request has been sent to an upstream server (1.9.13); enabling this option explicitly allows retrying such requests;
意思是如果不加上non_idemponent,对POST这些不幂等的方法,出错是不会重试的。

猜测

按照严格RESTful设计,PUT和POST都是对资源的修改,比如新增一个用户、修改某个信息、增加积分等等。GET请求一般用于查询资源的情况,一般情况下都是幂等的,意味着不管执行多少次,结果都是一样的。当遇到5xx的时候,POST的请求如果没有使用事务,可能结束了,也可能没有结束,即便用了事务,也可能一定的几率会执行成功了,但没有正确返回。POST如果是用来新增一些资源,proxy_next_upstream可能会导致出现一些业务逻辑上的异常。
但很多场景下,出于加密或者其他考虑(如:前端不好支持等等),有些业务并不是按照严格的RESTful来实现的,如果后端做了一些充分的容错处理,支持接口幂等。那么是可以对POST等接口做一个失败重试,相应的配置要加上non_idemponent,就会生效。