【XAMPP】Apache起動エラーの対処(80番ポートの競合)
XAMPPでApacheを起動しようとしたとき、エラーとなる原因の一つとして「80番ポートが既に使用されている」という状況があります。
その要因と対処法について解説します。
このページはAmazonアソシエイト含むアフィリエイト広告を掲載しています。
原因はポートの競合
ウェブサーバーであるApacheは、デフォルトで80番ポートを使用するように設定されています。
しかし、起動しようとした環境で既に80番ポートが使用されている場合はエラーとなってしまうため、以下のいづれかの対応をする必要があります。
- 80番ポートを空ける(Skype)
- 80番ポートを空ける(Windows PID 4)
- Apacheで80番ポート以外を使用する
それぞれの対応方法についてみていきましょう。
80番ポートを空ける(Skype)
80番ポートの競合で、よくあるパターンとしては”Skype“(スカイプ)があります。現在はSkype以外にも様々なオンラインコミュニケーションツールがありますが、Skypeは手軽なツールとして以前から使っている方も多いのではないかと思います。
最近のアプリでは改善されたようですが、かつてのSkypeはデフォルトで80番と443番のポートを使用するように設定されているため、先にSkypeがインストール・実行されている環境へxamppをインストールすると80番ポートの競合が発生する、ということが多発していました。
古いバージョンなら設定変更が可能
そのため、古いバージョンのアプリでは[設定]>[詳細]>[接続]の中の[追加の受信接続にポート80と443を使用する]についているチェックを外すことで、Skypeが80番ポートを使用しないようにできました。
そうすることで、80番ポートの競合を防ぐことができたのです。
最近のアプリでは、この設定自体が無くなっているようですが…
あるいはSkypeが起動していなければポートも使用しないので、PC起動時の自動起動の設定を外しておくなどして、使わないときは起動しないようにしておくのも一つの手だと思います。
システムポート番号とは?
なお、ポート番号0~1023はシステムポート番号あるいはウェルノウンポート番号といって、IANAによって管理されています。
ここで、ポート番号80はHTTP・ポート番号443はHTTPSに割り当てられているため、通常は他のプロトコルで使用することはできません。
では何故、SkypeはHTTP/HTTPS用のポートを使用しているのか?
定かではありませんが、企業の中にいるとセキュリティの観点から不必要なポートで通信しないよう制限がかけられていることもあると思います。しかし、80番/443番ポートはウェブブラウジングのために開けてあることも多い、ということでそこを使うようにしちゃっていた、とかかもしれませんね。
あくまでも私見ですが…
80番ポートを空ける(Windows PID 4)
Skypeを使用していない場合でも、80番ポートが使用されていることがあります。Windowsでの確認方法と対応方法について解説します。
アプリケーションの特定
80番ポートを使用しているアプリケーションを探すため、まずはコマンドプロンプトを起動します。
コマンドプロンプトは[Windows]+[R]で「ファイル名を指定して実行」ウィンドウを表示し、”cmd”と入力して[エンターキー]を押す(または[OK]を押す)ことで起動します。
コマンドプロンプトを起動したら、下記のコマンドを実行します。
netstat -nao | find "80"
すると、大抵はプロセスID(PID)4のアプリケーションが80番ポートを使用していることが分かります。
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
実はApache起動時のエラーメッセージにも、よく読むと
Port 80 in user by "Unable to open process" with PID 4!
と、原因になっているプロセスIDが記載されていたりします。
PID4とは一体なんでしょう?
PID 4はSystemプロセス
PID4のアプリケーションを調べるため、Windows画面下部のタスクバーを右クリックし、表示されたメニューの中の[タスクマネージャー]を選択してタスクマネージャーを起動します。
詳細タブを選択してリストを確認すると、PID4は「System」が使用していることが分かります。
通常ですと、タスクマネージャー上で対象を選択した状態し、右クリックからタスクを終了できますが、「System」は終了することができません。
何故かというと、この「System」はWindows OSが管理しているプロセスだからです。こうなると強制終了はできないので、対象になるアプリケーションを直接停止するしかありません。
PID4のSystemプロセスで80番ポートを使用する可能性のあるアプリケーションを調べてみると、下記のようなものがあるということが分かります。
アプリケーション | 概要 |
---|---|
IIS(Internet Information Services) | Windows搭載のウェブサーバーソフト |
WinRM(Windows Remote Management) | Windows PowerShellを遠隔操作する機能 |
World Wide Web Publishing Service | IISの一部で、WWWサーバーとして動作するサービス |
WebMatrix | Webサイト開発環境ツール |
いくつか、関連しそうなアプリケーションがありますが、可能性が高いのは”IIS”です。何故なら、IISはMicrosoft製のウェブサーバーソフトであり、ウェブサーバーであるならば当然80番ポートを使用することになるからです。
IISの動作状態確認
まずはIISが動いていることを確認します。[スタート](Windowsマーク)を右クリックして、表示されたメニューから[コンピューターの管理]を選択します。
「コンピューターの管理」ウィンドウが開いたら、左ペインの[サービスとアプリケーション]を展開し、[インターネットインフォメーションサービス]を選択します。
するとIISの管理画面が開くので、「接続」ビューにある[(自身のPC名)]を展開して[サイト]を選択するとサイトの一覧が表示されますが、その中の[状態]が「開始済み」になっているものが現在稼働中のIISサイトということになります。
上記画像の場合は「Default Web Site」が開始済になっており、この状態だとIISというウェブサーバーが動いているため、80番ポートが使われているということになります。
[バインド]に「*:80(http)」とありますね。
IISの停止(無効化)
稼働しているサイトが分かったので、IISを停止して80番ポートを開放します。
先ほど開いたIISの管理画面で対象のサイトを選択しすると、「操作」ビューにメニューが表示されます。その中の「Webサイトの管理」にある[停止]を押すと、IISが停止して[開始]だけが活性化している状態となります。
これで80番ポートを空けることが出来ました。
80番ポートでのApache起動
ここまでの対応で80番ポートが解放されていれば、Apacheを起動することができます。
XAMPPコントロールパネルから確認してみましょう。
無事に80番(と443番)ポートを使って起動していることが分かります。
ただし、何かしらの理由でどうしても80番ポートを解放できないことがあります。
そうした場合はApacheで使用するポートのほうを変更することでApacheを起動することができますので、以下のページを参考にしてください。