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>
ソケットを使う場合は以下で。
<FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost" </FilesMatch>
コメント