【完全版】WordPressサイトを高速・安全に!PHP-FPMのバージョンアップを徹底解説

スポンサーリンク
スポンサーリンク
WordPress
スポンサーリンク
スポンサーリンク

導入

このブログのキャッチコピーは「未来の自分のための技術メモ、時々あなたのためのヒント。」ですが、今回はあなたのWordPressサイトの**「心臓」**とも言えるPHPのバージョンアップに関する、非常に重要かつ詳細なガイドです。

「最近、WordPressの表示がなんだか遅い気がする…」

「サーバーのセキュリティが心配…」

もし、そんな悩みを抱えているなら、その原因はPHPのバージョンが古いことかもしれません。PHPを最新版にすることは、サイトの表示速度向上とセキュリティ強化に直結する、最も効果的な対策の一つです。

この記事では、PHPを高速に動作させる「PHP-FPM」環境下でのPHPバージョンアップ手順を、具体的なコマンドや設定ファイルの編集例を交えながら、初心者の方でも確実に作業できるよう徹底的に解説します。


なぜPHPのバージョンアップがこんなにも重要なのか?

PHPのバージョンアップは、まるで車のエンジンを最新モデルに交換するようなものです。主に3つの大きなメリットがあります。

  1. サイトが「爆速」に進化する!新しいPHPバージョンは、古いバージョンと比較して処理速度が飛躍的に向上しています。特にPHP 7.x系からPHP 8.x系へのメジャーバージョンアップは、体感できるレベルでWordPressサイトの表示速度が改善されます。これは、訪問者の満足度向上やSEOにも良い影響を与えます。
  2. セキュリティが「鉄壁」になる!古いPHPバージョンには、時間と共に新たなセキュリティの「穴(脆弱性)」が見つかることがあります。サポートが終了した(EOL: End-of-Life)バージョンを使い続けることは、サイトがハッキングされるリスクを大幅に高めます。最新バージョンは常にこれらの脆弱性が修正されており、あなたのサイトを攻撃から守る盾を強化します。
  3. 新しい機能と互換性が手に入る!WordPress本体やプラグイン、テーマは、常に最新のPHPバージョンに合わせて開発が進んでいます。古いPHPのままでは、最新のWordPressにアップデートできなかったり、新しいプラグインが使えなかったりする問題が発生します。

PHP-FPMとは? WordPressを「超高速」にする魔法の仕組み

PHP-FPM (FastCGI Process Manager)は、PHPを動かすための特別なプロセス管理ツールです。WordPressのようなPHPアプリケーションがWebサーバー(NginxやApache)と連携する際に、PHPの処理を効率的に行い、サイトを高速化する役割を担っています。

イメージとしては、Webサーバーが「お客様(訪問者)からの注文を受けるレストランのウェイター」だとすると、PHP-FPMは「厨房で料理(PHP処理)を効率よく作るシェフとそのマネージャー」のようなものです。

ウェイターが注文をPHP-FPMに渡し、PHP-FPMがそれを捌いて料理を素早く提供することで、お客様は待たされることなく美味しい料理(Webサイトのコンテンツ)を楽しむことができる、という仕組みです。


PHPバージョンアップ前の「超」重要事項!

バージョンアップ作業を開始する前に、以下の点を必ず確認してください。

  1. バックアップは完璧ですか?万が一の事態に備え、WordPressのファイルとデータベースの完全なバックアップを必ず取得してください。これは、どんなに経験豊富なエンジニアでも、バージョンアップ作業では必須中の必須です。
    • ファイル: WordPressのインストールディレクトリ全体を圧縮して保存。
    • データベース: phpMyAdminやmysqldumpコマンドなどでデータベースをエクスポート。
  2. WordPressとプラグインの互換性は?お使いのWordPress本体、テーマ、そして全てのプラグインが、新しいPHPバージョン(例: PHP 8.2)に対応しているかを確認してください。古いものだと、バージョンアップ後にサイトが正常に動かなくなることがあります。
    • 各プラグインの公式サイトやWordPress管理画面のプラグイン詳細で「〇〇バージョンのPHPが必要です」といった記述を確認しましょう。
    • 不安な場合は、テスト環境で先に試すことを強く推奨します。

PHP-FPMバージョンアップの具体的な手順(CentOS / Rocky Linux向け)

ここからは、CentOSやRocky LinuxといったRed Hat系のOSを前提に、PHP 7.xからPHP 8.xへアップグレードする具体的な手順を、コマンドと設定ファイルの例を交えながら解説します。

Step 1: 新しいPHPバージョンの「お店(リポジトリ)」を追加する

デフォルトの状態では、最新のPHPバージョンは提供されていないことが多いです。そこで、Remiという信頼できるサードパーティ製のリポジトリを追加します。これは「最新のPHPを取り扱う専門店」をあなたのサーバーに教えてあげるようなものです。

