概要
PHPの任意のバージョンを同一サーバー上に共存させ、Apacheのバーチャルホストを設定し、接続ドメインごとにPHPのバージョンを切り替える設定をする。
前提条件
・OSはCentOS7であること
・WebサーバはApacheを利用する
複数PHPインストール
Remi レポジトリのインストール
# yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# yum install yum-utils
# yum-config-manager --enable remi
php54/55/56/70/71/72をインストールする
# for v in 54 55 56 70 71 72 ; do yum -y install php$v php$v-php-{gd,xml,mbstring,mysqlnd} ; done
# for v in 54 55 ; do yum -y install php$v-php-pecl-{apc,memcached} ; done
# for v in 56 70 71 72 ; do yum -y install php$v-php-{opcache,pecl-apcu,pecl-memcached} ; done
PHPバージョン確認
# for v in 54 55 56 70 71 72 ; do php$v -v ; echo \ ; done
php.ini 配置場所確認
# for v in 54 55 56 70 71 72 ; do php$v --ini | grep Loaded | awk '{print $4}' ; done
複数php-fpmインストール
# for v in 54 55 56 70 71 72 ; do yum -y install php$v-php-fpm ; done
php-fpm 設定
# for v in 54 55 56 ; do sed -i '/pm = /s/dynamic/ondemand/' /opt/remi/php$v/root/etc/php-fpm.d/www.conf ; done
# for v in 70 71 ; do sed -i '/pm = /s/dynamic/ondemand/' /etc/opt/remi/php$v/php-fpm.d/www.conf ; done
※php72のみデフォルトで利用する
php-fpmバージョン確認
# for v in 54 55 56 ; do grep 'pm = ondemand' /opt/remi/php$v/root/etc/php-fpm.d/www.conf ; done
# for v in 70 71 ; do grep 'pm = ondemand' /etc/opt/remi/php$v/php-fpm.d/www.conf ; done
php-fpm listenポート指定
# for v in 54 55 56 ; do sed -i "s/9000/90$v/" /opt/remi/php$v/root/etc/php-fpm.d/www.conf ; done
# for v in 70 71 ; do sed -i "s/9000/90$v/" /etc/opt/remi/php$v/php-fpm.d/www.conf ; done
※リッスンポートphp72のみデフォルト9000にする
Apacheの設定(バーチャルホスト)
# cat << "_EOF_" > /etc/httpd/conf.d/remi.conf
### php72
ServerName do.pineapplefanboy.com
SetHandler "proxy:fcgi://127.0.0.1:9000"
### php71
ServerName php71.do.pineapplefanboy.com
DocumentRoot /var/www/phpdir/php71
ErrorLog logs/php71.do.pineapplefanboy.com-error.log
CustomLog logs/php71.do.pineapplefanboy.com-access.log combined
SetHandler "proxy:fcgi://127.0.0.1:9071"
### php70
ServerName php70.do.pineapplefanboy.com
DocumentRoot /var/www/phpdir/php70
ErrorLog logs/php70.do.pineapplefanboy.com-error.log
CustomLog logs/php70.do.pineapplefanboy.com-access.log combined
SetHandler "proxy:fcgi://127.0.0.1:9070"
### php56
ServerName php56.do.pineapplefanboy.com
DocumentRoot /var/www/phpdir/php56
ErrorLog logs/php56.do.pineapplefanboy.com-error.log
CustomLog logs/php56.do.pineapplefanboy.com-access.log combined
SetHandler "proxy:fcgi://127.0.0.1:9056"
### php55
ServerName php55.do.pineapplefanboy.com
DocumentRoot /var/www/phpdir/php55
ErrorLog logs/php55.do.pineapplefanboy.com-error.log
CustomLog logs/php55.do.pineapplefanboy.com-access.log combined
SetHandler "proxy:fcgi://127.0.0.1:9055"
### php54
ServerName php54.do.pineapplefanboy.com
DocumentRoot /var/www/phpdir/php54
ErrorLog logs/php54.do.pineapplefanboy.com-error.log
CustomLog logs/php54.do.pineapplefanboy.com-access.log combined
SetHandler "proxy:fcgi://127.0.0.1:9054"
_EOF_
※ご自身のドメイン名に合わせてServerNameを変更してください。
php-fpm の起動
# for v in 54 55 56 70 71 72 ; do systemctl start php$v-php-fpm ; systemctl enable php$v-php-fpm ; done
PHP接続確認(URL)
サンプルファイルの作成
# echo "PHP Version: <?php echo phpversion();" > /var/www/html/index.php
# mkdir -p /var/www/phpdir/php71/
# mkdir -p /var/www/phpdir/php70/
# mkdir -p /var/www/phpdir/php56/
# mkdir -p /var/www/phpdir/php55/
# mkdir -p /var/www/phpdir/php54/
# cp -p /var/www/html/index.php /var/www/phpdir/php71
# cp -p /var/www/html/index.php /var/www/phpdir/php70
# cp -p /var/www/html/index.php /var/www/phpdir/php56
# cp -p /var/www/html/index.php /var/www/phpdir/php55
# cp -p /var/www/html/index.php /var/www/phpdir/php54
※ドメインごとにPHPのバージョンが切替わっていること
参考リンク
Yum で複数バージョンの PHP を共存させる
ありがとうございます
コメント