|
PHP4とPHP5の半同棲(?)で、「毎回httpd.conf内のLoadModuleの設定を変更してApacheを再起動して使っていますが、個人ユースではさほど手間ではありません」とは書いたものの、やはり面倒なことに代わりはありません(^-^;
PHP-usersにも同じような話題が上がり、その中でmod_proxyとmod_rewriteを使って、あたかも一つのApacheにPHP4/5が同居しているかのように見せるというというものがありましたので、(今更ながら)試してみた内容をまとめてみました。
元ネタは、以下のサイトです。
今回構築した構成ですが、以下のようになります。PHPについては、PHP4と5を逆にしても可能です。
- Apache1:Apache2.0.52(Port:80)+mod_rewrite+mod_proxy+PHP4.3.8
- Apache2:Apache2.0.52(Port:8080)+PHP5.0.2
仕組みとしては、Apache1としてポート80、Apache2としてポート8080でListenさせておきます。全てのリクエストはApache1側に任せ、そのうち拡張子が「php5」であるリクエストについては、Apache2側にリクエストを転送します。この際、Apache1がApache2へのプロキシとして動作させることで、Apache2にあるコンテンツをApache1のローカルにあるコンテンツのように見せるようにしています。
以下、構築手順です。まず、Apacheの方ですが、それぞれ以下のようなオプションを付けて、configureコマンドを実行、make・make installしました。
●configureコマンド(Apache1)$ ./configure \
--enable-rewrite \
--enable-proxy=shared
●configureコマンド(Apache2)$ ./configure \
--prefix=/usr/local/apache2_php5
Apache1で「--enable-proxy=shared」となっていますが、個人的好みですので、「--enable-proxy」のみでも問題ありません。これで、Apache1が「/usr/local/apache2」、apache2が「/usr/local/apache2_php5」にインストールされます。
次にPHPをそれぞれのApacheにインストールします。これについては、PHP4のインストールページやPHP5のインストールページ等を参照して下さい。ただし、Apache2向けのPHP5については、「--with-apxs」で指定するパスを間違えないようにして下さい。
インストールが終わったら、Apacheの設定を行います。今回は、以下のように設定しました。
●/usr/local/apache2/conf/httpd.conf(Apache1)Listen 80
ServerName somehost.example.com:80
LoadModule php4_module modules/libphp4.so
AddType application/x-httpd-php .php
#
# To use PHP5 scripts:
#
RewriteEngine on
RewriteRule ^/(.*\.phps?5)(.*)?$ http://localhost:8080/$1$2 [P]
ProxyPassReverse / http://localhost:8080/
Alias /php/ /path/to/public_html/
●/usr/local/apache2_php5/conf/httpd.conf(Apache2)Listen localhost:8080
ServerName localhost:8080
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php5
Alias /php/ /path/to/public_html/
続いて、/path/to/public_htmlに適当なPHPスクリプトを配置します。
●test.php・test.php5
<?php
phpinfo();
?>
さらに、Apache2側のapachectlを修正します。
●/usr/local/apache2_php5/bin/apachectl 42 # the path to your httpd binary, including options if necessary
43 #HTTPD='/usr/local/apache2_php5/bin/httpd'
44 HTTPD='/usr/local/apache2_php5/bin/httpd -f /usr/local/apache2_php5/conf/httpd.conf'
56 # the URL to your server's mod_status status page. If you do not
57 # have one, then status and fullstatus will not work.
58 #STATUSURL="http://localhost:80/server-status"
59 STATUSURL="http://localhost:8080/server-status"
最後に2つのApacheを起動し、それぞれのApacheのaccess_logを確認しながら動作を確認します。
- http://somehost.example.com/php/test.phpにアクセスすると、PHP4のphpinfoが表示され、Apache1のaccess_logにログが出力される
- http://somehost.example.com/php/test.php5にアクセスすると、PHP5のphpinfoが表示され、Apache2のaccess_logにログが出力される
といった具合に動作すれば、OKです。
|