Nginxエラーの解決方法: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

beginner🌐 Networking2026-07-20| Ubuntu、Debian、CentOS、RHEL、または Nginx を実行しているすべての Linux ディストリビューション。

Error Message

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
#nginx#linux#devops#troubleshooting#sysadmin

エラーメッセージ

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] still could not bind()

原因について

Linux のネットワーク制御は厳格です。一度に特定のポートを使用できるアプリケーションは1つだけです。ポート80は HTTP トラフィックの標準的な経路です。Nginx がその経路を開こうとしたときに、すでに他のプロセスが使用している場合、起動を断念します。

通常、原因(占有者)は以下のいずれかです。

  • クラッシュ後に正常に終了しなかった、ゴースト化した Nginx プロセス。
  • バックグラウンドで実行中の Apache (httpd)(新規 VPS インストール時によく見られます)。
  • ホストのポート80をコンテナにマッピングしている Docker コンテナや Node.js アプリ。
  • 設定ファイル内での listen 80; ディレクティブの重複。

ステップ1:原因の特定

現在ポートを占有しているプロセス ID (PID) を見つける必要があります。最近の Linux システムでは、ss コマンドを使用するのが最も早い方法です。

ss を使用する場合(推奨)

sudo ss -tulpn | grep :80

以下のような出力が表示されます。

tcp  LISTEN  0  511  *:80  *:*  users:(("apache2",pid=1234,fd=4))

lsof を使用する場合

lsof を使用したい場合は、以下のコマンドを実行します。

sudo lsof -i :80

COMMAND 列と PID 列を確認することで、原因を特定できます。例えば、PID 1234apache2 が表示されていれば、それがボトルネックです。

ステップ2:競合プロセスの停止

名前または PID が判明したら、Nginx のためにパスを解放する必要があります。

Apache またはその他のサービスを停止する

Apache がポートを占有している場合は、停止した上で、再起動後に自動実行されないよう無効化します。

# Ubuntu/Debian の場合
sudo systemctl stop apache2
sudo systemctl disable apache2

# CentOS/RHEL の場合
sudo systemctl stop httpd
sudo systemctl disable httpd

孤立した Nginx プロセスの強制終了

Nginx がハングアップし、「ゾンビ」プロセスが残ることがあります。以下のコマンド1つで、すべての Nginx 関連タスクを強制終了できます。

sudo killall -9 nginx

注意:このコマンドは状態を保存せずにすべての Nginx プロセスを即座に終了させます。

ステップ3:設定の監査

他のソフトウェアがポート80を使用していない場合、Nginx の設定自体が競合している可能性があります。これは多くの場合、/etc/nginx/sites-enabled/ 内の2つの異なるサイト設定ファイルが、どちらも default_server を指定しようとしたときに発生します。

まず、構文エラーがないか確認します。

sudo nginx -t

設定ディレクトリ内で、ポート80の宣言が重複していないか検索します。以下のコマンドを実行して、そのポートを使用しようとしているすべてのファイルを確認します。

grep -r "listen 80" /etc/nginx/sites-enabled/

同じ IP とポートの組み合わせにバインドしようとしているブロックが複数存在しないことを確認してください。

ステップ4:Nginx の起動

ポートが解放されれば、Nginx は問題なく起動するはずです。

sudo systemctl start nginx

確認

ステータスを再確認して、起動状態を維持しているか確かめます。緑色のテキストで active (running) と表示されるはずです。

sudo systemctl status nginx

また、現在 Nginx がポートを所有していることを確認できます。

sudo ss -tulpn | grep :80

今後のためのヒント

  • Apache のアンインストール: 不要な場合は、sudo apt purge apache2 を実行することで、自動起動を完全に防ぐことができます。
  • Docker の確認: Docker を使用している場合は、docker ps を確認してください。-p 80:8080 のようにマッピングされたコンテナは、ホストの Nginx をブロックします。
  • テストの自動化: Nginx を再起動する前に、必ず nginx -t を実行してください。これにより、単純なタイポによるダウンタイムを防ぐことができます。

Related Error Notes