Ubuntu 26.04 で PHP アプリケーションを動かす場合、Web サーバーに PHP を直接組み込む構成よりも、PHP-FPM を別プロセスとして動かし、Nginx や Apache から FastCGI で渡す構成が扱いやすいです。
この記事では、Ubuntu 26.04 で PHP と PHP-FPM を導入し、サービス、FPM pool、Unix socket、Web サーバーとの接続点を確認する基本手順をまとめます。Nextcloud や WordPress のような PHP アプリケーションを載せる前の土台確認として使える内容です。
- PHP-FPM の役割と Web サーバーとの分担
- PHP と PHP-FPM パッケージの導入
- FPM pool、Unix socket、サービス状態の確認
- Nginx / Apache から PHP-FPM に接続する基本形
- 設定検証、ログ確認、検証ファイルの後始末
| 対象 OS | Ubuntu 26.04 Server |
|---|---|
| PHP 実行方式 | PHP-FPM |
| FPM pool | /etc/php/8.5/fpm/pool.d/www.conf |
| Unix socket | /run/php/php8.5-fpm.sock |
| 主な確認コマンド | php -v、php -m、php-fpm8.5 -t、systemctl status |
PHP-FPM の役割を確認する
PHP-FPM は、PHP を FastCGI プロセスとして常駐させる仕組みです。Web サーバーは HTTP の受付と静的ファイル配信を担当し、PHP の実行は FPM に渡します。これにより、Web サーバーと PHP 実行環境の責務を分けられます。
- Nginx から
fastcgi_passで PHP-FPM に渡す - Apache から
proxy_fcgiで PHP-FPM に渡す - PHP の実行ユーザー、pool、リソース制限を分けて管理する
- 複数アプリケーションでは pool を分けて影響範囲を小さくする
PHP と PHP-FPM をインストールする
まず PHP 本体、PHP-FPM、よく使う拡張モジュールを導入します。実際の環境では、アプリケーションが必要とする拡張だけに絞って構いません。
sudo apt update
sudo apt install -y \
php \
php-fpm \
php-apcu \
php-bcmath \
php-bz2 \
php-curl \
php-gd \
php-gmp \
php-imagick \
php-intl \
php-ldap \
php-mbstring \
php-mysql \
php-redis \
php-smbclient \
php-xml \
php-zip \
imagemagickUbuntu 26.04 の確認環境では PHP 8.5 系を前提にしています。サービス名や設定ディレクトリは、実際に導入された PHP バージョンに合わせて確認します。
PHP-FPM サービスを起動する
PHP-FPM を有効化して起動します。サービス名は PHP のバージョンを含むため、まず unit 名を確認してから操作すると安全です。
systemctl list-unit-files 'php*-fpm.service'
sudo systemctl enable --now php8.5-fpm.service
systemctl status php8.5-fpm.service --no-pagerPHP と拡張モジュールを確認する
CLI の PHP バージョン、読み込まれている拡張モジュール、PHP-FPM バイナリを確認します。Web アプリケーションで必要な拡張が入っていない場合、アプリケーション側の画面やログでエラーになります。
php -v
php -m
command -v php-fpm8.5
php-fpm8.5 -vFPM pool と Unix socket を確認する
標準の FPM pool は /etc/php/8.5/fpm/pool.d/www.conf にあります。Web サーバーから接続する Unix socket は、多くの環境で /run/php/php8.5-fpm.sock です。
sudo grep -E '^(user|group|listen|listen.owner|listen.group|listen.mode)\s*=' /etc/php/8.5/fpm/pool.d/www.conf
ls -l /run/php/
ls -l /run/php/php8.5-fpm.sockWeb サーバーが socket に接続できない場合は、FPM の listen.owner、listen.group、listen.mode と、Web サーバーの実行ユーザーを合わせて確認します。
PHP-FPM 設定を検証する
FPM の設定を変更したあとは、構文検証を通してから reload します。restart は接続中の処理へ影響しやすいため、通常の設定反映では reload を優先します。
sudo php-fpm8.5 -t
sudo systemctl reload php8.5-fpm.service
systemctl status php8.5-fpm.service --no-pagerNginx から PHP-FPM に接続する
Nginx では、PHP ファイルへのリクエストを fastcgi_pass で FPM socket に渡します。サイト設定側で、対象の socket パスが実際の PHP-FPM と一致していることを確認します。
sudo tee /etc/nginx/snippets/php-fpm-8.5.conf >/dev/null <<'EOF'
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.5-fpm.sock;
}
EOF
sudo nginx -t
sudo systemctl reload nginx.serviceApache から PHP-FPM に接続する
Apache では proxy_fcgi と setenvif を有効化し、PHP ファイルを FPM socket に渡します。既存の mod_php 構成と混在させないように注意します。
sudo a2enmod proxy_fcgi
sudo a2enmod setenvif
sudo tee /etc/apache2/conf-available/php-fpm-8.5.conf >/dev/null <<'EOF'
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.5-fpm.sock|fcgi://localhost/"
</FilesMatch>
EOF
sudo a2enconf php-fpm-8.5
sudo apache2ctl -t
sudo systemctl reload apache2.service簡単な PHP 動作確認をする
検証用の PHP ファイルを一時的に置き、Web サーバー経由で PHP が実行されるか確認します。確認後は必ず削除します。
sudo tee /var/www/html/phpinfo.php >/dev/null <<'EOF'
<?php
phpinfo();
EOF
curl -I http://www.example.com/phpinfo.php
sudo rm -f /var/www/html/phpinfo.phpphpinfo() は環境情報を表示するため、公開環境に残さないようにします。動作確認後は削除し、必要であればアクセスログにも不要な露出がないか確認します。ログを確認する
PHP-FPM が起動しない場合や、Web サーバー経由で 502 になる場合は、FPM と Web サーバーのログを両方確認します。socket パス、権限、FPM pool のエラーを切り分けます。
journalctl -u php8.5-fpm.service --no-pager -n 100
sudo tail -n 100 /var/log/php8.5-fpm.log
journalctl -u nginx.service --no-pager -n 100
journalctl -u apache2.service --no-pager -n 100アプリケーションごとに pool を分ける
複数の PHP アプリケーションを同じサーバーで動かす場合は、標準の www pool だけでなく、アプリケーションごとに pool を分けると管理しやすくなります。ユーザー、socket、ログ、リソース上限を分けることで、障害時の影響範囲も小さくできます。
- アプリケーションごとに実行ユーザーを分ける
- pool ごとに socket とログを分ける
pm.max_childrenなどの上限値を用途に合わせる- Web サーバー側の接続先 socket を pool ごとに合わせる
まとめ
Ubuntu 26.04 の PHP-FPM 基本設定では、PHP と PHP-FPM を導入し、サービス、FPM pool、Unix socket、Web サーバー側の接続設定を順番に確認します。
Nginx では fastcgi_pass、Apache では proxy_fcgi を使って PHP-FPM に処理を渡します。設定検証、ログ確認、検証ファイルの削除まで含めて確認すると、PHP アプリケーションを載せる前の土台が安定します。

