✅ 1. 背景:CGIとは何か?
まずは前提となる「CGI(Common Gateway Interface)」から整理します。
🔹 CGI(旧来の仕組み)
- Webサーバーが
.php
や .pl
などの動的なスクリプトを実行するために、リクエストごとに外部プログラムを起動していた方式
- 毎回「PHPを起動 → 実行 → 終了」を繰り返すため、非常に遅く、負荷が大きい
✅ 2. FastCGI とは?
▶ CGI の「高速版」
FastCGI は、Webサーバーがアプリケーション(PHPなど)にリクエストを高速に渡すための通信プロトコルです。
🔧 仕組み(ざっくり)
- Webサーバー(NginxやApache)は、FastCGIプロトコルを使ってリクエストをPHP実行エンジンに渡す
- PHP側には、php-fpm というプロセスマネージャが常駐していて、リクエストを待ち受けている
- つまり:
- 毎回PHPを起動するのではなく
- 常駐しているPHPプロセスに繰り返しリクエストを送る
✅ 3. なぜFastCGIが重要なのか?
課題(CGI) |
解決策(FastCGI) |
毎回PHPを起動するため遅い |
PHPプロセスを常駐させておき、高速に処理 |
起動・終了にコストがかかる |
リクエストだけを渡して処理を続けられる |
スケーラブルでない |
プロセス管理ができ、並列処理も可能 |
安定性に欠ける |
プロセスごとに監視・再起動などの制御が可能 |
✅ 4. FastCGI を使う構成例(Laravel)
[ ブラウザ ]
↓ HTTP
[ Webサーバー(Nginx) ]
↓ FastCGI(通信プロトコル)
[ PHP実行エンジン(php-fpm) ]
↓
[ Laravelアプリケーション ]
↓
[ DBサーバー(MySQLなど) ]
✅ 5. FastCGIで通信する方法(2パターン)
通信方法 |
説明 |
Unixソケット |
同じマシン内で通信(例: /run/php/php8.2-fpm.sock ) |
TCPソケット |
異なるホスト間やDockerコンテナ間で通信(例: 127.0.0.1:9000 ) |
✅ 6. php-fpmとは?
- 「FastCGI Process Manager」の略
- PHPのリクエストを処理するFastCGI対応の実行エンジン
- LaravelやWordPressなど、PHPアプリの実行に使用される
-
php.ini
とは別に、php-fpm.conf
や www.conf
により細かいプロセス制御が可能
✅ FastCGI vs mod_php
項目 |
FastCGI(php-fpm) |
mod_php(Apache) |
処理方法 |
外部プロセスに渡す |
Apacheが直接実行 |
性能 |
高速・分離型 |
単純・柔軟性に欠ける |
スケーラビリティ |
◎ |
△ |
本番適用 |
◎(現在の主流) |
△(古い) |
✅ FastCGIまとめ
観点 |
内容 |
目的 |
WebサーバーとPHPなどを分離・高速に連携するため |
通信方式 |
FastCGIプロトコル(Unixソケット or TCP) |
実行エンジン |
php-fpm(FastCGI対応) |
使う理由 |
高速・安定・スケーラブルで本番運用に最適 |
✅ FastCGIを使った典型構成(Laravel開発やDockerでも)
- Webサーバー:Nginx
- アプリ実行:php-fpm(Laravelなど)
- DB:MySQL/PostgreSQL
[Nginx] → FastCGI → [php-fpm] → Laravel
↓
[MySQL]
✅ 補足:FastCGI以外の選択肢
選択肢 |
状況 |
mod_php |
Apacheで直接PHPを処理(古い構成) |
Proxy |
Node.jsなどではHTTPプロキシでリクエストを転送 |
FastCGIは特にPHP界隈(Laravel, WordPressなど)で現在も主流の手法です。
✅ まとめ
- FastCGIはPHPを高速かつ安定的に実行するための通信方式
- Webサーバーとは分離されているが、プロセス間通信で高速処理が可能
- 本番環境・Docker構築・モダン開発環境ではFastCGI + php-fpmがベストプラクティス