[Sy] 【解決】XAMPPのApacheが「This may be due to a blocked port」とエラーになって起動しない
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を起動しようとするとエラーになって起動しない
コントロールパネルを起動すると、以下のように赤文字でエラーが出る場合があります。
エラーメッセージにはこう書かれています。
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 portProblem 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つの方法が考えられます。
- Apacheが使いたいポート(80番、443番)を、他のアプリケーションで使わないようにする。
- 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.conf
はC:¥xampp¥apache¥conf¥httpd.conf
にあるので、直接テキストエディタで開いてもOKです。
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.conf
とhttpd-ssl.conf
の変更が終わったら、改めて Apache を起動してみます。
XAMPP のコントロールパネルから、 Apache の「Start」ボタンをクリックすると・・・
起動しました!起動したかどうかの確認は以下の箇所を見てみてください。
- 「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です。