Nginx 再起動時に発生したポートオープンエラーの対策

Nginxの再起動を行ったら、ポートが開けないので再起動できないとメッセージが表示されました。その対策です。

Restarting nginx nginx                                                                           nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()

対策

ポート80が既に使われていると表示されているので、ポート80の使用状況を確認します。nginxが使っているようです。

$ sudo lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 17347 root 6u IPv4 530624621 0t0 TCP *:http (LISTEN)
nginx 17350 www-data 6u IPv4 530624621 0t0 TCP *:http (LISTEN)
nginx 17350 www-data 13r IPv4 530968512 0t0 TCP
nginx 17350 www-data 14u IPv4 530968513 0t0 TCP

Nginxを停止します。

$ sudo service nginx stop

再度、ポート80の使用状況を確認します。何故かまだ動いているNginxがあるようです。

$ sudo lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 17347 root 6u IPv4 530624621 0t0 TCP *:http (LISTEN)
nginx 17350 www-data 6u IPv4 530624621 0t0 TCP *:http (LISTEN)

強制的にKillします。

$ sudo kill 17347

Nginxを再起動します。無事に動作しました。

$ sudo service nginx restart
Restarting nginx nginx [ OK ]

原因

詳しくは分かりませんでしたが、Nginxをアップグレードした直後の再起動だったので、意図せずNginxが多重起動してしまったのかもしれません。