投稿アップデート情報 追記(12/20) 追記2(12/25) 追記3(2012/1/2) …… 追記6(8/11)
本家のお世話-#13。で導入したZoneAlarm10だけど,むかーし使っていたのとだいぶUIが変わっていて,どうも使いにくいなぁ。
まぁ,ボヤキは置いておいて,Apacheの再導入から始める。PHP5.3.6以降の関係があるので,ApacheはApache Loungeに行って,httpd-2.2.21-win32-x86-ssl.zipを落としてきた。apache.org版と違い,Apache Lounge版はMSIじゃなくてzip。今回は前のファイルをきれいさっぱり削除したので,地道に一からやらないといけない。ただし,Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)のインストールは,済んでいる。
- まず,httpd-2.2.21-win32-x86-ssl.zipを展開する。
- こののち,apache.org版使用にもどることがあるかもしれないので,フォルダ名をorg版に合わせて,置き場所もProgram Filesにする。<<—この辺は好き好き。
- httpd.confのカスタマイズ。
- ServerRootを2.でファイルを置いた場所に変更。
- <IfModule mpm_winnt_module>
Win32DisableAcceptEx
</IfModule>
はどうしようかな。
後で
[warn] (OS 64)指定されたネットワーク名は利用できません。
[warn] (OS 121)セマフォがタイムアウトしました。
が出たときに追加するかなと思いつつも,一応入れておく。
- ServerAdmin のメールアドレスを自分のものに変更。
- ServerName をlocalhost:80に変更。
- DocumentRoot を”G:/WEB/example” に変更。
- DocumentRoot に合わせて,<Directory “G:/WEB/example”> に変更。
- インデックスファイルを置き忘れたときに,ディレクトリ内がさらされることのないように,Options Indexes FollowSymLinks をOptions FollowSymLinks に変更。
- .htaccessが使えるように AllowOverride None を AllowOverride directive-type に変更。directive-typeに使えるキーワードについては,AllowOverride ディレクティブを参照のこと。
- DirectoryIndex に index.php を追加。
- ScriptAlias を “G:/WEB/cgi-bin/” に変更。
- ScriptAlias に合わせて,<Directory “G:/WEB/cgi-bin”> に変更。
- 一応,手動でApacheのテストラン。コンソール(=コマンド プロンプト)を開き,httpd.exe のあるディレクトリに移動。
>httpd.exe
ところが,コンソール上に[notice] Disabled use of AcceptEx() WinSock2 APIが表示され,以下のように同じエラーがWindowsのイベントログにも出る。
————————————————————————————————————————-
イベントの種類: エラー
イベント ソース: Apache Service
イベント カテゴリ: なし
イベント ID: 3299
日付: xxxx/xx/xx
時刻: xx:xx:xx
ユーザー: N/A
コンピュータ: xx
説明:
The Apache service named reported the following error:
>>> [xxx xxx xx xx:xx:xx xxxx] [notice] Disabled use of AcceptEx() WinSock2 API
詳細な情報は、http://go.microsoft.com/fwlink/events.asp の [ヘルプとサポート センター] を参照してください。
————————————————————————————————————————-
これは,Apacheとしては[notice]なんで,confのカスタマイズのときに入れたWin32DisableAcceptExが効いていれば起動時のログに出るのとイベントログにエラーが出るのは正常だけれども,イベントログにエラーで出るそれでクラッシュするのが変。で,下記のようにコメントアウトして,Apacheを再起動してみた。
#<IfModule mpm_winnt_module>
#Win32DisableAcceptEx
#</IfModule>
また,エラー。今度はソケットが使えない旨のエラーで,イベントログにもエラーとして記録されている。
————————————————————————————————————————-
イベントの種類: エラー
イベント ソース: Apache Service
イベント カテゴリ: なし
イベント ID: 3299
日付: xxxx/xx/xx
時刻: xx:xx:xx
ユーザー: N/A
コンピュータ: xx
説明:
The Apache service named reported the following error:
>>> (OS 10048)通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます。 : make_sock: could not bind to address 0.0.0.0:80
詳細な情報は、http://go.microsoft.com/fwlink/events.asp の [ヘルプとサポート センター] を参照してください。
————————————————————————————————————————-
いろいろ調べてみたら,どうもWinSockがおかしいみたい。というわけで,「Windows Server 2003、Windows XP、および Windows Vista で Winsock2 の破損を確認して回復する方法」というページを参考にやってみた。まずは,コンソールから netsh winsock reset を打ってみたんだけど,どうもよくならない。
で次は,Microsoft Fix it 50203を使ってみたが,よくならない。結局,「手順 1: 破損したレジストリ キーを削除する」「手順 2: TCP/IP をインストールする」までやったら,ようやくノーエラーで起動できるようになった。
何が原因かよくわからないが,WinSockのリセットでは「ウイルス対策、ファイアウォール、プロキシ クライアントなどに悪影響が生じるおそれがあります。」という記載があるから,逆も真なりで,ファイアウォールをZoneAlarm10にしたことが引き起こしたことかもしれない。
ところで,初めのほうのDisabled use of AcceptEx() WinSock2 APIのエラーがイベントログに残ることについては,Winsockの破損とは,関係ないかもしれない。kazenokakasiさんが「Apache2.2.17で変更有り。」という記事を書いておられるのに,ググっているときに気づいた。 今日気づいたのだが,kazenokakasiさんのところは直リン禁止ということらしい。リンクからでは記事が読めなかった。ブラウザのアドレスバーにhttp://sitifukuzin.com/blog/?p=6021を記入して跳んでほしい。 追記4(2/15)
今のWindows上のApacheには,
<IfModule mpm_winnt_module>
Win32DisableAcceptEx
</IfModule>
はいらないみたいだね。(12/25 消し線追加)
- 無事起動するようになったので,サービスとして登録する。コンソールでhttpd.exe のあるディレクトリに移動し,
>httpd.exe -k install
Windowsのサービス一覧でちゃんと登録されていることを確認。ApacheMonitorのショートカットを,スタートメニューのスタートアップに追加する。
(注) Apacheのサービスの状況はタスクトレイのApacheMonitorのアイコンで確認できる。Start/Restart/Stop もここからできる。
- まあ,一応, http://localhost/ は確認しておいたほうがいい。もちろんドキュメントルートに index.html を作って入れておかないと,下記が表示されちゃうよ。
Forbidden
You don’t have permission to access / on this server.
書き忘れたが,httpd.confで使用している /WEB/example , /WEB/cgi-bin なんかは,該当場所に作っておかないと,Apacheがディレクトリがないよと言ってくるので,注意。
追記(12/20): 大事なことを書き忘れていた。
本家のお世話-#13。で導入したZoneAlarm10なんだが,重大な不具合があって使うのを止めた。どんな不具合かというと,Apacheを停止するとWindowsが勝手に再起動するというものだ。だいたい,一般クライアント用のファイアーウォールソフトをサーバ用に使おうというところに無理があるのはわかっているが,ウィルスバスターといいZoneAlarm10のFree版といい,ベンダ側はクライアント用のものはサーバ用としては使わせない方向で動いているようだ。ネットのマルウェアがどんどん進化しているせいだろうか。
ZoneAlarm10の使用を止める前に一応努力はしてみた。
apacheのメーリングリストでは,
linux の watchdog の機能と同じようなものが ZoneAlarm Free 10 にもついているのではないか。
という示唆をいただいた。検証してみると,Apacheが正常に停止せずpidファイルが残った場合は再起動が起こらないので,ZoneAlarm Free 10 にも同様の機能がついてそうだという感触を得た。他に,違うファイアウォールソフトを使った方がいい,あるいは,ZoneAlarmのサポートに聞いてみたほうがいいという意見もいただいた。使おうとしていた ZoneAlarm10 がFree版だったので,問い合わせは躊躇していたのだが,http://forums.zonealarm.com/ で調べてみたら,Zone Alarm Apache shut down conflictという書き込みがあった。それに対するモデレータの回答があって「サーバソフトのサポートはしていないので,他のセキュリティソフトを探してください」というものだった。
ということなので,ZoneAlarm10 Free Firewall をサーバのファイアーウォールとして使うことは断念した。
追記2(12/25):
今朝のログに
[warn] (OS 64)指定されたネットワーク名は利用できません。
[warn] (OS 121)セマフォがタイムアウトしました。
が出ていたので,やはり
<IfModule mpm_winnt_module>
Win32DisableAcceptEx
</IfModule>
を復活することにした。
追記6(2013/8/11):
中途半端な場所に追記(汗)。
現時点でも,下記なしだと頻繁にハングが起こる。メッセージは,
「(OS 64)指定されたネットワーク名は利用できません。」
Apache2.4から,Win32DisableAcceptExの代わりにAcceptFilter Noneを使うことになったので,
<IfModule mpm_winnt_module>
AcceptFilter http none
</IfModule>
を入れている。
追記3(2012/1/2):
検索キーワードで「httpd-2.2.21-win32-x86-ssl.zipがダウンロードできない」というのがあって,なんだろうなとLoungeを見に行ったら,Apache 2.3.16 Release Candidateなんぞがあって,大分ページの雰囲気が変わっているし,表記が,httpd-2.2.21-win32-x86-ssl.zipじゃなくて,httpd-2.2.21-win32.zipになっている。「初めて落とすときは悩むよな」ということで,追記。
名称としてhttpd-2.2.21-win32-x86-ssl.zipはなくなっているので,代わりとしてはApache 2.2.21 Stableのhttpd-2.2.21-win32.zipを落とせばO.K.です。
追記5(4/11):
Apache導入についての新しい記事を,本家のお世話-#28。,本家のお世話-#29。に書いた。