【XAMPP】Apacheが起動しない原因と解決方法|ポート80競合の特定と変更手順

XAMPPのコントロールパネルでApacheを起動しようとすると、「Attempting to start Apache app...」と表示されたまま起動できない――これは多くの場合、ポート80(または443)が他のソフトに使われていることが原因です。この記事では、原因の特定から具体的な解決手順までを、実際に打つコマンド付きで解説します。

この記事の結論:まず netstat -ano | findstr :80ポート80を占有しているプロセスを特定します。犯人(IIS・VMware・Skype旧版など)を止めるか、それが難しければApache側のポートを80→8080に変更すれば起動できます。
スポンサーリンク

まずはエラーログで原因を確認する

XAMPPコントロールパネルのApache行にある「Logs」→「Apache (error.log)」を開くと、起動に失敗した具体的な理由が出ています。ポート競合なら次のような行が見つかります。

error.log に出る典型的なメッセージ
(OS 10048)通常、各ソケット アドレスに対するプロトコル、ネットワーク アドレス、
またはポートの使用は 1 つに限られています。 : AH00072: make_sock: could not bind to address 0.0.0.0:80
AH00451: no listening sockets available, shutting down
コントロールパネル右側の「Netstat」ボタンでも、どのポートをどのプロセスが使っているか一覧で確認できます。「Port 80 … PID …」の行を探してください。

ポート80を使っているプロセスを特定する

コマンドプロンプト(またはPowerShell)で次のコマンドを実行すると、ポート80を使っているプロセスのPID(末尾の数字)が分かります。

ポート80の占有を調べる
netstat -ano | findstr :80

表示された一番右の数字がPIDです。そのPIDから、どのアプリが原因かを調べます。

PIDからプロセス名を調べる(例: PIDが1234の場合)
tasklist | findstr 1234
よくある占有元 対処
IIS(W3SVC / PID 4 の System) 「World Wide Web Publishing Service」を停止
VMware(多くは443) VMware関連サービスを停止、または443を変更
Skype(旧バージョン) 設定で「ポート80/443を使う」をオフ
SQL Server Reporting Services 該当サービスを停止
netstatの読み方(接続状態・PID・プロセス特定)はnetstatコマンド完全ガイド、PowerShellでの確認は特定のポートが開いているかチェックする方法で詳しく解説しています。

IIS(World Wide Web Publishing Service)を止める

占有元がIISの場合、管理者権限のコマンドプロンプトで次を実行するか、「サービス」(services.msc)から「World Wide Web Publishing Service」を停止します。

IIS関連サービスを停止(管理者権限)
net stop was /y

停止後、再度XAMPPからApacheを起動してみてください。常時IISを使わないなら、サービスのスタートアップの種類を「手動」にしておくと再発を防げます。

占有元を止められない場合はApacheのポートを変更する

競合相手を止められない(業務で必要など)場合は、Apache側のポートを80から8080などに変更します。XAMPPコントロールパネルの「Config」→「Apache (httpd.conf)」を開き、次の2か所を書き換えます。

httpd.conf の変更(80 → 8080)
Listen 8080
ServerName localhost:8080

443(SSL)も競合している場合は、「Config」→「Apache (httpd-ssl.conf)」でListen 443<VirtualHost _default_:443>4433 などに変更します。保存したらApacheを起動し、ブラウザでは http://localhost:8080/ のようにポート番号を付けてアクセスします。

WordPressをインストール済みの場合はポート変更に注意します。サイトURL(localhost)を前提に保存されているため、ポートを変えると管理画面のリダイレクトやリンクが崩れることがあります。可能なら競合相手を止めて80番のまま使う方が安全です。

それでも起動しないときの確認ポイント

  • 管理者として実行:XAMPPコントロールパネルを右クリック→「管理者として実行」
  • セキュリティソフト/ファイアウォール:Apacheの通信がブロックされていないか確認
  • PCの再起動:一時的にポートを掴んだままのプロセスは再起動で解放されることが多い
  • httpd.confの構文ミス:直前に設定を編集した場合、error.logに構文エラーが出ていないか確認
ApacheではなくMySQLが起動しない(ibdata1関連の「Table doesn’t exist in engine」など)場合はibdata1破損でTable doesn’t exist in engineエラーの復旧方法を参照してください。

よくある質問(FAQ)

QApacheが起動しない一番多い原因は何ですか?
Aポート80(または443)の競合です。IISやVMware、旧Skypeなどがポートを使っていると、Apacheがそのポートを確保できず起動に失敗します。netstat -ano | findstr :80 で占有プロセスを特定するのが第一歩です。
Qnetstatで出たPIDのアプリが分かりません。
Atasklist | findstr PID番号 でプロセス名を調べられます。タスクマネージャーの「詳細」タブでPID列を表示して照合する方法もあります。PIDが 4(System)の場合はIISやHTTP.sys関連が多いです。
Qポートを8080に変えたらアクセスできなくなりました。
Aポートを変更したら、ブラウザでは http://localhost:8080/ のようにポート番号を付けてアクセスする必要があります。WordPressなどURLを保持するアプリでは不具合が出ることがあるため、可能なら競合相手を止めて80番のまま使うのがおすすめです。
Q一度直してもまた起動しなくなります。
AIISなど競合サービスがPC起動時に自動で立ち上がっている可能性があります。services.msc で該当サービスのスタートアップの種類を「手動」に変更すると、再発しにくくなります。

まとめ

XAMPPでApacheが起動しないときの対処を整理します。

  • まずerror.logNetstatボタンで原因を確認
  • 最頻原因はポート80/443の競合
  • netstat -ano | findstr :80 で占有プロセスを特定して停止
  • 止められないなら httpd.conf でポートを8080などに変更
  • 管理者実行・セキュリティソフト・PC再起動も確認する

関連として、netstatコマンド完全ガイドポートが開いているかチェックする方法MySQL(ibdata1)が起動しないときの復旧方法もあわせて参考にしてください。