PHPの「アプリケーションサーバー」について


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の機能を利用することができる。 ウェブサーバプログラムの機能の主体は、あらかじめ用意された情報を利用者の要求に応じて送り返すことである。

FastCGIとは

FastCGIとは、Webサーバ上でユーザプログラムを動作させるためのインタフェース仕様の一つである。CGIの問題を解決するためにOpenMarket社によって1990年代中頃に開発されたもので、仕様は公開されている。

PHP-FPM とは

FPM ( FastCGI Process Manager ) は PHP の FastCGI 実装のひとつで、 主に高負荷のサイトで有用な追加機能を用意しています。

CGIについてまとめると

PHPはphp-fpmという別のプロセスを後ろで動かしておいて、Webサーバーに来たリクエストをそっち側に転送したりする。別のプロセスで動いているので、切り離されている別々の道とイメージしたら良いかと思う。

だけど、必ずしも同じWebサーバー内とは限らないので「Apache+mod_php」の場合は一元化されているが、CGIは別のプロセスなので切り離すこともでき、別々のサーバーを用意できたりする。