CentOS で nginx + php8.1-fpm をインストールし、複数バージョンを共存できるよう設定する

php

こんにちは!ガジェットぴろぐです。

今回は、CentOS 7 で、最新バージョンとなる php8.1-fpm を使用しつつ、複数の php バージョンをインストールし設定する方法と、nginx から使用するための FastCGI 待ち受け先を変更方法をご紹介します。

サーバー環境

・CentOS 7.9

・nginx 1.22.0

epel-release と、remi リポジトリのインストール

php8.1-fpm が公開されている remi リポジトリを使用するためには、epel リポジトリを追加する必要があります。

yum install epel-release

yum コマンドを使用し、epel-release をインストール後、remi リポジトリをインストールします。

yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm

php-fpm のインストール

epel-release と、remi リポジトリのインストールが終わったら、php-fpm をインストールしていきます。

yum install php81-php php81-php-common php81-php-mysqli php81-php-fpm

インストールしたい php のバージョンは phpXX-php のように XX の場所に . (ドット) を含まない数値のみを入れインストールを行います。

※ バージョンごとに、curl や mysqli などを別でインストールする必要があります。

php-fpm のユーザー設定

インストール後、以下のフォルダパスから php.ini の設定や、fpm の設定を行います。

/etc/opt/remi/php81/

nginx から、php-fpm を使用するためには、UNIX ユーザーとグループの設定を nginx.conf で設定した値に合わせる必要があり、この設定を行わないと Bad gateway エラーで .php ファイルが実行できなくなります。

php-fpm.d/www.conf フォルダを開き、user =, group = から始まる値を探します。

何も設定を買えていない場合はおそらく 24 行目と 26 行目に上記のキーが見つかるかと思います。

/etc/opt/remi/php81/php-fpm.d/www.conf

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx ; ← apache を nginx に変える
; RPM: Keep a group allowed to write in log dir.
group = nginx ; ← apache を nginx に変える

ユーザー、グループ設定を変更後、listen.owner、listen.group の値も変更します。

初期の場合は 48 行目と、49 行目にありました。

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx ; 最初の ; を削除して nobody を nginx に変える
listen.group = nginx ; 最初の ; を削除して nobody を nginx に変える

php-fpm の待ち受け設定

ユーザー、グループを変更したファイルと同じファイル内の 38 行目あたりに listen = から始まるキーがあるので、探しファイルパスの形に変更します。

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php/php8.1-fpm.sock ; ← 127.0.0.1:9000 を /run/php/php7.2-fpm.sock; に変える。

ここまでで nginx で php-fpm を使用するための設定は終了です。

php-fpm の起動、自動起動設定

上記で設定しただけではまだ php-fpm は起動していないため、php-fpm を起動してあげる必要があります。

コマンドを実行し、起動した時点の www.conf が反映されるため、設定を変更した後は、ボックス内に記述している再起動コマンドを実行して、設定内容を反映させる必要があります。

# php-fpm を起動
sudo service php81-php-fpm start

# php-fpm を CentOS 起動時に自動起動
sudo systemctl enable php81-php-fpm

# php-fpm を再起動
sudo service php81-php-fpm restart

nginx の設定

起動後は、nginx の設定ファイルから .php ファイルは FastCGI 経由で実行するようにするだけです。

ここで設定する fastcgi_pass は、上記で設定した www.conf の listen = から始まるキーに設定した値の最初に unix: を付け足した物になります。

location ~ \.php$ {
    fastcgi_pass    unix:/run/php/php8.1-fpm.sock;
    fastcgi_index   index.php;
    fastcgi_param   SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    include         fastcgi_params;
}

unix: を付けておかないと .php ファイルが正常に開かれないため気をつけてください。

長らくの設定、大変お疲れ様でした。ご不明な点があればコマンドを残していただけると対応可能な範囲で解決のお手伝いができるかと思います。お気軽にコメントしてくださいね。

コメント

タイトルとURLをコピーしました