●概要
参考URL:PHP複数バージョンインストール(バーチャルホストでPHP切替)
参考URL:複数のバージョンの PHP を切り替えて使う
同一サーバ上(CentOS 7)にPHPを複数のバージョンで共存させ、Apacheのバーチャルホストを設定し、PHPバージョン毎に接続ドメインを切り替える設定をします。
●PHPの複数バージョンのインストール
Remiレポジトリをインストールします。
実行バイナリのパスは下記のとおりです。
●php-fpmの複数バージョンのインストール
複数バージョンに対応したphp-fpmをインストールします。
php-fpmのバージョンを確認します。
●Apacheの設定(バーチャルホスト)
ApacheをPHPのバージョン毎に応じた設定(バーチャルホスト)をします。
php-fpm の起動
●PHPの接続確認(URL)
PHPのバージョン毎にアクセス結果を表示できるか確認します。
サンプルファイルの作成
●考察(php74だけがサンプルファイルの内容がそのまま見えてしまう件)
何故、php74だけがサンプルファイルの内容がそのまま見えてしまったのでしょうか。
バージョン74の設定を他のバージョンと同様に、php-fpm 設定、php-fpm listenポート指定及びApacheの設定(バーチャルホスト)を実施したところ正常に結果を表示できました。
OSの状態として、デフォルトのリポジトリでインストールできるPHP(5.4.x系)を設定していなかったのではないかと思われます。
インストール済みのphp54関連をアンインストールするためphp-fpmを停止させます。
デフォルトでインストールされる5.4.x系では、問題なくWebページでバージョンを確認することができました。
この状態でPHP74のリッスンポートを9000になるように、アンインストール、再インストール及び再設定しました。
http://php74.bigbang.mydns.jp/に接続して確認すると、上記でインストールした5.4.x系(5.4.16)のバージョンが表示されました。
Remiリポジトリからインストールし、デフォルト(9000番ポート)になるよう設定すると期待とおりの動作とならないようです。
・・・
・・・
原因が判明しました。
通常、Apacheを運用しているサーバと異なるサーバで試験を実施していため、9000番ポートに接続する設定のServerNameのサーバ名が試験用サーバを向かず、通常運用するサーバに向いていたため(DNSサーバの設定による)です。
参考URL:PHP複数バージョンインストール(バーチャルホストでPHP切替)
参考URL:複数のバージョンの PHP を切り替えて使う
同一サーバ上(CentOS 7)にPHPを複数のバージョンで共存させ、Apacheのバーチャルホストを設定し、PHPバージョン毎に接続ドメインを切り替える設定をします。
●PHPの複数バージョンのインストール
Remiレポジトリをインストールします。
# yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm # yum install yum-utils # yum-config-manager --enable remiphp54、55、56、73、74、80をインストールします。
# for v in 54 55 56 73 74 80 ; do yum -y install php$v php$v-php-{gd,xml,mbstring,mysqlnd,embedded} ; done # for v in 54 55 ; do yum -y install php$v-php-pecl-{apc,memcached} ; done # for v in 56 73 74 80 ; do yum -y install php$v-php-{opcache,pecl-apcu,pecl-memcached} ; donePHPのバージョンを確認します。
# for v in 54 55 56 73 74 80 ; do php$v -v ; echo \ ; donephp.iniの配置場所を確認します。
# for v in 54 55 56 73 74 80 ; do php$v --ini | grep Loaded | awk '{print $4}' ; doneインストールされた各バージョンのファイルは下記となります。
# ls -l /opt/remi/ 合計 0 dr-xr-xr-x 3 root root 32 1月 1 23:11 php54 dr-xr-xr-x 3 root root 32 12月 25 17:15 php55 dr-xr-xr-x 3 root root 32 12月 20 17:14 php56 dr-xr-xr-x 3 root root 32 12月 20 17:15 php73 dr-xr-xr-x 3 root root 32 12月 27 21:52 php74 dr-xr-xr-x 3 root root 32 12月 25 17:16 php80基本的に/opt/remi以下のフォルダにインストールされたファイルが保存されます。
実行バイナリのパスは下記のとおりです。
# ls -l /usr/bin/ | grep php lrwxrwxrwx 1 root root 14 12月 31 16:38 php -> /usr/bin/php74 lrwxrwxrwx 1 root root 32 1月 1 23:11 php54 -> /opt/remi/php54/root/usr/bin/php lrwxrwxrwx 1 root root 36 1月 1 23:11 php54-cgi -> /opt/remi/php54/root/usr/bin/php-cgi lrwxrwxrwx 1 root root 33 1月 1 23:11 php54-pear -> /opt/remi/php54/root/usr/bin/pear lrwxrwxrwx 1 root root 38 1月 1 23:11 php54-phar -> /opt/remi/php54/root/usr/bin/phar.phar lrwxrwxrwx 1 root root 32 12月 25 17:15 php55 -> /opt/remi/php55/root/usr/bin/php lrwxrwxrwx 1 root root 36 12月 25 17:15 php55-cgi -> /opt/remi/php55/root/usr/bin/php-cgi lrwxrwxrwx 1 root root 33 12月 25 17:15 php55-pear -> /opt/remi/php55/root/usr/bin/pear lrwxrwxrwx 1 root root 38 12月 25 17:15 php55-phar -> /opt/remi/php55/root/usr/bin/phar.phar lrwxrwxrwx 1 root root 32 12月 20 17:14 php56 -> /opt/remi/php56/root/usr/bin/php lrwxrwxrwx 1 root root 36 12月 20 17:14 php56-cgi -> /opt/remi/php56/root/usr/bin/php-cgi lrwxrwxrwx 1 root root 33 12月 24 12:16 php56-pear -> /opt/remi/php56/root/usr/bin/pear lrwxrwxrwx 1 root root 38 12月 20 17:14 php56-phar -> /opt/remi/php56/root/usr/bin/phar.phar lrwxrwxrwx 1 root root 32 12月 20 17:15 php73 -> /opt/remi/php73/root/usr/bin/php lrwxrwxrwx 1 root root 36 12月 20 17:15 php73-cgi -> /opt/remi/php73/root/usr/bin/php-cgi lrwxrwxrwx 1 root root 33 12月 24 12:16 php73-pear -> /opt/remi/php73/root/usr/bin/pear lrwxrwxrwx 1 root root 38 12月 20 17:15 php73-phar -> /opt/remi/php73/root/usr/bin/phar.phar lrwxrwxrwx 1 root root 32 12月 27 21:52 php74 -> /opt/remi/php74/root/usr/bin/php lrwxrwxrwx 1 root root 36 12月 27 21:52 php74-cgi -> /opt/remi/php74/root/usr/bin/php-cgi lrwxrwxrwx 1 root root 38 12月 27 21:52 php74-phar -> /opt/remi/php74/root/usr/bin/phar.phar lrwxrwxrwx 1 root root 32 12月 25 17:16 php80 -> /opt/remi/php80/root/usr/bin/php lrwxrwxrwx 1 root root 36 12月 25 17:16 php80-cgi -> /opt/remi/php80/root/usr/bin/php-cgi lrwxrwxrwx 1 root root 38 12月 25 17:16 php80-phar -> /opt/remi/php80/root/usr/bin/phar.phar前出の/opt/remi以下に保存された実行ファイルに対して、/usr/bin 以下にリンクが生成されていることが分かります。
●php-fpmの複数バージョンのインストール
複数バージョンに対応したphp-fpmをインストールします。
# for v in 54 55 56 73 74 80 ; do yum -y install php$v-php-fpm ; donephp-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 73 80 ; do sed -i '/pm = /s/dynamic/ondemand/' /etc/opt/remi/php$v/php-fpm.d/www.conf ; done※php74のみデフォルトで利用します。
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 73 80 ; do grep 'pm = ondemand' /etc/opt/remi/php$v/php-fpm.d/www.conf ; donephp-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 73 80 ; do sed -i "s/9000/90$v/" /etc/opt/remi/php$v/php-fpm.d/www.conf ; done※リッスンポートphp74のみデフォルト9000とします。
●Apacheの設定(バーチャルホスト)
ApacheをPHPのバージョン毎に応じた設定(バーチャルホスト)をします。
# cat << "_EOF_" > /etc/httpd/conf.d/remi.conf <VirtualHost *:80> ### php74 ServerName www.bigbang.mydns.jp <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> </VirtualHost> <VirtualHost *:80> ### php80 ServerName php80.bigbang.mydns.jp DocumentRoot /var/www/phpdir/php80 ErrorLog logs/php80.bigbang.mydns.jp-error.log CustomLog logs/php80.bigbang.mydns.jp-access.log combined <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9080" </FilesMatch> </VirtualHost> <VirtualHost *:80> ### php73 ServerName php73.bigbang.mydns.jp DocumentRoot /var/www/phpdir/php73 ErrorLog logs/php73.bigbang.mydns.jp-error.log CustomLog logs/php73.bigbang.mydns.jp-access.log combined <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9073" </FilesMatch> </VirtualHost> <VirtualHost *:80> ### php56 ServerName php56.bigbang.mydns.jp DocumentRoot /var/www/phpdir/php56 ErrorLog logs/php56.bigbang.mydns.jp-error.log CustomLog logs/php56.bigbang.mydns.jp-access.log combined <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9056" </FilesMatch> </VirtualHost> <VirtualHost *:80> ### php55 ServerName php55.bigbang.mydns.jp DocumentRoot /var/www/phpdir/php55 ErrorLog logs/php55.bigbang.mydns.jp-error.log CustomLog logs/php55.bigbang.mydns.jp-access.log combined <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9055" </FilesMatch> </VirtualHost> <VirtualHost *:80> ### php54 ServerName php54.bigbang.mydns.jp DocumentRoot /var/www/phpdir/php54 ErrorLog logs/php54.bigbang.mydns.jp-error.log CustomLog logs/php54.bigbang.mydns.jp-access.log combined <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9054" </FilesMatch> </VirtualHost> _EOF_※ご自身のドメイン名に合わせてServerNameを変更してください。
php-fpm の起動
# for v in 54 55 56 73 74 80 ; do systemctl start php$v-php-fpm ; systemctl enable php$v-php-fpm ; done
●PHPの接続確認(URL)
PHPのバージョン毎にアクセス結果を表示できるか確認します。
サンプルファイルの作成
# echo "PHP Version: <?php echo phpversion();" > /var/www/html/index.php # mkdir -p /var/www/phpdir/php80/ # mkdir -p /var/www/phpdir/php73/ # 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/php80 # cp -p /var/www/html/index.php /var/www/phpdir/php73 # 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のバージョンが切替わっていることを確認します。
http://php54.bigbang.mydns.jp/ http://php55.bigbang.mydns.jp/ http://php56.bigbang.mydns.jp/ http://php73.bigbang.mydns.jp/ http://php74.bigbang.mydns.jp/ http://php80.bigbang.mydns.jp/結果は、php74だけサンプルファイルの内容がそのまま見えてしまいました。
●考察(php74だけがサンプルファイルの内容がそのまま見えてしまう件)
何故、php74だけがサンプルファイルの内容がそのまま見えてしまったのでしょうか。
バージョン74の設定を他のバージョンと同様に、php-fpm 設定、php-fpm listenポート指定及びApacheの設定(バーチャルホスト)を実施したところ正常に結果を表示できました。
OSの状態として、デフォルトのリポジトリでインストールできるPHP(5.4.x系)を設定していなかったのではないかと思われます。
インストール済みのphp54関連をアンインストールするためphp-fpmを停止させます。
# systemctl stop php54-php-fpm ; systemctl disable php54-php-fpmphp54用のバーチャルホストの設定を無効にし、Apacheを再起動します。
# vi /etc/httpd/conf.d/remi.conf ※PHP54に関する設定行を全てコメントアウトします。 #<VirtualHost *:80> #### php54 # ServerName php54.bigbang.mydns.jp # DocumentRoot /var/www/phpdir/php54 # ErrorLog logs/php54.bigbang.mydns.jp-error.log # CustomLog logs/php54.bigbang.mydns.jp-access.log combined # <FilesMatch \.php$> # SetHandler "proxy:fcgi://127.0.0.1:9054" # </FilesMatch> #</VirtualHost> # systemctl restart httpd9054ポートが空いていないことを確認します。
# lsof -i:9054CentOS 7のデフォルトのリポジトリからPHPをダウンロードします。
# yum -y install php php-{gd,xml,mbstring,mysqlnd} # yum -y install php-pecl-{apc,memcached}
デフォルトでインストールされる5.4.x系では、問題なくWebページでバージョンを確認することができました。
この状態でPHP74のリッスンポートを9000になるように、アンインストール、再インストール及び再設定しました。
http://php74.bigbang.mydns.jp/に接続して確認すると、上記でインストールした5.4.x系(5.4.16)のバージョンが表示されました。
Remiリポジトリからインストールし、デフォルト(9000番ポート)になるよう設定すると期待とおりの動作とならないようです。
・・・
・・・
原因が判明しました。
通常、Apacheを運用しているサーバと異なるサーバで試験を実施していため、9000番ポートに接続する設定のServerNameのサーバ名が試験用サーバを向かず、通常運用するサーバに向いていたため(DNSサーバの設定による)です。
# vi /etc/httpd/conf.d/remi.conf <VirtualHost *:80> ### php74 ServerName www.bigbang.mydns.jp <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> </VirtualHost> : ↓↓↓ <VirtualHost *:80> ### php74 ServerName php74.bigbang.mydns.jp <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> </VirtualHost> :