# EPELリポジトリをインストール(Remiリポジトリの前提となる場合が多い)
sudo yum install epel-release

# Remiリポジトリをインストール
# ご利用のOSバージョンに合わせて適切なURLを選択してください。
# Rocky Linux 8 / CentOS 8 の場合:
sudo yum install https://rpms.remi.net/enterprise/remi-release-8.rpm
# CentOS 7 の場合:
# sudo yum install https://rpms.remi.net/enterprise/remi-release-7.rpm
  • 解説: yum installコマンドでepel-releaseremi-releaseをインストールしています。これにより、サーバーがRemiリポジトリから新しいパッケージを検索・インストールできるようになります。

Step 2: 今のPHPを止めて、新しいPHPを「開店」する

次に、現在動いている古いPHPのバージョンを一旦無効にし、目的の新しいPHPバージョンを有効化してインストールします。

# 1. 現在有効なPHPモジュールをリセット(PHPのバージョン指定を解除)
# Rocky Linux 8 / CentOS 8 の場合:
sudo dnf module reset php
# CentOS 7 の場合(環境による。`dnf`が使えない場合はスキップ可):
# sudo yum module reset php

# 2. インストールしたいPHPバージョン(例: PHP 8.2)を「有効化」
sudo dnf module enable php:remi-8.2
# ※ もしPHP 7.4を有効化したい場合は: sudo dnf module enable php:remi-7.4

# 3. 新しいPHP本体、PHP-FPM、WordPressに必要な各種モジュールをインストール
sudo dnf install php php-fpm php-cli php-mysqlnd php-gd php-xml php-mbstring php-json php-opcache
  • 解説:
    • dnf module reset php: これまでのPHPのバージョン指定を一旦クリアするコマンドです。
    • dnf module enable php:remi-8.2: RemiリポジトリからPHP 8.2を有効化し、これがデフォルトでインストールされるように設定します。
    • dnf install ...: PHP本体と、WordPressが動作するために最低限必要な拡張機能(php-mysqlndはデータベース接続用、php-gdは画像処理用など)をインストールします。もし特定のプラグインが他のPHP拡張機能を要求する場合は、ここに追記して一緒にインストールしてください。

Step 3: PHP-FPMの「交通整理」ルールを調整する

PHP-FPMは、Webサーバーからのリクエストを効率的にPHPに渡す役割を担っています。その設定ファイルを確認・調整します。

/etc/php-fpm.d/www.conf を編集します。これはPHP-FPMがどのように動作するかを定義するファイルです。

# -------------------------------------------------------------
# 変更前 (コメントアウトされている場合や異なるユーザーの場合)
# user = apache
# group = apache
# listen = 127.0.0.1:9000

# 変更後 (WebサーバーがNginxの場合の推奨設定例)
user = nginx        ; PHP-FPMプロセスを実行するLinuxユーザー (Webサーバーのユーザーに合わせる)
group = nginx       ; PHP-FPMプロセスを実行するLinuxグループ (Webサーバーのグループに合わせる)

listen = /var/run/php-fpm/www.sock ; WebサーバーがPHP-FPMと通信するためのソケットファイルのパス
; ※ TCPポートで通信したい場合は「listen = 127.0.0.1:9000」のように設定
  • 解説:
    • user / group: PHP-FPMのプロセスがどのLinuxユーザー・グループ権限で動作するかを指定します。これはWebサーバー(Nginxならnginx、Apacheならapache)のユーザーに合わせるのが一般的で、ファイルの読み書き権限の問題を防ぎます。
    • listen: WebサーバーがPHP-FPMとどのように通信するかを設定します。
      • unix:/var/run/php-fpm/www.sock (UNIXソケット): Nginxとの連携でよく使われる、高速な通信方法です。
      • 127.0.0.1:9000 (TCPポート): Apacheや、Nginxでも特定の環境で使われることがあります。Webサーバーの設定と一致させる必要があります。

Step 4: Webサーバーに新しいPHPの「窓口」を教える

Webサーバー(NginxまたはApache)は、PHPのファイルを処理する際に、PHP-FPMにその処理を依頼します。そのため、Webサーバーの設定ファイルで、新しいPHP-FPMの「窓口」がどこにあるかを正確に教えてあげる必要があります。

Nginxの場合 (/etc/nginx/conf.d/your-site.confなど)

コード スニペット

server {
    listen 80;
    server_name your-domain.com;
    root /var/www/html; # WordPressのインストールディレクトリ

    location / {
        index index.php index.html index.htm;
        try_files $uri $uri/ /index.php?$args;
    }

    # PHPファイルをPHP-FPMに渡す設定
    location ~ \.php$ {
        # WordPressのルートディレクトリを指定
        root           /var/www/html;
        # PHP-FPMのlisten設定に合わせる
        fastcgi_pass   unix:/var/run/php-fpm/www.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params; # FastCGIの共通パラメータを読み込み
    }
    # ... その他の設定
}
  • 解説: fastcgi_passの行が最も重要です。PHP-FPMのlistenで設定したソケットパス(またはTCPポート)と完全に一致させてください。

