Syntax Error.

[Sy] 【解決】XAMPPのApacheが「This may be due to a blocked port」とエラーになって起動しない

2016/09/12

Windows 上に LAMP環境 を簡単に構築できる XAMPP ですが、Apache を起動しようとすると「Apache shutdown unexpectedly. This may be due to a blocked port」とエラーが起きて起動しない場合があります。その場合の対処についてです。

環境

  • Windows 10
  • XAMPP 5.6.23 (Windows向け)

LAMPって何? XAMPPって何?という方は

こちらに説明を書いたので、読んでみてください。

⇒ [Sy] WindowsでPHP開発環境を構築(XAMPPをインストール)する手順 | Syntax Error.

現象:コントロールパネルからApacheを起動しようとするとエラーになって起動しない

コントロールパネルを起動すると、以下のように赤文字でエラーが出る場合があります。

XAMPP Apache起動エラー

エラーメッセージにはこう書かれています。

Problem detected!
Port 80 in use by “C:\Program Files (x86)\Skype\Phone\Skype.exe” with PID 7068! Apache WILL NOT start without the configured ports free! You need to uninstall/disable/reconfigure the blocking application or reconfigure Apache and the Control Panel to listen on a different port

Problem detected!
Port 443 in use by … (以下 Port 80 の場合と同じ)

> 問題が検出されました!80番ポートが Skype.exe に使われてます。Apacheは使われていないポートが設定されてないと起動できません。ブロックしている(80番ポートを使っている)アプリケーションの、アンインストール/無効化/設定変更をするか、違うポートを使うようApacheの設定変更をコントロールパネルから行ってください。(443番ポートも同じ)

(この場合は) Skype が Apache と同じく80番ポートと443番ポートを使うため、ポートが空いてないよ!と怒られている ということですね。

なぜApacheは80番ポートと443番ポートを使いたいのか?

なんでこの「80番」と「443番」というポートに Skype も Apache もこだわってるの?と疑問に思う方もいるかもしれません。そもそもポートはいくつあるのかというと、65536個(0番〜65535番)あります。そのうち、0番〜1023番は「何に使うのか暗黙のルールで決まっている」のです。そして今回問題になっている「80番」は、インターネットなどで欠かせないHTTP(http://〜というURLを使った通信のルール)で使おう!と世界中で「暗黙的に」決まっているんです。もう一つの「443番」はHTTPS(https://〜というURLを使った通信のルール)で使うことになってます。言い換えると、SkypeはHTTPとHTTPSを使って通信しているということが予想できるわけです。・・・という感じでポートの使い方にはある程度ルールがあって、Apacheはできれば80番と443番を使いたいので初期設定がそうなっている、ということです。

このエラーを無視して、 Apache の Start ボタンを押すと、こんなメッセージが表示されて起動できません。(正常に起動した場合は、「Start」から「Stop」に表記が変わります)

Attempting to start Apache app… Status change detected: running Status change detected: stopped Error: Apache shutdown unexpectedly. This may be due to a blocked port, missing dependencies, improper privileges, a crash, or a shutdown by another method.

> Apacheを起動しています。。。 ステータス変更を検知: 起動中 ステータス変更を検知: 停止 エラー: Apache が予期せずシャットダウンしました。 このエラーは「ポートがブロックされている」「依存関係の欠落」「不適切な権限」「クラッシュ」などによるシャットダウンが原因である可能性があります。

解決方法:Apache で使うポートを変更する

このエラーを解決するには、最初のメッセージにあったように以下の2つの方法が考えられます。

  1. Apacheが使いたいポート(80番、443番)を、他のアプリケーションで使わないようにする。
  2. Apache の設定を変えて、違うポートを使うようにする。

今回は例として Skype.exe が先にポートを使っている、という場合でしたが、当然ながら 他のアプリケーションでも起こります。

なので、1つ目の解決方法はポートを先に使ったアプリケーションによって対応が変わってくるので、ここでは2つ目の Apacheの設定を変えて、違うポートを使う という方法を説明します。

Apache で使用するポートの変更 その1:HTTP(80番⇒8080番)

では設定を変更していきましょう。

Apache の設定は、httpd.confのようなxxxx.confというファイルがいくつかあって、それら全てのファイルに書かれている内容によって決まります。

その設定ファイルたちを開くには、先ほどの 「Start」ボタンの2つ右に「Config」ボタンがあるのでそれをクリック します。

するといくつかメニューが出てくるので、まずは httpd.confをクリックして、テキストエディタで開きます。

もしくは、(C:¥xamppに xampp をインストールした場合)httpd.confC:¥xampp¥apache¥conf¥httpd.confにあるので、直接テキストエディタで開いてもOKです。

XAMPP Apacheの設定ファイルを開く

httpd.confには、HTTPで使用するポートの設定が書かれている場所があるので、それを8080番に書き換えます。 この8080番という数字は特に「これじゃなきゃだめ!」というわけではないんですが、よく使われるポートの1つです。

具体的な修正箇所は、以下のとおりです。

(58行目あたり)
Listen 80
↓
Listen 8080

(220行目あたり)
ServerName localhost:80
↓
ServerName localhost:8080

これで HTTP の場合に8080番ポートを使うようになります。

Apache で使用するポートの変更 その2:HTTPS(443番⇒4433番)

続けて HTTPS 用の設定ファイルを変更していきます。

先ほどのhttpd.confを開いた手順と同じように、「Config」ボタンをクリックして、出てきたメニューから今度は httpd-ssl.confをクリックしてテキストエディタで開きます。

もしくはC:¥xampp¥apache¥conf¥extra¥httpd-ssl.confを直接開いてもOKです。(httpd.confよりも一つ深いextraフォルダの中にあるので注意)

httpd-ssl.confには、 HTTPSで使用するポートの設定が書かれている場所があるので、それを4433番に書き換えます。

修正箇所は以下です。

(36行目あたり)
Listen 443
↓
Listen 4433

(121行目あたり)
<VirtualHost _default_:443>
↓
<VirtualHost _default_:4433>

(125行目あたり)
ServerName www.example.com:443
↓
ServerName www.example.com:4433

これで HTTPS の場合に4433番ポートを使うようになります。

以上で対応は終わりです。(なお、HTTPSを使わなくてもhttpd-ssl.confの変更は必要なのでしてください)

ではちゃんと動くか確認していきましょう。

動作確認:改めて Apache を起動してみる

httpd.confhttpd-ssl.confの変更が終わったら、改めて Apache を起動してみます。

XAMPP のコントロールパネルから、 Apache の「Start」ボタンをクリックすると・・・

XAMPP Apache起動成功

起動しました!起動したかどうかの確認は以下の箇所を見てみてください。

  • 「Apache」の文字の背景色が緑になっているか?
  • Apache の 「Port(s)」のところに4433,8080と書かれているか?(Apacheで使われているポートの表示)
  • Apache の 「Start」ボタンが「Stop」ボタンに変わっているか?(失敗していたら「Start」のまま)
  • ログの最後の行が「[Apache] Status change detected: running」となっているか?(失敗していたらその後に「stopped」と出てしまう)

Apache の起動が確認できたら、ブラウザでデフォルトのページを表示してみましょう。

お好きなブラウザで、http://localhost:8080と入力してアクセスしてください。

URLを入力してアクセスすると、勝手にhttp://localhost:8080/dashboardへリダイレクトして、以下のような XAMPP のデフォルトページが表示されればOKです。

XAMPP デフォルトページをブラウザで表示

関連記事