Release 1.9.13 of Nginx, just out a couple of hours ago, fixes a long standing bug: non-idempotent requests could be resent to another upstream, potentially causing multiple form submits, multiple deletes, …
In simpler terms: a POST request sent to Nginx could be sent to multiple upstreams if for some reason the connection to the initial upstream got closed. That upstream may very well have received that POST request and modified data as a result. But Nginx would resend that POST to a second upstream either way.
You can image the potential hard-to-debug error that come as a result of that.
Either way, Nginx 1.9.13 is available now and changes that default behaviour so it no longer repeats POST, LOCK or PATCH requests.
*) Change: non-idempotent requests (POST, LOCK, PATCH) are no longer
passed to the next server by default if a request has been sent to a
backend; the “non_idempotent” parameter of the “proxy_next_upstream”
directive explicitly allows retrying such requests.
It’s interesting that this took so long to implement.