参画している案件のNginxにて5XXエラーが多く、調査していたところ、以下のメッセージがよく出ていることを発見しました。
2021/08/21 04:57:52 [warn] 3475#3475: *1741885 upstream server temporarily disabled while reading response header from upstream,
2021/08/21 04:57:52 [error] 3475#3475: *1741885 upstream timed out (110: Connection timed out) while reading response header from upstream,
いろいろ調べたところ、どうやらNginxで使っていたリバースプロキシ機能にて転送先(upstream)のヘルスチェックをしている様子。
upstreamの定義を書いていなくても、proxy_passを使って定義した時点で、暗黙的にオプション max_fails=1とfail_timeout=10sが定義されるようです。
実際この問題に出会っている人はいらっしゃるようで、対処としてはupstream定義を追加し、暗黙的なオプションを上書きする方法を取るのが無難なようです。
upstream {
# disable health check and retry count 3
server hogehoge.com max_fails=0;
server hogehoge.com max_fails=0;
server hogehoge.com max_fails=0;
}
今回私が対象としている転送先はAWSのALBなので、ヘルスチェックする必要は無いと判断し、同様の実装をしてみることにしました。
これで5XXが減ると良いんですが。