parudou
parudou
parudou
更新日:2018/10/29

Nginxのエラーログ「no live upstreams while connecting to upstream」の原因と対策(ロードバランサ)

Nginxをロードバランサとして使っています。
そのフロント側はエラーログなんてほとんど出ないのですが、
急に「no live upstreams while connecting to upstream」が出だした。

この対策方法を語ります。

このエラーログを対策

2018/10/20 02:14:14 [error] 26758#26758: *131598822 no live upstreams while connecting to upstream, client: xx.xxx.xxx.xxx, server: , request: “GET /archives/10 HTTP/1.1”, upstream: “http://backend/archives/10”, host: “parudou3.com”

サーバー名も無く、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サイト作成マニアです。
底辺法人アフィリエイター。
Twitterはこちら

日記はパルどうSEOブログ

Copyright (c) parudou All Rights Reserved.