Laravel + Nginx + PHP-FPM の関係!

に公開

はじめに

「LaravelをDockerで動かしてるけど、Nginx?PHP-FPM?よく分からない…」
したがって、Nginx と PHP-FPM の関係を整理してみました!

システム構成

  • Laravel:PHP製のWebアプリケーションフレームワーク
  • Nginx:Webサーバー(リバースプロキシ)
  • PHP-FPM:PHPの実行環境(FastCGI Process Manager)

リクエストの流れイメージ

[ User Browser ]
      │  
      │  アクセス (http://example.com)
      ▼
    [ Nginx ] 
      │
      ├─ 静的ファイルならここで返す (画像/CSS/JS)
      │
      └─ 動的リクエスト (PHPファイル) 
            │
            └─▶ FastCGI プロトコルで依頼
                    │
                    ▼
            [ PHP-FPM (Laravel実行) ] 
                    │
                    ▼
            実行結果 (HTML) を FastCGI で返す
                    │
                    ▼
    [ Nginx 経由でユーザーにレスポンス ]

Nginx と PHP-FPM の役割は?

コンポーネント 役割 説明
Nginx 窓口・交通整理 超高速Webサーバー。静的ファイルは自分で返し、PHPのリクエストはPHP-FPMに回す。
PHP-FPM PHP実行エンジン PHPスクリプト(Laravelなど)を実行してHTMLを返す。

Nginxは中継役。でも超高速!

  • 静的ファイルは即返答
  • 動的なPHPリクエストは「PHP-FPMにお願い!」

PHP-FPMがなければPHPは動かない

  • NginxはPHPを直接実行できない
  • PHP-FPMは「PHP実行専用のプロセスマネージャ」

FastCGIって何?

  • Nginx と PHP-FPM が会話するための 共通ルール(プロトコル)
  • 昔のCGI方式は「リクエストのたびにPHPを起動」→ 超遅い
  • FastCGIは「PHP-FPMが常に待機して高速処理」

まとめ

  • Nginx:リクエストの入り口で交通整理するだけ。でも超高速。
  • PHP-FPM:PHPの処理エンジン。これがなければPHPは動かない。
  • FastCGI:NginxとPHP-FPMが会話するためのルール。

Discussion