1. Nginx 概要

1.1. Nginxとは

2009年12月にリリースされたオープンソースのhttpdサーバです。 Apacheに比べると機能が貧弱なところがありますが、 軽量である事を売りにどんどん導入事例が増えています。

1.2. Nginx / php-cgi 構成

NginxでPHPを動作されるには、 Nginxとは別にphp-cgiを常駐プロセスとして動作させる必要があります。 NginxがHTTPサーバのような動きをし、 php-cgiがアプリケーションサーバとしての動きをします。 図で表すと以下の通りです。

  http request    +-------+          +---------+
 ---------------->| nginx |--------->| php-cgi |
                  +-------+          +---------+

よく見かけるエラーとして504 エラーコードがあります。 504は一定時間内に転送先のサーバからの応答を返さない事を意味しますので、 504を見かけたらバックエンドのphp-cgiに異常がある可能性を疑って下さい。

2. Nginx 初期設定

2.1. Nginx ダウンロード

検索エンジンに"Nginx Download"と入力し、Nginx公式サイトを探します。 現時点(2014/04/13)の公式サイトURLは以下の通りです。

公式サイトをブラウザで開き、"download"を押下します。

"Mainline"または"Stable"の好きな方のバージョンをダウンロードします。

2.2. Nginx インストール

Nginxのインストール作業は特に必要ありません。 Windows版の場合は、解凍してexeを実行するだけです。 あなたの趣味に合わせて、適当なディレクトリにNginxを解凍して下さい。

"nginx.exe"をダブルクリックで実行します。

初回実行時は、ファイアウォールの設定を求められます。 用途に合わせて適宜許可設定を行います。

ブラウザに"http://localhost/"と入力し、nginxの画面が表示されるかを確認します。

もしも、nginxの画面が表示されない場合は、error.logを確認しましょう。 私の環境では、error.logのファイルパスは"C:\usr\local\nginx-1.4.7\logs\error.log"となります。

nginx error.log

error.logからエラーの原因を把握できない場合は、 TCP 80がlistenしているかどうかを確認し切り分けのヒントとして使います。 コマンドプロンプトに以下のように入力し、TCP 80がLISTENING状態かを確認します。 もし、LISTENING状態でないのならば、 構文エラーや権限不足でnginxが強制終了してしまったのかもしれません。

netstat -ano | findstr 0.0.0.0:80
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       5244

タスクマネージャーの"プロセス"欄も貴重な切り分けのヒントになります。 nginxプロセスが存在しないものの、TCP 80がLISTEN状態ならば、 Apache, IISなどによるポートバッティングの可能性を疑います。

3. PHP 初期設定

3.1. PHP ダウンロード

検索エンジンに"PHP windows"と入力し、Windows版PHPの公式サイトを探します。 PHP公式サイトは、Linux, Windows等の実行環境毎にURLが異なりますので注意して下さい。 現時点(2014/04/13)の公式サイトURLは以下の通りです。

"Download"を押下します。

適当なアーキテクチャのzipファイルをダウンロードして下さい。 x64, x86, Thread Safe, Non Thread Safeの組み合わせで計4種類があり、 アーキテクチャに合った種類のファイルをダウンロードして下さい。

ダウンロードしたファイルを適当なディレクトリに解凍します。

PHPはデフォルトの状態で、"php.ini-development", "php.ini-production"という2種類の設定ファイルのサンプルが存在します。 この手順書は、商用利用ではなく社内ツールレベルの簡易的な使い方を想定していますので、 今回は、"php.ini-development"をコピーし"php.ini"という名前で保存します。

"php.ini-development"を指定してPHPを起動する事もできるので、この設定は必須とは言えません。 しかし、PHPを使うときのマナーとしてphp.iniを作成しておく事をお勧めします。

3.2. PHP MSVCR110.dll (Visual C++ Runtime)

C++のライブラリが不足しているため、PHP実行時に、 以下のようなメッセージが表示される事があるかもしれません。 これは、PHPを実行するのにライブラリが不足しているためです。 不足している"MSVCR110.dll"はマイクロソフトより入手する事ができます。

このコンピュータに MSVCR110.dll がないため、プログラムを開始でき
ません。この問題を解決するには、プログラムを再インストールして
みてください。
このコンピュータに MSVCR110.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。

