はじめに
PHPの環境構築する際に、Apacheを使用していたのですがWebサーバーでNginxの使用率が上がっているということで、Nginxを使ってみることにしました。
参考記事:Nginx系が増加し、Apache減少 - 8月Webサーバシェア
色々調べていくと、NginxではPHP-FPMというものを使用するらしい。そこでPHP-FPMについて調べてみた。
PHP-FPMとは?
PHPのFastCGI実装の一つとのこと。FastCGI???また初めて聞く単語だ…
FastCGIとは?
FastCGIとは、Webサーバー上でプログラムを動作させるためのインターフェース仕様の一つ。CGIの問題を解決するために開発された。
らしい。
CGIとは?
CGIとは、Common Gateway Interfaceの略。
Webサーバー上でユーザープログラムを動作させるための仕組み。
CGIを理解する上で、Webサーバーについて確認してみる。
Webサーバープログラムの機能の主体としては、あらかじめ用意された情報(静的な情報)をクライアントの要求に応じてレスポンスすること。
→Webサーバープログラム単体では、動的コンテンツを生成してクライアントにレスポンスを返すことはできない。
そこで、Webサーバープログラムからほかのプログラムを呼び出し、その処理結果をクライアントに送信する方法が考案された。
このサーバープログラムと外部プログラムの連携法の取り決めがCGIである。
つまりCGIについてまとめると
Webサーバー上でPHP(動的コンテンツを生成する言語)を動作させるための仕組み。
FastCGIの説明で触れたように、CGIには問題点がある。
CGIはユーザーからの要求があるたびに、プロセスの生成と破棄を行う。そのため、大量の要求があるとその分だけ生成と破棄を行うため、パフォーマンスが悪くなる。
そこで、初回リクエスト時に起動したプロセスをメモリ上へ保持することでパフォーマンスの問題を解決したものがFastCGIである。
ApacheでPHP-FPMは使っていないような…。
PHPには、モジュール版とCGI版の2種類がある。
Apacheはモジュール版を使用している。
ApacheはPHPをインストールした際に、自動的にPHPモジュールもインストールされる。
モジュール版は、CGI版の逆でWebサーバーのプロセスの中でPHPを実行する方法。
そのため、PHP-FPMを使用していない。
参考サイト:nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する
↑こちらの記事大変分かりやすく、かなり参考にさせていただきました。
モジュール版とCGI版の違い
モジュール版
先ほど述べたようにWebサーバーの中でPHPを実行する方法。そのため、Webサーバーを動かすユーザーでPHPが動作するためセキュリティ面で不安。また、Webサーバー内で実行するため処理速度は速い。
CGI版
Webサーバーとは別のプロセスで実行される。そのためセキュリティ面で安全。しかし、Webサーバーとは別で処理を行うため処理速度はモジュール版と比べておそくなる。
→この問題はFastCGIを用いることで対策できる。
参考サイト:PHPのCGI版とモジュール版の違い