Webサーバーの3構造の「Webサーバー」「アプリケーションサーバー」「データベースサーバー」についてなのですが、Javaにはtomcatという「アプリケーションサーバー」があり、RubyにはRuby用の「アプリケーションサーバー」があります。
ですが、PHPには「アプリケーションサーバー」が存在していないことに気づき「なぜないのだろう?」とずっと疑問に思っていたのですが、解決したのでまとめておきます。
PHPのアプリケーションサーバー
今までは、Apachaを使っていましたがApacheにはモジュールを追加することでアプリケーションサーバの役割を持てるようになります。それがmod_phpというモジュール。以前は、
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
こんな記述をして設定していたわけですが、今ではPHPをインストールするだけでデフォルトで最初から記載されているのでわざわざインストールする必要がないということです。
Apacheインストール・起動
``` $ sudo yum -y install httpd $ sudo service httpd start ```PHPのインストール
``` $ sudo yum -y install php ```mod_phpの設定
特に設定することはありません。 ```/etc/httpd/conf.d/php.conf ``` ここにデフォルトで記載されているからです。Apacheを再起動
``` $ sudo service httpd restart ```Apacheを使う場合はこんな感じで大丈夫です。
CGIを使う場合
CGIとは
Common Gateway Interfaceは、ウェブサーバ上でユーザプログラムを動作させるための仕組み。現存する多くのウェブサーバプログラムはCGIの機能を利用することができる。 ウェブサーバプログラムの機能の主体は、あらかじめ用意された情報を利用者の要求に応じて送り返すことである。https://ja.wikipedia.org/wiki/Common_Gateway_Interface
FastCGIとは
FastCGIとは、Webサーバ上でユーザプログラムを動作させるためのインタフェース仕様の一つである。CGIの問題を解決するためにOpenMarket社によって1990年代中頃に開発されたもので、仕様は公開されている。https://ja.wikipedia.org/wiki/FastCGI
PHP-FPM とは
FPM ( FastCGI Process Manager ) は PHP の FastCGI 実装のひとつで、 主に高負荷のサイトで有用な追加機能を用意しています。http://php.net/manual/ja/install.fpm.php
CGIについてまとめると
PHPはphp-fpmという別のプロセスを後ろで動かしておいて、Webサーバーに来たリクエストをそっち側に転送したりする。別のプロセスで動いているので、切り離されている別々の道とイメージしたら良いかと思う。だけど、必ずしも同じWebサーバー内とは限らないので「Apache+mod_php」の場合は一元化されているが、CGIは別のプロセスなので切り離すこともでき、別々のサーバーを用意できたりする。