"MSVCR110.dll"はVisual C++の一部で、再頒布可能なパッケージです。 つまりライセンス料の支払いなくダウンロード可能なパッケージですので、 Microsoftの公式サイトからダウンロードしてしまいましょう。

"visual C++ 再頒布可能パッケージ"のキーワードで検索し、 visual C++のパッケージをダウンロード可能なWEBページを探します。 現時点(2014/04/13)のダウンロード可能なURLは以下の通りです。

"ダウンロード"を押下します。

あなたのお使いのOSの種類に応じて、"x64"または"x86"を選択し、exeファイルをダウンロードします。

ダウンロードした"vcredist_x64.exe"を実行します。 インストーラの指示に従い、ライセンスに同意しインストールを行います。

以上でインストールが完了します。

3.3. php-cgi 起動

以下のコマンドでphp-cgiを実行します。 "start /b"はバックグラウンドで実行する意味になります。 ポート番号は任意の数字で差し支えございませんが、 ここでは以下の公式ドキュメントに準拠し TCP 9123 を採用します。

cd C:\usr\local\php-5.5.11-Win32-VC11-x64
start /b php-cgi.exe -b 127.0.0.1:9123 -c php.ini

この時、Visual C++のライブラリが足りない場合は、以下のようなエラーメッセージが表示されます。 エラーメッセージが表示される場合は、前述の手順に従って"MSVCR110.dll"のインストールを試みて下さい。

このコンピュータに MSVCR110.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。

php-cgiがバックグラウンドで実行されているかを確認します。

netstat -ano | findstr 127.0.0.1:9123
  TCP    127.0.0.1:9123         0.0.0.0:0              LISTENING       7088

4. Nginx / php-cgi 連携

4.1. nginx.conf 設定変更

URLの末尾がphpとなっているものについて、 バックエンドで動作するphp-cgiへ転送するよう設定変更します。 nginx.confを以下diff表記のように編集します。 なお、ファイルパスはnginxのインストールディレクトリによって異なりますので、 各々の環境に合わせて適宜編集して下さい。

C:\usr\local\nginx-1.4.7\conf\nginx.conf
--- nginx.conf.org      2014-04-08 18:59:06.000000000 +0900
+++ nginx.conf  2014-04-13 22:35:15.000000000 +0900
@@ -42,12 +42,19 @@

         location / {
             root   html;
             index  index.html index.htm;
         }

+        location ~ \.php$ {
+            fastcgi_pass   127.0.0.1:9123;
+            fastcgi_index  index.php;
+            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
+            include        fastcgi_params;
+        }
+
         #error_page  404              /404.html;

         # redirect server error pages to the static page /50x.html
         #
         error_page   500 502 503 504  /50x.html;
         location = /50x.html {

4.2. Nginx 再起動

nginxを再起動/停止させるには、コマンドラインによる操作を行います。 nginxは以下のような再起動/停止操作が可能です。 各オプションの意味は、nginx for Windowsを参照してください。

nginx -s [ stop | quit | reload | reopen ]

以下のコマンドを実行し、nginxを再起動させます。

cd C:\usr\local\nginx-1.4.7
nginx -s reload

4.3. PHP 動作確認

PHPが動作する事を確認します。 以下のNginxルートディレクトリに、phpinfo()を出力するファイルを作成します。 "C:\usr\local\nginx-1.4.7\html\index.php"という名前でファイルを作成し、 以下のように編集します。

<?php
  phpinfo();
?>

ブラウザで以下URLを閲覧し、PHPに関する動作環境が表示される事を確認します。

http://localhost/index.php

5. Nginx 起動

5.1. Nignx 起動スクリプト

毎回手作業でコマンドを入力するのは非効率ですので、 クリックひとつでNginxを起動できるようなbatファイルを作成します。 私の場合は、"C:\usr\local\nginx-1.4.7\start_nginx.bat"というファイルを作成し、 以下のように編集しました。

cd C:\usr\local\php
start /b php-cgi.exe -b 127.0.0.1:9123 -c php.ini
cd C:\usr\local\nginx-1.4.7\
start nginx.exe