投稿アップデート情報 追記3(4/28) 追記4(5/2) 追記5(11/10) 追記6(2013/1/3)
Apache Loungeで,Apache2.4.x系ステイブルが出た(VC10版は,6 Apr ’12 だけど,VC9版は,7 Apr ’12 になっている。UTCで,です。)ので,早速アップグレードに取り組んでみることにした。ただし,さすがに稼働中のサーバ上では危なすぎるので,ひとまず,ローカルに仮構築。
完了後は,以下のようになる。
- WindowsXP Pro SP3(x86)
- Apache2.4
- MySQL5.5
- ActivePerl5
- PHP5.4
≪注意≫ ローカルの構築なので,アップロード作業がすっぽり抜けている。ここを参考に実際のサーバをリモート場所に構築しようと思う方は,ファイルの書き換え後の更新アップロードを忘れないようにしてください。
さて,Apache2.4.x系のインストールから。
- httpd-2.4.2-win32.zip と httpd-2.4.2-win32-VC9.zip のどっちを使うかなと思ったが,後者はMicrosoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86)をインストールしなくていいようなので,こちらを使うことにする。httpd-2.4.2-win32-VC9.zipをダウンロード。
- httpd-2.4.2-win32-VC9.zip を展開する。展開ファイル中のReadMe.txtに,「Upgrading to 2.4 from 2.2とOverview of new features in Apache HTTP Server 2.4を参照せよ」とあったので,一応見に行った。
Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)のインストールは必須であるが,今回の環境においては既に済んでいる。 - httpd.conf のカスタマイズから行う。
- ServerRoot は,Program Files下に変更せず,デフォルトのまま(つまり,c:/Apache24)。自鯖は,WindowsXPなので問題ないが,Windows7あたりでは,UAC(User Account Control)の関係でいろいろと不具合を聞くので,この際今後のことを考えて,デフォルトのままの設定で行こうと思う。
- ServerAdmin <管理者のメールアドレス> に変更。
- ServerName <DNS name>:80
- カスタマイズには関係ないが,以下のところに注意。Apacheのインストールが初めてなら何も思わないだろうが,ここはRun-Time Configuration の変更に伴って書き方の変わったところのひとつだ。ただし,旧の書き方をしている場合でもmod_access_compatによって,下位互換が実現されるらしい。モジュールのところを見ると,
LoadModule access_compat_module modules/mod_access_compat.so
はデフォルトで有効になっており,モジュール群のうち一番初めにロードされるようになっている。新しい書き方は,以下の通り。
<Directory />
AllowOverride none
Require all denied
</Directory>Apache2.2では,以下のようになっていた。
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory> - DocumentRoot “c:/Apache24/htdocs” —>> DocumentRoot “G:/WEB/example”
<Directory “c:/Apache24/htdocs”> —>> <Directory “G:/WEB/example”> - Options Indexes FollowSymLinks —>> Options FollowSymLinks
- AllowOverride None —>> AllowOverride directive-type
directive-typeに使えるキーワードについては,AllowOverride ディレクティブを参照のこと。 - 自鯖の場合は,rotatelogsを使って,ログを取っているので,
ErrorLog “logs/error.log” —>> ErrorLog “|bin/rotatelogs -l -f logs/error.%Y-%m-%d 86400”
アクセスログに関しては,AWStatsの関係上commonではなくcombinedを使うので,
CustomLog “logs/access.log” common —>> コメントアウト
CustomLog “logs/access.log” combined —>> アンコメント
し,さらに,
CustomLog “logs/access.log” combined —>> CustomLog “|bin/rotatelogs -l -f logs/access.%Y.%m.%d 86400” combined env=!no_log
no_logについては,「本家のお世話-#4。」参照。ちょっと下に書いてあるが,テストランの結果,|bin/rotatelog は |bin/rotatelog.exe でないと動かないことが判明。使う場合は必ず拡張子をつけてください。
- これも,カスタマイズとは関係ないが,
# Configure mod_proxy_html to understand HTML4/XHTML1
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>
が追加されている。
- ディレクトリ Apache24 を,そっくり C:直下に移動する。
- コマンドプロンプトを起動し,Apache24bin に移動して,テストラン。httpd.exe[Enter]
(OS 2)指定されたファイルが見つかりません。 : AH00089: Couldn’t start ErrorLog p
rocess ‘bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M’.
AH00015: Unable to open logs
というエラーが出る。パイプがうまく働いていないのかと思って,
ErrorLog “C:/Apache24/bin/rotatelogs -l -f C:/Apache24/logs/error.%Y-%m-%d 86400”
にしてみた。今度は,
AppName: httpd.exe AppVer: 2.4.2.0 ModName: msvcr90.dll
ModVer: 9.0.30729.6161 Offset: 0003bdbc
が出る。いろいろ試してみて,正解はなんと rotatelogs.exe だった。つまり,2.2.22 までは拡張子なしで通っていたのだが,2.4.2 では .exe まで書かないとダメってこと。
つまり, ErrorLog “|bin/rotatelogs.exe -l -f logs/error.%Y-%m-%d 86400″ でO.K.
えーーーーーーーーっ。こんなにハマったのに!!(号泣) - 気を取り直して,サービスとして登録。
httpd.exe -k install
使い勝手のために,ApacheMonitor.exe のショートカットを作り,スタートアップフォルダに入れておく。 - ドキュメントルートに,Apache24/htdocs にある index.html をコピーし,ブラウザから,http://localhost/ を確認,無事「It works!」が表示された。
MySQL5.5 をインストールする。
- MySQL Community Server から,mysql-5.5.22-win32.msi をダウンロード。
えーっと,今気が付いたんだが,「JavaScript 有効」にしておくと「» No thanks, just take me to the downloads!」というリンクが表示され,これをクリックすると,各ミラーがわかるって形なのねぇー。いつものPCは,「JavaScript 無効」なので知らなんだ。 - インストール方法は,mysql-5.5.18-win32.msi と全く同じ。(MySQLの再導入を参照)
次に,ActivePerl 5 をインストールする。
- ActivePerl-5.14.2.1402-MSWin32-x86-295342.msiをダウンロードする。
途中に,チェックボックスがあるがすべてデフォルトのままでインストール。 - コマンドラインから, perl.exe -v[Enter]で,バージョンなどが表示されれば,インストール成功。pathも通っている。
- Apache の httpd.conf を開き,
ScriptAlias /cgi-bin/ “c:/Apache24/cgi-bin/” —>> ScriptAlias /cgi-bin/ “G:/WEB/cgi-bin/”
<Directory “c:/Apache24/cgi-bin”> —>> <Directory “G:/WEB/cgi-bin”>
この後のところも,Run-Time Configuration の変更に伴い書き方が変わっている。
cgi-bin 以外のディレクトリで CGI スクリプトを使う気がある場合は, #AddHandler cgi-script .cgi をアンコメントし,場合によっては .pl を追加するなどする必要がある。
自鯖では,そのつもりがないのでデフォルトのまま。 - G:/WEB/cgi-bin に,Apache24/cgi-bin にある printenv.pl をコピーし,テキストエディタで1行目を perl.exe の場所に書き換える。
#!D:/programs/perl/bin/perl.exe —>> #!c:/perl/bin/perl.exe - Apacheを再起動後,ブラウザから,http://localhost/cgi-bin/printenv.pl を確認。環境が表示されれば,成功。 printenv.pl は削除しておく。
さて,PHP5.4のインストールに入る。Apache2.4.xとの連携はうまくいくだろうか。ここのブログを読んでくれてる方はご存知の通り,アップデートに失敗したまま,放置プレイである。もっとも,うまく動いてくれるかどうかのチェックは,仮構築では無理な気がする。本鯖の場合も,短時間の稼働ではエラーは出なかったし。
- http://windows.php.net/ からphp-5.4.0-Win32-VC9-x86.zipをダウンロードし,ファイルを展開する。
- 展開ファイル内の php.ini-production を php.ini にリネームし,下表のようにカスタマイズ。
デフォルト カスタム 1 ;default_charset = "UTF-8" default_charset = "UTF-8" 2 ; extension_dir = "ext" extension_dir = "(ドライブ文字):PHPext" 3 allow_url_fopen = On allow_url_fopen = Off 4 ;extension=php_curl.dll extension=php_curl.dll 5 ;extension=php_gd2.dll extension=php_gd2.dll 6 ;extension=php_mbstring.dll extension=php_mbstring.dll 7 ;extension=php_mysql.dll extension=php_mysql.dll 8 ;extension=php_mysqli.dll extension=php_mysqli.dll 9 ;extension=php_openssl.dll extension=php_openssl.dll 10 ;date.timezone = date.timezone ="Asia/Tokyo" 11 ;sendmail_from = me@example.com sendmail_from = 自分のメールアドレス 12 ;mbstring.language = Japanese mbstring.language = Japanese 13 ;mbstring.internal_encoding = EUC-JP mbstring.internal_encoding = UTF-8 14 ;mbstring.http_input = auto mbstring.http_input = pass 15 ;mbstring.http_output = SJIS mbstring.http_output = pass 16 ;mbstring.encoding_translation = Off mbstring.encoding_translation = Off 17 ;mbstring.detect_order = auto mbstring.detect_order = UTF-8,ASCII,SJIS,EUC-JP,JIS 18 ;mbstring.substitute_character = none mbstring.substitute_character = none 14-18 に関しては,デフォルトのままでも動くと思う。特に,17に関しては,自鯖の環境でこうしているので,参考にされる場合は各自対処してください。
- 展開時のフォルダ名を PHP にリネームし,そっくり C:直下に移動する。
- Apacheが2.4.x になったので,php5apache2_x.dll が変更になる。Apache Lounge から php5apache2_4.dll-php-5.4-win32.zip をダウンロードし,展開後,出来たディレクトリ内の php5apache2_4.dll を PHP 直下に移動する。
PHP5.4.10 から php5apache2_4.dll も PHP のオフィシャルバイナリに
同梱されるようになった(12/28追記) - php5apache2_4.dll に同梱の ReadMe.txt に従い,Apache の httpd.conf の LoadModule の一番最後に
LoadModule php5_module “c:/php/php5apache2_4.dll”
を追加。PHP のインストールディレクトリ名について,大文字,小文字が入り乱れているが,Windowsは大小を区別しないので,無問題。気になる場合は,自分のインストール環境にそろえてください。
AddHandler application/x-httpd-php .php
PHPIniDir “C:/PHP”
については,httpd.conf の末尾に以下の形で追加。
<IfModule mod_php5.c>
AddHandler application/x-httpd-php .php
PHPIniDir “C:/PHP”
</IfModule>
AddType application/x-httpd-php .php だったのが, AddHandler application/x-httpd-php .php となっている。今まで,AddType と AddHandler の違いなんて考えたこともなく,どこかで見かけた通りに設定してきたが, AddType と AddHandler を読んでみると, AddHandler の方が妥当なようだ。
<IfModule mod_php5.c> と </IfModule> で挟むのは,Apache モジュール mod_so の書き方が変わっていないので,あったほうがいいかなという程度。 - Apache の httpd.conf の
DirectoryIndex index.html —>> DirectoryIndex index.php index.html - テキストエディタで,<?php phpinfo() ?> を記入した test.php を作り,ドキュメントルートにコピー。Apacheを再起動後,ブラウザから http://localhost/test.php を確認し,phpinfo() ページが表示されれば,インストール完了。
ドキュメントルートの test.php は削除し,php.ini の
;disable_functions = —>> disable_functions =”shell_exec, suexec, passthru, phpinfo”
に変更後,Apacheを再起動。
一応,仮構築はできた。あとは,本番ですな。(ドキドキ)
早速の追記:
書き忘れです。PHPのパスを通していないが,Apacheから使うだけなら通さなくても問題ない。
と書いたのだが,近頃ググっていて,パスがらみのトラブルを見たので,WinVista・7・8やWinサーバ系だと違うのかもしれない(12/27追記)。
追記(4/12):
次稿に書いたが,
(OS 64)指定されたネットワーク名は利用できません。
: AH00341: winnt_accept: Asynchronous AcceptEx failed.
に対して,
<IfModule mpm_winnt_module>
AcceptFilter http none
</IfModule>
を入れてから,調子がいいように思える。
追記2(4/14):
php5ts.dllのクラッシュによる再起動があまりに激しいので,Apache2.2+PHP5.3に戻した。しかし,次々稿のようなことになって,頭が痛い。
追記3(4/28):
以下の構成で安定したよー,ぱちぱち。
- WindowsXP HE SP3 (x86) 無理やりSP3をあててる
- Apache 2.4.2 (VC9) (x86) Apache Loungeから
- MySQL 5.5.23 (x86)
- ActivePerl 5.14.2.1402 (x86)
- PHP 5.4.1 (Thread Safe) (VC9) (x86)
追記4(5/2):
今朝,8時半ごろ, crash + restart が起きた。5日強で1回だから,劇的に減った。ありがちなメモリリークとかも調べてみないといけないかな。
追記5(11/10):
PHPの設定について,extra-confを作る話を「覚え書-#12。」に書いたので,そっちも見てください。
追記6(2013/1/3):
VC11 でビルドの Apache 2.4.6 win32 binary について新記事を書いた。