php-fpmについてざっと理解する!
こんにちは。
今回はPHP fpmについてまとめてみます。
1年以上PHP開発はしているものの、Vagrantかつインフラ周りを触ってなかったため、PHP-fpmとかそもそもPHPについて詳しく知っていませんでした。Dockerでphp環境を作る際、PHP fpmを使用したので、この機会に調べまとめてみました。
PHPにはモジュール版PHPとCGI版PHPの二種類が存在します。
いくつかの違いがありますが、大きな違いとしてモジュール版PHPはwebサーバー上で動作、CGI版PHPはアプリケーションサーバー上で動作します。そのため「NginxをプロキシしてPHPを起動したい」場合は、CGI版PHPを使用する必要があります。
2. PHPfpmとは
PHP標準のアプリケーションサーバーのこと。fpmはFastCGI Process Manager の略です。PHP5.4.0からサポートされています。
大雑把に理解するならば、「高負荷サイトにおいてパフォーマンスを発揮するためのPHPの一種」であると捉えてもらえればと思います。
3. fpmとは
fpm(FastCGI Progress Manager)とはPHPのFastCGI実装の一つで主に高負荷サイトで有用な追加機能したものになります。
例えば、xさんとyさんが一つのwebサーバーを共有している時、通常処理を実行すると同じプロセスで実行することになります。しかしCGI版だと別ユーザーとして実行されているので、お互いの干渉を防ぐことができます。そのためセキュリティのリスクや他のユーザーへの干渉が及ぶ危険性が低いものになっている。
一方で別プロセスで実行するため処理速度は落ちてしまうデメリットがあります。
4. FastCGIとは
CGIはCommon Gateway Interfaceのこと。これはwebサーバーがブラウザからの要求に応じてプログラムを動作させる仕組みのことです。
具体的には、CGIと比較し、処理速度の高速化と負荷の軽減が期待できます。
CGIではブラウザからの要求に応じて起動したプログラムは、処理が終わり次第プログラム自体も終了します。そのためリクエストが何回も繰り返された場合、いちいち起動・終了を繰り返すことに非効率です。
しかしFastCGIの場合一度起動したプログラムは、一定時間メモリ上で起動したままの状態にしておくことができます。そのためリクエストが繰り返されても、プログラムの起動・終了が一回で済むため、CGIに比べ効率的と言えます。
以上になります。
まとめると、php-fpmはモジュール版PHPに比べて効率良く処理を行い、セキュリティ対策や高負荷サイトへの対応もしたPHPであるといった所でしょうか。これくらい理解しておけばひとまず基礎は抑えられたのではと思います。
最後まで読んでいただきありがとうございました!!