skimemo


skimemo - 日記/2019-12-05/CentOS7+ApacheでPHP5とPHP7を共存させる

_ CentOS7+ApacheでPHP5とPHP7を共存させる

_ 概要

  • もともとApache+PHP5.6で動いているサーバー
  • 既存の環境には影響を与えたくない
  • 新たなVirtualHostだけPHP7で動作させる

これらを実現するため、PHP5.6は今まで通りモジュールで動かし、PHP7はfcgiで動かします。

_ 手順

  1. PHP7.3のインストール
    sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
    sudo yum install yum-utils
    sudo yum-config-manager --enable remi
    sudo yum install php73-php-{opcache,pecl-apcu,pecl-memcached,cli,gd,mbstring,mcrypt,mysqlnd,pdo,xml}
    sudo yum install php73-php-fpm
    remiリポジトリでインストールすると、既存のPHP5環境には影響を与えず、別のディレクトリ群にPHP7をインストールすることができます。

  2. php-fpmの設定
    sudo vi /etc/opt/remi/php73/php-fpm.d/www.conf
    以下の部分を変更します。(UNIX socketで接続するケース)
    listen = /var/run/php-fpm/php-fpm.sock
    listen.owner = apache
    listen.group = apache
    listen.mode = 0660
    pidファイルを作成するためのディレクトリを作ります。
    sudo mkdir /var/run/php-fpm

  3. Apacheの設定
    sudo vi /etc/httpd/conf.d/vhost.conf
    php-fpmとの連携を追記します。
    <VirtualHost *:443>
       ServerName vhost.example.jp
       DocumentRoot /var/www/hoge
       <FilesMatch \.php$>
           SetHandler proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost
       </FilesMatch>
             :
    </VirtualHost>
    通常のVirtualHost設定に、<FilesMatch>〜</FilesMatch>部分を追加するだけです。

    また、長い処理がタイムアウトにならないよう、適当な時間を設定してあげます。これは、xdebugなどでステップ実行している時間も算入されますので、デバッグする場合は長めにする必要があります。
    ProxyTimeout 300

  4. 起動
    sudo systemctl start php73-php-fpm
    sudo systemctl enable php73-php-fpm
    sudo systemctl reload httpd

上記の例で言うと、/var/www/hoge/index.phpなどを作って、https://vhost.example.jp/にアクセスし、表示されれば成功です。
この方法であれば、恐らく(試してないけど)何個でも異なるバージョンのPHPを共存させることが可能だと思います。(その場合sockファイル名は分ける)

_ 参考

Category: [Linux] - 12:11:43



 
Last-modified: 2020-04-21 (火) 11:52:44 (108d)