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を紹介させて頂きました。配信をする方ではなくて、配信技術を提供する方のお話です。
以上、貴重なお時間お読み下さいまして、誠にありがとうございます。