手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 PHP-FPM の基本設定 – Web サーバーと PHP 実行環境を分離する

関連する記事

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 に接続する基本形
  • 設定検証、ログ確認、検証ファイルの後始末
対象 OSUbuntu 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 -vphp -mphp-fpm8.5 -tsystemctl status
参考書籍
参考書籍
Advanced Ubuntu Administration and Management Best Practices
Ubuntu Server 上で Web サーバー、PHP、サービス運用を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見る
このリンクは Amazon アソシエイトリンクです。

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 \
  imagemagick

Ubuntu 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-pager

PHP と拡張モジュールを確認する

CLI の PHP バージョン、読み込まれている拡張モジュール、PHP-FPM バイナリを確認します。Web アプリケーションで必要な拡張が入っていない場合、アプリケーション側の画面やログでエラーになります。

コマンド
php -v
php -m
command -v php-fpm8.5
php-fpm8.5 -v

FPM 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.sock

Web サーバーが socket に接続できない場合は、FPM の listen.ownerlisten.grouplisten.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-pager

Nginx から 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.service

Apache から PHP-FPM に接続する

Apache では proxy_fcgisetenvif を有効化し、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.php
phpinfo() は環境情報を表示するため、公開環境に残さないようにします。動作確認後は削除し、必要であればアクセスログにも不要な露出がないか確認します。

ログを確認する

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 アプリケーションを載せる前の土台が安定します。

関連する記事
Ubuntu 26.04 PHP-FPM の基本設定 – Web サーバーと PHP 実行環境を分離する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る