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-fpm | active (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 してください。
構文エラーがある状態で再起動すると、サイト全体が落ちる原因になります。
動作確認
再起動後、次の順で確認します。
- PHP のテストページ、または既存の
.phpにブラウザでアクセスする - エラーログに
AH02454/AH01079が増えていないか見る - 必要なら
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 を参照し続けることが主因です。
対処の流れは次のとおりです。
- PHP 8.3-FPM の起動と
php8.3-fpm.sockの存在を確認する /etc/apache2/からphp8.1-fpm.sockを洗い出す000-default.confとdefault-ssl.confなどのSetHandlerをphp8.3-fpm.sockへ変更する- 不要なら
a2disconf php8.1-fpmで旧設定を無効化する apache2ctl configtest後に Apache を再起動し、ログとページ表示で確認する
「FPM は動いているのに Apache だけ繋がらない」ときは、まずソケットパスの突き合わせから入ると早く解決できます。
Ubuntu 上で Web スタックを組む別例として、UbuntuにNextCloudをインストールしてクラウドストレージ構築も参考にしてください。


コメント