SOFTELメモ

</> 技術者募集

Apache mod_proxy_fcgiで複数のバージョンのphpを動かす

問題

Apache1つで複数のバージョンのphpを動作させたいです。

答え

CentOS6で、php-fpmでたくさん動かす例。

yumで一通り入れる。apacheは2.2が入る。

yum install httpd php (など)

epelなどからもしくはRPMを持ってくるもしくは自分でコンパイルして mod_proxy_fcgi を追加する。

yum install mod_proxy_fcgi
自分でコンパイル → https://github.com/ceph/mod-proxy-fcgi

phpをコンパイルする。

# ./configure --prefix=/usr/local/php/7.2.6 --enable-fpm (+ その他オプション)
# make
# make install

php-fpmの設定。複数稼働させるならポートを変えること。9000、9001、9002…。

# cp /usr/local/php/7.2.6/etc/php-fpm.conf.default /usr/local/php/7.2.6/etc/php-fpm.conf
# cp /usr/local/php/7.2.6/etc/php-fpm.d/www.conf.default /usr/local/php/7.2.6/etc/php-fpm.d/www.conf

# vi /usr/local/php/7.2.6/etc/php-fpm.d/www.conf
[www]
...
listen = 127.0.0.1:9000 ← これ
...

php-fpm 起動。

# /usr/local/php/7.2.6/sbin/php-fpm
# /usr/local/php/5.6.36/sbin/php-fpm
# /usr/local/php/5.5.30/sbin/php-fpm

apacheのVirtualHostなどに設定追加

<VirtualHost *:80>
ProxyPassMatch ^/php7/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9072/home/apache/vhosts/default/www/php7/$1
ProxyPassMatch ^/php56/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9056/home/apache/vhosts/default/www/php56/$1
ProxyPassMatch ^/php55/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9055/home/apache/vhosts/default/www/php55/$1
ProxyPassMatch ^/php54/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9054/home/apache/vhosts/default/www/php54/$1
</VirtualHost>

ポート番号を変える方式も便利。

<VirtualHost *:8072>
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9072/home/apache/vhosts/default/www/$1
</VirtualHost>
<VirtualHost *:8056>
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9056/home/apache/vhosts/default/www/$1
</VirtualHost>
<VirtualHost *:8055>
    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9055/home/apache/vhosts/default/www/$1
</VirtualHost>

メモ

Apache2.4.10以降は以下の書き方ができる。可能ならこちらがおすすめ。

<FilesMatch \.php$>
    SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

関連するメモ

コメント