とりあえず以下の設定をしておけばいいらしい。
upstream example.com {
server backend1-example.com;
server backend1-example.com;
server backend1-example.com;
}
upstreamはNginxでLBを実現させるためのものだが、その仕様の一つとしてtimeoutしたときに次のサーバーに対してretryするという挙動をする。なので通常の使い方だとは異なるサーバーを指定するわけだが、originサーバーは1つでリトライ処理だけを取り込みたい場合は上記の設定のように同一サーバーを設定しておけばリトライの挙動が実現できる。
レスポンスが404や503などタイムアウト以外のケースでリトライさせたい場合はproxy_next_upstreamを指定する
詳しいことは大体この記事に書いてある。
https://blog.1q77.com/2017/06/retry-function-of-reverseproxy/
ただし上記の記事ではステータスコード404や403では動かないとあるので補足しておくと、error_pageを無効にしないとupstreamの設定が上書きされてしまうとかなんとか。
https://forum.nginx.org/read.php?2,268529,268544#msg-268544