開発環境を構築する(Windows Apache2.0編)

開発環境を構築するシリーズまとめリンク

開発環境を構築する(Windows版PHP4編) - ぱせらんメモ
開発環境を構築する(Windows版PHP5編) - ぱせらんメモ
開発環境を構築する(Windows Apache2.0編) - ぱせらんメモ
開発環境を構築する(Windows Apache2.0編)その2 - ぱせらんメモ
開発環境を構築する(Windows Tomcat 5.5編) - ぱせらんメモ


今回はPHP4/5を共存させた形でApacheを動かすための設定を行う。
一言で言ってしまえばPHP4用のApacheとPHP5用のApacheを違うポートで動かすだけなのだが、何もApacheを2つインストールするというわけではなく、ちょいと設定を工夫するだけだ。

1.インストーラの入手とインストール

公式サイトからApache 2.0のWindows版を落としてくる。
「Win32 Binary (MSI Installer): apache_2.0.xx-win32-x86-no_ssl.msi」というやつだ。


実行するとインストーラが立ち上がるので適当にインストールする。
Server Informationは自分の環境に合わせて適宜設定する。特にドメインなどがないようであればlocalhostでよい。
下のラジオボタンの部分は上の「Run as a service for All-users -- Recommended」を選択(デフォルト)。
その他の設定はデフォルトのままでよいが、個人的にインストール先はProgram Filesを省いたC:\Apache Group\にしている。


