PHP-FPM:PHPサイト
VDSへのPHP-FPMのインストール、Nginxとの連携、ティアのメモリに応じたプロセス数の選択、502・504エラーのトラブルシューティングを説明します。
更新日 2026年8月23日
PHP-FPM は PHP コードを実行する独立したサービスであり、Web サーバーはリクエストを渡すだけです。WordPress、Laravel、Bitrix など、PHP で動作するほぼすべてのものがこの仕組みで動いています。
インストール
apt update
apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
systemctl enable --now php8.3-fpm
AlmaLinux と CentOS Stream では dnf install -y php-fpm php-mysqlnd ... を使用します。サービス名は php-fpm です。正確なバージョンを確認するには、次を実行します。
php -v
systemctl list-units | grep fpm
Nginx への接続
server {
listen 80;
server_name example.ru;
root /var/www/example.ru/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known) { deny all; }
}
nginx -t && systemctl reload nginx
echo '<?php phpinfo();' > /var/www/example.ru/public/info.php
/info.php を開いて PHP が動作することを確認し、すぐにこのファイルを削除してください。バージョン、パス、モジュール一覧が公開されてしまいます。
プロセスをいくつ維持するか
PHP のワーカープロセスは 1 つあたり 40~120 MB を消費します。データベースとシステム用のメモリを残しつつ、ティアに合わせてサイズを決めます。これは /etc/php/8.3/fpm/pool.d/www.conf で設定します。
| ティア | メモリ | 適切な pm.max_children |
|---|---|---|
| VDS-1 | 2 GB | 5 |
| VDS-2 | 4 GB | 10 |
| VDS-3 | 8 GB | 20 |
| VDS-5 | 24 GB | 60 |
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500
pm.max_requests は N リクエスト後にプロセスを再起動するため、コード内のメモリリークが週の終わりまで蓄積されることはありません。
FPM で役立つ php.ini の値: memory_limit = 256M、upload_max_filesize = 64M、post_max_size = 64M、opcache.enable = 1。
変更後は systemctl reload php8.3-fpm を実行します。
よくあるエラー
| 症状 | 原因 | 対処 |
|---|---|---|
502 Bad Gateway | ソケットパスが間違っている、またはサービスが起動していない | /run/php/ 内の実際のファイルと fastcgi_pass を照合する |
504 Gateway Time-out | スクリプトの実行がタイムアウトより長い | fastcgi_read_timeout と max_execution_time を引き上げる |
| 実行されずにブラウザがファイルをダウンロードする | location ~ \.php$ ブロックが一致していない | location ブロックの順序を確認し、nginx -t を実行する |
ログに server reached pm.max_children | プロセスが足りない | メモリが許せば上限を引き上げ、そうでなければティアを上げる |
ログ: /var/log/php8.3-fpm.log と /var/log/nginx/error.log。
サイトのデータベースは、自身のスキーマのみに権限を持つ専用ユーザーで作成してください — ユーザーと権限。CMS の設定で
rootアカウントを使うのは、すべてのデータベースを一度に失う直接の原因になります。