Apacheの場合 (/etc/httpd/conf.d/your-site.confなど、mod_proxy_fcgiを使用)

<VirtualHost *:80>
    ServerName your-domain.com
    DocumentRoot /var/www/html # WordPressのインストールディレクトリ

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

    # PHPファイルをPHP-FPMに渡す設定
    <FilesMatch \.php$>
        # PHP-FPMのlisten設定に合わせる
        SetHandler "proxy:unix:/var/run/php-fpm/www.sock|fcgi://localhost/"
        # またはTCPポートの場合: SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>
  • 解説: SetHandlerの行で、.phpという拡張子のファイルをPHP-FPMに処理させるように指示しています。ここでもPHP-FPMのlisten設定と一致させることが必須です。

Step 5: 全てを再起動して、新しいPHPを「本稼働」させる!

すべての設定ファイルを変更したら、PHP-FPMサービスとWebサーバーサービスを再起動して、新しい設定を反映させます。

# 1. PHP-FPMサービスを再起動
sudo systemctl restart php-fpm

# 2. Webサーバーサービスを再起動
sudo systemctl restart nginx   # Nginxの場合
# sudo systemctl restart httpd # Apacheの場合
  • 解説: これにより、古いPHPプロセスが停止し、新しいPHPバージョンでPHP-FPMが起動します。Webサーバーも新しいPHP-FPMの窓口を使ってPHPリクエストを処理するようになります。

最終確認: 本当にPHPは更新された?

Webサイトにアクセスし、以下の方法でPHPバージョンが更新されていることを確認しましょう。

  1. WordPress管理画面: 「ツール」→「サイトヘルス」→「情報」タブの「サーバー」セクションで、「PHPバージョン」を確認します。
  2. phpinfo()ファイル:WordPressのルートディレクトリ(wp-config.phpがある場所)に、phpinfo.phpという名前で以下の内容のファイルを作成し、Webブラウザでアクセスします。(**確認後、必ずこのファイルは削除してください!**セキュリティ上のリスクがあります。)PHP<?php phpinfo(); ?> ブラウザでhttps://your-domain.com/phpinfo.phpにアクセスし、ページ上部に表示される「PHP Version」を確認します。

PHPバージョンアップ時のトラブルシューティングと注意点

作業中に問題が発生したり、バージョンアップ後にサイトが正常に表示されなくなったりする可能性もゼロではありません。落ち着いて以下の点を確認しましょう。

  1. サイトが真っ白になった、または500エラーが表示される
    • 原因: PHPの構文エラー、アプリケーションの互換性問題、必要なPHPモジュール不足、WebサーバーまたはPHP-FPMの設定ミス。
    • 対処法:
      • エラーログを確認: sudo tail -f /var/log/php-fpm/www-error.logsudo tail -f /var/log/nginx/error.log (またはhttpd/error.log) を確認し、具体的なエラーメッセージを探します。
      • PHPモジュール不足: 特にPHP 7.xから8.xへのアップグレードでは、php-jsonなどが独立したモジュールになっている場合があります。Step 2で必要なモジュールが全てインストールされているか再確認しましょう。
      • php.iniの設定ミス: memory_limitなどの設定値が、新しいphp.iniで初期値に戻っていないか確認します。(/etc/php.ini または /etc/php-fpm.d/www.conf 内のphp_admin_valueなど)
  2. 必要なPHPモジュールが不足しているWordPressやプラグインによっては、特定のPHP拡張機能(例: php-zip, php-intlなど)を要求する場合があります。Step 2のdnf installコマンドに、不足しているモジュールを追加して再度実行しましょう。
  3. WordPressテーマやプラグインの互換性問題新しいPHPバージョンで動かないテーマやプラグインがある場合、以下の対策を検討します。
    • 該当するテーマやプラグインのアップデート版を探す。
    • 代替となるテーマやプラグインに切り替える。
    • どうしても解決しない場合は、一時的にPHPバージョンを元に戻すことも検討(バックアップが重要!)
  4. php-fpm.d/www.conf と Webサーバー設定のlistenが合っていないPHP-FPMがunix:/var/run/php-fpm/www.sockで待ち受けているのに、Webサーバーが127.0.0.1:9000に接続しようとしている、といった不一致がないか再確認してください。

まとめ

WordPressのPHPバージョンアップは、サーバー管理の中でも少し専門的で、手間がかかる作業です。しかし、サイトの「パフォーマンス」「安全性」「将来性」を大きく向上させる、まさに「サイトの健康診断」とも言える重要なメンテナンスです。

この記事が、あなたのWordPressサイトを常に最新・最速・最強の状態に保つための一助となれば幸いです。焦らず、一つ一つの手順を確実に実行していけば、きっと成功するはずです!

コメント

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