Do You PHP?    
Search Engine Optimization  php5 powerd  Valid XHTML 1.0!  Valid CSS!  このサイトのはてなブックマーク数 



last updated
2005/05/19

counter hits
since 1999/11/06


mod_proxyを使ったPHP4とPHP5の半同居(別居?)

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です。



About This Site |  Privacy Policy |  Contact
Copyright © 1999 - 2005 by Hideyuki SHIMOOKA all rights reserved.