🚀

Webサーバーのパフォーマンスを最大化!PHP-FPMのバージョンアップ手順と注意点

に公開

はじめに

Webアプリケーション、特にWordPressなどのPHPで動作するCMSを運用している方にとって、PHPのバージョンはパフォーマンスとセキュリティに直結する重要な要素です。古いPHPバージョンを使い続けることは、サイトの速度低下や脆弱性のリスクを高めます。

この記事では、自身のWikiメモを元に、PHPを高速に動作させるための仕組みであるPHP-FPM環境下でのPHPバージョンアップ手順と、その際の注意点について解説します。

なぜPHPをバージョンアップするのか?

PHPのバージョンアップには、主に以下のメリットがあります。

  1. パフォーマンスの向上: 新しいPHPバージョンは、前のバージョンよりも高速に動作するように最適化されています。特にPHP 7.x以降は劇的な性能向上がありました。
  2. セキュリティの強化: 古いバージョンには既知の脆弱性が存在する可能性があります。セキュリティアップデートが提供されなくなるEOL (End-of-Life) バージョンは特に危険です。
  3. 新機能の利用: 新しい言語機能やライブラリを利用できるようになります。

前提環境

  • OS: CentOS / Rocky Linux (Red Hat系)
  • Webサーバー: Nginx または Apache (PHP-FPMと連携)
  • 現在のPHPバージョン: (例: PHP 7.4)
  • アップグレード対象のPHPバージョン: (例: PHP 8.2)

PHP-FPMとは?

PHP-FPM (FastCGI Process Manager)は、PHPの処理を高速化するためのプロセス管理ツールです。ApacheやNginxといったWebサーバーと連携し、PHPスクリプトの実行要求を効率的にPHPプロセスに渡し、結果を受け取ってWebサーバーに返す役割を担います。

Step 1: 新しいPHPバージョンのリポジトリを追加する

Red Hat系のOSで最新のPHPバージョンをインストールするには、通常Remiリポジトリを使用します。

# EPELリポジトリをインストール(Remiの前提)
sudo yum install epel-release

# Remiリポジトリをインストール
sudo yum install [https://rpms.remi.net/enterprise/remi-release-8.rpm](https://rpms.remi.net/enterprise/remi-release-8.rpm) # Rocky Linux 8の場合
# CentOS 7 の場合はこちら: sudo yum install [https://rpms.remi.net/enterprise/remi-release-7.rpm](https://rpms.remi.net/enterprise/remi-release-7.rpm)

Step 2: 既存のPHP-FPMを無効化し、新しいPHPバージョンをインストールする

yum (または dnf) の--enablerepoオプションで、インストールしたいPHPバージョンを指定します。

# 既存のPHP-FPMモジュールを無効化
sudo dnf module reset php # Rocky Linux 8
# sudo yum module reset php # CentOS 7 (一部環境)

# インストールしたいPHPバージョンを有効化
sudo dnf module enable php:remi-8.2 # PHP 8.2を有効化
# sudo dnf module enable php:remi-7.4 # PHP 7.4を有効化したい場合

# PHPとそのFPM、そして必要なモジュールをインストール
sudo dnf install php php-fpm php-cli php-mysqlnd php-gd php-xml php-mbstring php-json php-opcache

注意:
インストールするPHPモジュールは、php-mysqlndのように、アプリケーションが依存しているものを全て含める必要があります。不足があると、アプリケーションが正しく動作しません。

Step 3: PHP-FPMの設定ファイルを調整する

php-fpm.confとそのプール設定ファイル (www.confなど) を確認・調整します。

php-fpm.conf (/etc/php-fpm.conf)

ログファイルのパスなどを確認します。

www.conf (/etc/php-fpm.d/www.conf)

PHP-FPMがどのユーザーで動作するか、どのソケットで待ち受けるかなどを設定します。
特にlistenパラメータはWebサーバーの設定と合わせる必要があります。

/etc/php-fpm.d/www.conf
# ユーザーとグループ
user = nginx
group = nginx

# 待ち受けソケット
# NginxやApacheと連携するパスを指定
listen = /var/run/php-fpm/www.sock
# またはTCPポート (listen = 127.0.0.1:9000)

Step 4: Webサーバー(Nginx / Apache)の設定を調整する

Webサーバーが新しいPHP-FPMのソケット(またはポート)に接続するように設定を変更します。

Nginxの場合

nginx.conf
server {
    ...
    location ~ \.php$ {
        root           /var/www/html; # プロジェクトのDocumentRoot
        fastcgi_pass   unix:/var/run/php-fpm/www.sock; # www.confのlistenに合わせる
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
    ...
}

Apacheの場合 (mod_proxy_fcgi を使用)

httpd.conf
<VirtualHost *:80>
    ServerName your-domain.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php-fpm/www.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>

Step 5: PHP-FPMとWebサーバーを再起動する

設定を反映させるために、PHP-FPMサービスとWebサーバーサービスを再起動します。

sudo systemctl restart php-fpm
sudo systemctl restart nginx # または httpd

ウェブサイトにアクセスし、PHP情報ページ (phpinfo()) などで新しいPHPバージョンが反映されていることを確認しましょう。

注意点とトラブルシューティング

  • アプリケーションの互換性: 新しいPHPバージョンは、古いPHPで書かれたアプリケーションと互換性がない場合があります(特にメジャーバージョンアップ時)。事前にテスト環境での動作確認を徹底しましょう。
  • エラーログの確認: 何か問題が発生した場合は、PHP-FPMのログ (/var/log/php-fpm/www-error.logなど) やWebサーバーのログ (/var/log/nginx/error.logなど) を確認しましょう。
  • php.iniの設定: メモリ制限 (memory_limit) やファイルアップロードサイズ (upload_max_filesize) など、php.iniの設定も新しいバージョンで再度確認・調整が必要になる場合があります。

おわりに

PHP-FPMのバージョンアップは、Webアプリケーションの性能とセキュリティを維持・向上させる上で不可欠な作業です。特にメジャーバージョンアップは、アプリケーションとの互換性チェックが重要ですが、その効果は絶大です。

この記事が、あなたのWebサーバーを最新の状態に保つための一助となれば幸いです。


この記事で紹介した内容以外にも、技術情報をブログで発信しています。
MEANTECH
https://meantech.fontfontfont.com/

Discussion