
Nginxのエラーログ「no live upstreams while connecting to upstream」の原因と対策(ロードバランサ)
Nginxをロードバランサとして使っています。
そのフロント側はエラーログなんてほとんど出ないのですが、
急に「no live upstreams while connecting to upstream」が出だした。
この対策方法を語ります。
このエラーログを対策
サーバー名も無く、URLもアップストリーム名となる「backend」とおかしい。
「no live upstreams while connecting to upstream」は
「アップストリーム先が死んでるよ」といった意味です。
ようはサーバーダウン状態。
しかも時々起こるという、いったいどうした?というエラーです。
原因
バックエンド側で「return 444;」を使ったことが原因。
Nginx独自のエラーコードである「444」は、通信を即座に閉じます。
そのため、サーバーダウンと同じ状態になってしまう。
デフォルトだと10秒間は通信しないようになるので、10秒だけサーバーダウン状態に。
その間に訪れたユーザーは「502 Bad Gateway」の表示となり、このエラーログが書かれる。
なんてことない、自滅行為だった。
対策
「return 403;」に変更する。
403だと通常のにレスポンスがあり、アクセスログに出力されます。
これにてサーバーダウン状態には当然ならない。
一件落着です。
「444」はフロントエンド側で使うコード
444はバックエンド側では絶対に使ってはいけないコードです。
アクセス拒否系は面倒がらずにフロントエンド側に設定しよう。
この点にすぐ気づけたのも、access.log・error.logが役立ちました。
いつから発生したエラーか?と探すと、原因解明は簡単。
ログを見ないと気付かない症状なので、日々ログは確認していきたい。
是非ご感想・ご指摘等をください。
管理人:parudou
単なるWEBサイト作成マニアです。
底辺法人アフィリエイター。