Nginx_HowToRecover

EveryDaySoft代表の永田です。

自社開発の検証で、動画配信のサーバー接続のテスト環境にNginxサーバーを使用しています。

今回はNginxが異常終了をして、起動、再起動も、ストップもできない事象の回復方法を記載します。

ネット情報の一つのコマンドでは治らない。複数のコマンドでの復旧が必要です。

まず異常終了から抜け出せない場合のログ

nginx: [emerg] bind() to 0.0.0.0:1935 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:1935 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:1935 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:1935 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:1935 failed (48: Address already in use)
nginx: [emerg] still could not bind()
nginx: [error] open() "/usr/local/var/run/nginx.pid" failed (2: No such file or directory)

回復方法は、ゴースト状態になったプロセスを可視化。

sudo lsof -i | grep nginx
か
sudo lsof -i:1935
など

ゴーストプロセスをkill

sudo kill -9 (pidの番号)

このコマンドで、nginx.pidがnull状態にある階層、ファイルを検索できます。ある場合は、nginx.pidを削除して大丈夫です。削除して再度作成。

find / -name nginx.pid 2>/dev/null
sudo mkdir -p /usr/local/var/run/ ln -s /current/path/to/pid/file /usr/local/var/run/nginx.pid

このコマンドでエラーがでなかったら、サーバー起動成功です。

#起動  $ sudo nginx 

#停止  $ sudo nginx -s stop 

#再起動 $ sudo nginx -s reload

また、RTMPも少し確認したかったので、確認方法は、WiresharkでLoopbackの項目を見ると、RTMPの接続状況が確認できます。

RTMP接続は接続仕様が共通項目なので、画像のように確認できます。これでクライアントの実装があっていれば、通信レスポンスを確認できるということです。HLS方針を注力するのですが、2021年のRTMPの使用されている状況、動向も確認後、RTMPに関しては検討を考えています。

配信系の環境構築Tipsを紹介させて頂きました。配信をする方ではなくて、配信技術を提供する方のお話です。

以上、貴重なお時間お読み下さいまして、誠にありがとうございます。