読者です 読者をやめる 読者になる 読者になる

ゴミ溜め@技術系日常系雑文

主にWeb技術やそのほかつまづいたこととか引っかかって調べたこととかをまとめてます。

はてなダイアリーから引っ越しました。)

WindowsでApache(XAMPP)が動かないときはポートをチェック→やっぱだめ→何とかなった

Windows Apache XMAPP

2013/04/11加筆。
コメントにて youchanさんの紹介して頂いた記事(xamppが終了できないときの対処方法 - 初心者のメモ置き場)をみて、うっかり記載していないことがありました。
僕は原則的にXAMPPは管理者権限で起動しています。
じゃないと終了できないことが多々あるため。

2012/10/16加筆。
もう一つポート80を使う候補として、「Web Deployment Agent Service (MsDepSvc.exe)」がある。

WebMatrix で使用する Web サーバー 「IIS Express」は、IIS のようにサービスとして起動せず、さらにポート 80 をデフォルトで使用しないようになっています。しかし、WebMatrix インストール時に同時にサービスとして自動的に起動する「Web Deployment Agent Service」が IIS を前提としたサービスで ポート 80 をListen しているため、ポート 80 を使用する Web アプリでWebMatrix と共存不可能と思われるケースが存在しているようです。

スタートメニューの「コンピュータ」を右クリック→「管理」→「サービスとアプリケーション」→「サービス」
から、「Web Deployment Agent Service」を停止させる。

参考:[MEMO] WebMatrix とポート80 の関係を断つ方法 - WebMatrix の歩き方 by 武田正樹 - Site Home - MSDN Blogs ( http://blogs.msdn.com/b/web_/archive/2011/07/21/10188431.aspx )

2011/10/20加筆。
この記事はあくまで、「ポート80をIISが使用していて動かない」という対策についての話。ポート80を使うのはIISだけとは限らないことに注意しないと、(僕みたいに)はまります。
先入観て怖い。

2011/10/27加筆。
何度もApacheをStop/Startを繰り返していると、プロセスが残ったままになって、busyになってしまうことがある。コマンドプロンプトを管理者権限で起動して、「taskkill /f /im httpd.exe」でプロセスを強制終了して、Startしなおすと、ちゃんと起動する。普通に動いてはくれてるけど、これでいいのかな・・・。

PHP+MySQL+Apache+Filezillaがセットになって便利なXAMPP。

でも、windowsでいざ使おうと思っても、windowsには標準でIISなるウェブサーバが入ってるため、これが起動してるせいでポート80が使われてたり、他のソフトがポート80を使ってたりする。
ついうっかり、「新しいパソコンだ!Windows7だ!よーし、パパ、付属してるサービスやオプションも全部有効にしちゃうぞ!なんかよくわからないフリーウェアとかバンバン入れちゃうぞ!これで最強だー!」なんて言って、使いもしないIISも起動しちゃったりしてると、よくある。Apacheが動かない、そんな時、まず疑ってみるべきはポート80が他のソフトに使われていないか?というところ。

参考:XAMPPでApachが起動しない場合のわりと汎用的な調査・解決方法まとめ - ブログ:ヌルめのつぶやき

コマンドプロンプト(cmd.exe)を開き、以下を入力し、実行。

netstat -oan

このうち、今、

プロトコルローカル アドレス外部アドレス状態PID
TCP0.0.0.0:800.0.0.0:0LISTENING4

というのがいたとしたら、このPID=4とかいう奴が犯人。
次に、タスクマネージャ(Ctrl+Shift+Esc)のサービスタブを見て、PIDが4となっているやつの正式名称を調べる。
例えば、「skype.exe」だったり、「inetinfo.exe」だったりがポート80を使う常連さんらしい。
今回は「inetinfo.exe」だったらのお話。skype.exeとかだったら、そのサービス名でググってみて、出てきた情報をもとに使用するポートを変えてあげる。

inetinfo.exe=IISだったら、考えられる対処法は3通り。

  1. Apatcheを使わない(IISを使う)
  2. Apatche(あるいはIIS)の使用するポートを80以外にする
  3. IISに眠っていただいてポート80をApatcheに

方法その1については、趣旨とちょっと違うので置いておく。

方法その2 Apacheの使用するポートを80以外にする


apache\conf\httpd.confを開き、使用するポートの設定を書き換える。

まず、Apache(XAMPP)が動いていないことを確認する。
(xamppのインストールフォルダ(僕の場合はc:\xampp\))apache\conf\httpd.confをテキストエディタで開く。
大体45行目前後にある

Listen 0.0.0.0:80
あるいは
Listen [::]:80

の先頭に # をつけて、コメントアウトする。
代わりに

#Listen 0.0.0.0:80
#Listen [::]:80
Listen 8080

のように、使用するポートを書き換える。「8080」が設定したポート番号。
前述のnetstatで、使用していないポートを確認しておく。

上書き保存したら、Apache(XAMPP)を起動。
(XAMPP使用の場合、Apacheの状態が「Running」になっているかもチェック。)
ブラウザで、

http://localhost:8080

にアクセスしてみて、ちゃんと初期画面が表示されることを確認する。

方法3 IISを使わない


使わないものは切りましょう。
IISを切るには、

コントロールパネル > プログラムと機能 > Windows の機能の有効化または無効化

から、「インターネット インフォメーション サービス」のチェックを外してあげればOK。
(「よーし、パパ全部のサービス有効にしちゃうぞ!」的なノリで有効にしたわけではないのに有効になっていた場合、何らかの理由があって有効にしているはずなので注意。)

一度PCを再起動して、もう一度、コマンドプロンプト(cmd.exe)を開き、以下を入力し、実行。

netstat -oan

0.0.0.0:80がいなければ、OK。危機は(たぶん)去った。

Apache(XAMPP)を起動して、
ブラウザで、

http://localhost

にアクセスしてみて、ちゃんと初期画面が表示されることを確認する。
Apache(XMAPP)起動後にnetstatから0.0.0.0:80を見てみると、ちゃんとApacheがポート80を使っているのがわかる。

2011/10/20加筆

しばらく普通に動いていたのだけど、どうしてもapacheがbusyになってしまって、ほとほと困っていた。
tasklistでポート80を使っているサービスを調べても、当該のPIDのイメージ名は「system」としか表示されないし。
で、通信を行いそうな常駐ソフトを見てみることにした。
Dropboxが居たので、タスクバーのアイコンを右クリック→設定→プロキシ→プロキシ設定を、「自動検出」から「プロキシを使用しない」にしたところ、無事動いた。
もちろん、全てのケースにおいてこれが原因ではないとも言い切れないし、Dropbox使用環境によってはプロキシを使用しないと同期できない場合もある。

まあ何にせよ動いたのでよしということで。

以上でした。