たいきゅんの日記

ITエンジニアの積み上げ日記

php-fpmについてざっと理解する!

こんにちは。

今回はPHP fpmについてまとめてみます。

1年以上PHP開発はしているものの、Vagrantかつインフラ周りを触ってなかったため、PHP-fpmとかそもそもPHPについて詳しく知っていませんでした。Dockerでphp環境を作る際、PHP fpmを使用したので、この機会に調べまとめてみました。

 

1. モジュール版PHPCGIPHP

PHPにはモジュール版PHPCGIPHPの二種類が存在します。

いくつかの違いがありますが、大きな違いとしてモジュール版PHPwebサーバー上で動作、CGIPHPアプリケーションサーバ上で動作します。そのため「NginxをプロキシしてPHPを起動したい」場合は、CGIPHPを使用する必要があります。

 

2. PHPfpmとは

PHP標準のアプリケーションサーバのこと。fpmはFastCGI Process Manager の略です。PHP5.4.0からサポートされています。

大雑把に理解するならば、「高負荷サイトにおいてパフォーマンスを発揮するためのPHPの一種」であると捉えてもらえればと思います。

 

3. fpmとは

fpm(FastCGI Progress Manager)とはPHPFastCGI実装の一つで主に高負荷サイトで有用な追加機能したものになります。

例えば、xさんとyさんが一つのwebサーバーを共有している時、通常処理を実行すると同じプロセスで実行することになります。しかしCGI版だと別ユーザーとして実行されているので、お互いの干渉を防ぐことができます。そのためセキュリティのリスクや他のユーザーへの干渉が及ぶ危険性が低いものになっている。

一方で別プロセスで実行するため処理速度は落ちてしまうデメリットがあります。

 

4. FastCGIとは

CGIはCommon Gateway Interfaceのこと。これはwebサーバーがブラウザからの要求に応じてプログラムを動作させる仕組みのことです。

 

FastCGICGIを改良したものとなっています。

 

具体的には、CGIと比較し、処理速度の高速化負荷の軽減が期待できます。

CGIではブラウザからの要求に応じて起動したプログラムは、処理が終わり次第プログラム自体も終了します。そのためリクエストが何回も繰り返された場合、いちいち起動・終了を繰り返すことに非効率です。

しかしFastCGIの場合一度起動したプログラムは、一定時間メモリ上で起動したままの状態にしておくことができます。そのためリクエストが繰り返されても、プログラムの起動・終了が一回で済むため、CGIに比べ効率的と言えます。

 

以上になります。

まとめると、php-fpmはモジュール版PHPに比べて効率良く処理を行い、セキュリティ対策や高負荷サイトへの対応もしたPHPであるといった所でしょうか。これくらい理解しておけばひとまず基礎は抑えられたのではと思います。

最後まで読んでいただきありがとうございました!!