インストールが完了すると自動的にApacheが立ち上がるので、とりあえず[]http://localhost/[]にアクセスしてみる。
おなじみの「あなたの予想に反して(ry」というやつが出れば問題なし。
ここまで確認できたらタスクトレイに出てきたMonitor Apache Serviceを使って一旦Apacheを停止(stop)する。

2.設定ファイルの準備

いよいよPHP4/5共存環境のための設定を行う。
なお、ここではPHP4/5共存の設定に主眼を置き、その他の設定については触れないことにする。
デフォルト設定から変えるべきお約束の設定などもあると思うが、そのあたりは各自の都合の良いように行ってもらいたい。機会があればそちらのほうも書いてみるかもしれない。


まずC:\Apache Group\Apache2\conf\httpd.confC:\Apache Group\Apache2\conf\httpd-php5.confという名前でコピーする。
httpd.confがPHP4用、httpd-php5.confがPHP5用ということにする。

3.PHP4の設定

3-1.httpd.conf(PHP4用)

最後のほうにあるバーチャルホストの設定の手前に次の内容を追加する。

Include conf/php4.conf

httpd.confの設定はこれだけで終了。php4.confはこれから作成するPHP4の設定ファイルとなる。

3-2.php4.conf(PHP4の設定)

httpd.confと同じディレクトリに以下の内容でphp4.confを作成する。

LoadModule php4_module "C:/php4/sapi/php4apache2.dll"

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php index.html index.html.var
PHPIniDir "C:/php4"

PHP4のディレクトリは前回の内容を基準にしているので異なる場合は適宜変更すること。


これでPHP4の設定は完了した。
Monitor Apache ServiceからApacheを起動して無事に立ち上がるか確認。
次にinfo.phpなどという名前で

<?php
phpinfo();
?>

みたいなファイルを作成してアクセスした時に、例のPHPの情報画面が表示されれば問題ない。

4.PHP5の設定

4-1.httpd-php5.conf(PHP5用)

次はPHP5の設定だ。
先ほどコピーしたhttpd-php5.confを上から順番に見ていき、以下のように書き換える。

PidFile logs/httpd-php5.pid
Listen 8080
ServerName localhost:8080
DocumentRoot "C:/Apache Group/Apache2/htdocs-php5"
#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "C:/Apache Group/Apache2/htdocs-php5">
ErrorLog logs/php5-error.log
CustomLog logs/php5-access.log common

そしてバーチャルホストの設定の前に以下を追加。

Include conf/php5.conf

少し項目の説明をしよう。

PidFile
プロセスIDが書かれたファイル。今回はPHP4とPHP5を別々に起動させるので、このファイルが同じではまずい。
Listen
どのIPアドレスのどのポートで動かすかという設定。今回はPHP4をポート80、PHP5をポート8080で動かすことにする。
ServerName
サーバ名。こちらもポートをそれぞれ異なるものにしておく。
DocumentRoot
htmlファイルやphpファイルを置くドキュメントルート。ここもPHP4とPHP5で異なるものにしておいたほうが無難。
Directory〜
ドキュメントルートに対する設定。ドキュメントルートに合わせて書き換える。
ErrorLog
エラーログファイル。別々のプロセスが同じファイルに書き込むのはまずそうなので、PHP4とPHP5で別のファイルにしておく必要があると思われる。
CustomLog
アクセスログファイル。こちらも別々にしておく必要があると思われる。

以上が肝となる設定。基本的には複数のプロセスが同時にアクセスしてはならないリソースを別々に分けてやるだけだ。
ちなみに/icons(ディレクトリ一覧表示の時のアイコンファイル)や/error(エラーページ)は読み込みのみの静的リソースなので共通でも構わないと思われる。
上記以外にも独自に設定を行う場合は、それぞれのリソースが排他的であるべきかどうかを考えて判断すべし。

最後にPHP5用のファイルを置くディレクトC:/Apache Group/Apache2/htdocs-php5を作成しておく。

4-2.php5.conf(PHP5の設定)

httpd-php5.confと同じディレクトリに以下の内容でphp5.confを作成する。

LoadModule php5_module C:/php5/php5apache2.dll

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.php index.html index.html.var
PHPIniDir "C:/php5"

PHP5のディレクトリは前回の内容を基準にしているので異なる場合は適宜変更すること。


これでPHP5の設定は完了した。
早速起動して確認したいところだが、残念ながらMonitor Apache Serviceからはhttpd.confのほうしか起動できないので、コマンドラインで起動する。
コマンドプロンプトを開き〜\Apache Group\Apache2\binディレクトリに移動。以下のコマンドを実行する。

apache -f conf\httpd-php5.conf

これでhttpd-php5.confを適用した状態でApacheが起動するので、[]http://localhost:8080/[]にアクセスできるかどうか確認する。
今度はC:/Apache Group/Apache2/htdocs-php5をドキュメントルートとしているので、「あなたの(ry」は出てこないが、「ページが見つかりません」みたいなエラーが出てこなければ良しとする。
PHP4の時に作ったinfo.phpをコピーしてアクセスしてみればよい。PHP5の設定情報が表示されるはずだ。
Apacheの終了はコマンドプロンプトでCtrl+Cを押せば止まる。


ちなみに以下のように-kオプションを追加して起動するとサービスとして起動できる。

apache -k start -f conf\httpd-php5.conf

終了は

apache -k stop
4-3.PHP5をサービスに登録する

いちいちコマンドラインで起動するのも嫌なのでPHP5のほうもサービスに登録して起動できるようにする。
サービスに登録すると[コントロールパネル][管理ツール][サービス]で管理できるのはもちろん、Monitor Apache Serviceでも管理が出来るようになる。


先ほどと同じようにコマンドプロンプトを開き〜\Apache Group\Apache2\binディレクトリに移動。以下のコマンドを実行する。

apache -k install -n "Apache2-PHP5" -f "C:\Apache Group\Apache2\conf\httpd-php5.conf"

これでApache2-PHP5という名前でhttpd-php5.conf(PHP5)を使って起動するサービスが登録できる。
Monitor Apache Serviceを起動しなおすとApache2とApache2-PHP5という二つの項目が出来ているはずだ。


このサービスをApacheをアンインストールしても消えないので、事前に自分で登録解除する必要がある。
登録解除はコマンドプロンプトで以下のコマンドを実行する。

apache -k uninstall -n "Apache2-PHP5"

これでApache2-PHP5という名前のサービスを解除できる。


以上でPHP4とPHP5の共存環境の構築は完了だ。
あとは好きなようにいじり倒せばよい。

5.ひとつのApacheに見せかける(Reverse Proxy設定)

環境構築はひとまず完了したが、ここではもう一歩踏み込んでPHP4とPHP5をあたかもひとつのApacheで動かしているように見せかけてみる。
仕組みは簡単だ。mod_proxyを利用して[]http://localhost/[]のどこかに[]http://localhost:8080/[]マッピングしてあげるだけだ。

5-1.Reverse Proxy設定

httpd.confのLoadModulesが並んでいるあたりから以下のコメントを解除してmod_proxyとmod_proxy_httpを有効にする。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

次にバーチャルホストの設定の手前あたりに次の内容を追加する。

ProxyRequests Off
<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>
ProxyPass /php5/ http://localhost:8080/
ProxyPassReverse /php5/ http://localhost:8080/

これで[]http://localhost/php5/[]というパスにアクセスすると内部的に[]http://localhost:8080/[]に接続される(もちろんApache2-PHP5が起動していないとアクセスできない)。
つまりPHP5の方のApacheを表から隠して、あたかもひとつのApacheで動いてるかのように見せかけることができる。


以上でPHP4とPHP5を共存させるApacheの設定は完了。
次回は余裕があればディレクトリやログファイル、バーチャルホストなどについて補足し、最後にTomcatを設定して今回の環境構築は終わりとしたいと思う。