PHP-FPM が起動しない/503 エラーが出る原因と解決方法

  • URLをコピーしました!

Web サーバー(Nginx や Apache)を使う際にバックエンドで動作する PHP-FPM (FastCGI Process Manager) が起動しない、あるいは 503 Service Unavailable を返すトラブルはよく発生します。
本記事では、PHP-FPM が起動しない/503 エラーが出るときの確認ポイントと解決方法を整理します。

目次

よくある原因

  • PHP-FPM サービス自体が起動していない
  • 設定ファイル (php-fpm.conf / www.conf) の記述ミス
  • ソケットファイルの権限問題(/run/php-fpm.sock など)
  • Nginx / Apache の設定で PHP-FPM との接続先が不一致
  • PHP スクリプトのエラーでプロセスが停止
  • ポート競合(127.0.0.1:9000 など)
  • SELinux / AppArmor による制約

確認ポイントと正常/異常例

確認内容コマンド正常例異常例
サービス起動状態systemctl status php-fpmactive (running) と表示inactive (dead) / failed
自動起動設定systemctl is-enabled php-fpmenableddisabled
ポート確認`ss -ltnpgrep php-fpm`127.0.0.1:9000 で LISTEN
ソケット確認ls -l /run/php-fpm/www.socksrw-rw---- のように存在ファイルがない/権限が root:root で Web サーバーが読めない
エラーログ確認journalctl -u php-fpmエラーなしpermission denied / address already in use
Nginx 側設定確認/etc/nginx/conf.d/*.conffastcgi_pass unix:/run/php-fpm/www.sock; が一致fastcgi_pass 127.0.0.1:9000; など不一致
PHP スクリプトエラーtail -f /var/log/php-fpm/error.logエラーが出ていないFatal error / Parse error

解決方法

1. サービスの起動確認

sudo systemctl start php-fpm
sudo systemctl enable php-fpm
  • 状態が active (running) になれば OK。
  • failed の場合はログを確認します。

2. ソケットファイルの権限を修正

ls -l /run/php-fpm/www.sock

異常例(権限不足で Nginx がアクセス不可):

srw------- 1 root root 0 Oct  4 12:00 /run/php-fpm/www.sock

修正方法(例:nginx ユーザーにアクセス権を付与):

sudo chown nginx:nginx /run/php-fpm/www.sock
sudo chmod 660 /run/php-fpm/www.sock

3. 設定ファイルの修正

  • www.conf の確認:
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

修正後は再起動:

sudo systemctl restart php-fpm

4. Nginx 側の設定確認

例:ソケット経由の場合

location ~ \.php$ {
    fastcgi_pass unix:/run/php-fpm/www.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

例:ポート経由の場合

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
  • PHP-FPM 側と一致しているかを必ず確認してください。

5. ポート競合を解消

エラーログに address already in use が出ている場合:

sudo ss -ltnp | grep 9000

別プロセスが使っている場合は設定を変更してポートをずらすか、そのプロセスを停止します。

6. SELinux の影響を確認

一時的に無効化して切り分け:

sudo setenforce 0

これで正常に動作すれば、SELinux ポリシーを調整してください。

まとめ

  • まず systemctl status php-fpm で状態を確認
  • ソケット or ポートの設定が Nginx 側と一致しているか要チェック
  • 権限・SELinux・ポート競合も要注意ポイント

多くの場合、ソケットの権限問題か Nginx 側の設定不一致が原因です。

目次