Apache と NginX
今まで PHP の WEB サーバとして Apache を使う機会が多かったですが、最近は NginX が台頭してきているようです。
そんな中、筆者が開発環境の WEB サーバを Apache から NginX に変えなければならない場面に直面しました。
「Apache から NginX に置き換えればいいだけでしょ?」と軽く考えていましたが全く違いました。
環境構築ついでに Apache と NginX の違いを調べましたので下記にまとめておきます。
Apache と NginX の違い
Apache は PHP を動かすことができますが、NginX は PHP を動かすことはできません。
Apache は PHP を モジュールとして利用することができるため、WEB サーバの一部としてプログラムを起動できます。
一方 NginX は PHP をモジュールとして利用することができないため、別の仕組みを使ってプログラムを動かします。
この別の仕組みを CGI といいます。
ちなみに図を見ていただくとわかると思いますが、CGI を利用する場合 Web サーバとは別の仕組みを使うことになるため、クライアントからのリクエスト・レスポンスとは別に、サーバ内で通信が発生します。
通信の種類には TCPソケット を用いた方法と UNIX ドメインソケットを用いた方法があります。
ここで詳細な説明は割愛しますが、興味のある方は詳しく調べてみましょう。

CGI とは
CGI は Common Gateway Interface の頭文字を取ったものです。
WEB サーバの主な役割は、クライアントの要求に応じてあらかじめ用意された情報(静的ページ)を送信することです。
そのため WEB サーバのみでは、動的に情報を生成してクライアントに送信することはできませんでした。
そこで WEB サーバからプログラムを呼び出し、その処理結果をクライアントに送信する方法が考案されました。それが CGI です。
CGI は WEB サーバ上で動的コンテンツを生成するプログラムを動作せるための仕組みなのです。
CGI と FastCGI の違い
NginX で PHP を処理する場合、PHP-FPM という仕組みを利用します。
FPM は FastCGI Process Manager の頭文字を取ったものです。
前出の CGI とここで登場した FastCGI の違いはメモリにあります。
CGI はリクエストごとにプログラムを処理をするため、リクエストが多くなるとサーバの負荷が大きくなります。
対して FastCGI はリクエストとその処理結果をメモリに保持するため、同じリクエストに対してはメモリを利用してレスポンスを返すことができます。
そのため FastCGI を利用することによって、サーバ負荷の低減とプログラム実行速度の向上が期待できるのです。
