Skip to content
VDS · ウェブサイトとウェブサーバー

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-12 GB5
VDS-24 GB10
VDS-38 GB20
VDS-524 GB60
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 アカウントを使うのは、すべてのデータベースを一度に失う直接の原因になります。