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-fpm | active (running) と表示 | inactive (dead) / failed |
自動起動設定 | systemctl is-enabled php-fpm | enabled | disabled |
ポート確認 | `ss -ltnp | grep php-fpm` | 127.0.0.1:9000 で LISTEN |
ソケット確認 | ls -l /run/php-fpm/www.sock | srw-rw---- のように存在 | ファイルがない/権限が root:root で Web サーバーが読めない |
エラーログ確認 | journalctl -u php-fpm | エラーなし | permission denied / address already in use |
Nginx 側設定確認 | /etc/nginx/conf.d/*.conf | fastcgi_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 側の設定不一致が原因です。
あわせて読みたい


Nginx Proxy 経由でバックエンドに繋がらないときの確認ポイント
はじめに Nginx をリバースプロキシとして利用していると、バックエンドサーバーに接続できない というエラーに直面することがあります。たとえば、以下のような症状で…
あわせて読みたい


Nginx/Apache が起動できないときの確認手順
Web サーバーとして広く使われる Nginx や Apache (httpd) は、設定変更や環境の影響で起動に失敗することがあります。「起動コマンドを実行してもエラーが出る」「サー…
あわせて読みたい


Nginx が 502 Bad Gateway を返すときの原因と対処
概要 Nginx をリバースプロキシとして利用する際に、クライアントに 502 Bad Gateway が返ることがあります。これは 「Nginx がバックエンドサーバーと通信できなかった…