Ubuntu24.04でPHP-FPM接続失敗の直し方

Ubuntu24.04でPHP-FPM接続失敗の直し方
  • URLをコピーしました!

Apache PHP-FPM ソケット接続失敗は、Ubuntu 22.04 から 24.04 へアップグレードしたあとによく出るトラブルです。
PHP は 8.1 から 8.3 へ切り替わり、PHP 8.3-FPM 自体は起動しているのに、Apache だけが古い php8.1-fpm.sock を探し続けて失敗します。

本記事では、実機で出た AH02454 / AH01079 を起点に、原因の切り分けから設定変更・再起動・動作確認までを手順どおりにまとめます。

ポイント

PHP-FPM が動いていても、Apache の SetHandler が古いソケットパスを指していれば接続は失敗します。
直す対象は PHP 本体ではなく、Apache 側のソケット参照です。

目次

発生したエラー(AH02454 / AH01079)

Ubuntu 24.04 へアップグレード後、PHP ファイルへアクセスすると Apache のエラーログに次のような記録が出ました。

AH02454: FCGI: attempt to connect to Unix domain socket /var/run/php/php8.1-fpm.sock failed
AH01079: failed to make connection to backend

AH02454 は、Apache が Unix ドメインソケット経由で PHP-FPM に繋げなかったことを示します。
AH01079 は、その結果としてバックエンド(PHP-FPM)への接続そのものが失敗した、という意味です。

ブラウザ側では 503 や空白ページになることが多く、「PHP が壊れた」ように見えますが、実際はソケットパスの不一致であることがほとんどです。

原因:Apacheが古いphp8.1-fpm.sockを参照している

Ubuntu 22.04 系では PHP 8.1-FPM が一般的で、Apache のバーチャルホスト設定に次のような記述が残っていることがあります。

SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost/"

Ubuntu 24.04 へ上げると、標準の PHP は 8.3 側へ移ります。
その結果、実際に待ち受けているのは /var/run/php/php8.3-fpm.sock なのに、Apache だけが php8.1-fpm.sock を開きに行きます。
今回の切り分け結果も次のとおりでした。

  • PHP 8.3-FPM は正常起動
  • /var/run/php/php8.3-fpm.sock は存在
  • Apache 設定だけが php8.1-fpm.sock を参照

つまり「PHP が落ちている」のではなく、「Apache の接続先が古い」状態です。
Apache から PHP-FPM への連携方式(proxy_fcgi など)の概要は、Apache HTTP Server の mod_proxy_fcgi ドキュメントも参考になります。

確認方法:ソケットとApache設定を突き合わせる

設定を書き換える前に、次の3点を確認します。
「FPM は生きているか」「どのソケットがあるか」「Apache が何を参照しているか」です。

sudo systemctl status php8.3-fpm
ls /var/run/php/
sudo grep -r "php8.1-fpm.sock" /etc/apache2/

期待する結果の目安は次のとおりです。

確認項目正常時の目安
systemctl status php8.3-fpmactive (running)
ls /var/run/php/php8.3-fpm.sock がある
grep php8.1-fpm.sockサイト設定や conf にヒットする

php8.3-fpm が active でソケットもあるのに、grep で php8.1-fpm.sock が見つかるなら、原因はほぼ特定できています。
今回ヒットした主なファイルは次の2つでした。

  • /etc/apache2/sites-available/000-default.conf
  • /etc/apache2/sites-available/default-ssl.conf

環境によっては /etc/apache2/conf-enabled/ 配下や、独自のバーチャルホストにも残っていることがあります。
grep の結果をそのまま直せば漏れを減らせます。

設定変更:SetHandlerをphp8.3-fpm.sockへ

見つかった設定ファイルで、ソケットパスを PHP 8.3 側へ書き換えます。
例として、次のように FilesMatch 内の SetHandler を変更します。

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

変更対象は少なくとも次の2ファイルです。

  • /etc/apache2/sites-available/000-default.conf
  • /etc/apache2/sites-available/default-ssl.conf

編集後に、もう一度 grep して php8.1-fpm.sock が残っていないか確認してください。

sudo grep -r "php8.1-fpm.sock" /etc/apache2/

サイト固有の conf にだけ古いパスが残っていると、トップは直っても特定ディレクトリだけ失敗する、という状態になります。

不要なphp8.1-fpm設定の無効化

Apache 側に php8.1-fpm.conf が有効のまま残っている場合は、使用状況を確認したうえで無効化します。

ls /etc/apache2/conf-enabled/ | grep php
sudo a2disconf php8.1-fpm

まだ別サイトが PHP 8.1-FPM を使っているなら、無効化はしないでください。
すべて PHP 8.3 へ寄せている環境なら、a2disconf php8.1-fpm で古い設定の再読み込みを防げます。

Apacheを再起動する

設定変更後は、構文チェックをしてから Apache を再起動します。

sudo apache2ctl configtest
sudo systemctl restart apache2

Syntax OK が出てから restart してください。
構文エラーがある状態で再起動すると、サイト全体が落ちる原因になります。

動作確認

再起動後、次の順で確認します。

  1. PHP のテストページ、または既存の .php にブラウザでアクセスする
  2. エラーログに AH02454 / AH01079 が増えていないか見る
  3. 必要なら phpinfo() でバージョンが 8.3 になっているか確認する
sudo tail -n 50 /var/log/apache2/error.log
ls /var/run/php/
sudo systemctl status php8.3-fpm apache2

ページが表示され、ログに古いソケット接続失敗が出なければ完了です。
まだ失敗する場合は、別のバーチャルホストや conf-enabled に php8.1-fpm.sock が残っていないかを再検索してください。

まとめ

Ubuntu 22.04 から 24.04 へのアップグレード後に起きる Apache PHP-FPM ソケット接続失敗は、PHP 8.3-FPM の停止ではなく、Apache が古い php8.1-fpm.sock を参照し続けることが主因です。
対処の流れは次のとおりです。

  1. PHP 8.3-FPM の起動と php8.3-fpm.sock の存在を確認する
  2. /etc/apache2/ から php8.1-fpm.sock を洗い出す
  3. 000-default.conf と default-ssl.conf などの SetHandler を php8.3-fpm.sock へ変更する
  4. 不要なら a2disconf php8.1-fpm で旧設定を無効化する
  5. apache2ctl configtest 後に Apache を再起動し、ログとページ表示で確認する

「FPM は動いているのに Apache だけ繋がらない」ときは、まずソケットパスの突き合わせから入ると早く解決できます。
Ubuntu 上で Web スタックを組む別例として、UbuntuにNextCloudをインストールしてクラウドストレージ構築も参考にしてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次