Nginxがプロキシ先をヘルスチェックしていたので止めた

参画している案件の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=1fail_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が減ると良いんですが。

目次
閉じる