環境
- windows10
- DockerDesktop for Win 3.5.x
- PHP 8.x
- nginx 2.x
本記事では、nginxからPHPプログラムを実行するために用いられるphp-fpmについてざっくり紹介しています。
php-fpmとは
- fpmはFastCGI Process Managerの略でPHP5.4.0から公式サポートされたPHP標準のアプリケーションサーバ
CGIとは
- Web サーバー 上で PHP ( 動的コンテンツを生成する言語 ) を動作せるための仕組み
- もともとwebサーバ単体では静的なコンテンツを返すだけの機能しかなかったのですが、技術の進化とともに、webサーバから他のプログラムを呼び出し、その処理結果をクライアントに送信することで動的なコンテンツを返すことができるようになりました。これを実現するためのサーバプログラムと外部プログラムとの連携法の取り決めが CGI と呼ばれています。
- 通常、CGIはユーザからリクエストが来る度にプログラムを実行してプロセスの生成と破棄を行うものですが、リクエストの数が多ければそれだけ生成と破棄を繰り返す回数も多くなるため、パフォーマンスの悪化につながります。
- これに対し FastCGI は初回リクエスト時に起動したプロセスをメモリ上に保持し、次回以降のリクエストに対してはその保持したプロセスを実行します。よってプログラムの実行速度向上とサーバ不可の軽減が期待できます。
nginxとApacheの違い
- FastCGIは、Webサーバとアプリケーションサーバの間で使われるプロトコルの一つで、nginxがphpファイルをphp-fpmに処理を受け渡すことでphpプログラムを実行できます。
- nginxはApacheとは異なり、PHP を実行するには php-fpmが必要です。(webサーバーとは別プロセスで実行)
nginxとPHPの連携
- php-fpmとnginxの連携方法としては、一般的には「TCPかUNIXドメインソケットのどちらかが用いられます。
- nginxでは、拡張子がphpファイルの場合、fastcgiに処理を投げるように設定することでphpプログラムを実行することができます。(一部抜粋)
/nginx/nginx.conf
location ~ \.php$ {
root /var/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
PHPの種類
- PHP には、モジュール版とCGI版という二種類があります。Apache ではモジュールとして PHP スクリプトを起動することができます。これにより、Webサーバーの起動時に読み込まれサーバーの処理の一部として実行されます。
- PHP をインストールすると自動的に PHP モジュールもインストールされ、 Apache はデフォルトでその PHP モジュールを読み込んでくれます。
モジュール版
- Webサーバ(ApacheやNginx)のプロセスの中でPHPを実行するのが特徴です。通常はApacheのモジュール版を意味します。
CGI版
- PHPのCGI版は、Webサーバ(ApacheやNginx)と別プロセスで実行されるのが特徴です。
まとめ
本記事では、nginxからPHPプログラムを実行するために用いられるphp-fpmについてざっくり紹介しています。fpmはFastCGI Process Managerの略でPHP5.4.0から公式サポートされたPHP標準のアプリケーションサーバです。nginxをwebサーバーとして採用する場合はfpmを使用することでPHPプログラムを実行することができます。