Daily Archives: 01/21/2014

NginxでのFastCGI PHP設定

Pocket

 

タイトル通り、FreeBSDでnginx、FastCGIでPHPを動かす場合。
lighttpd + phpの場合はこちら

必要なもの。

  • nginx
  • spawn-fcgi
  • php(fastCGI)

 

概要

nginxは静的コンテンツ向けのwebサーバ。
そのままでは動的コンテンツは扱えない。
どうしても必要なら、よそで動的コンテンツを生成してもらわなければならない。

その仕組みの一つにFastCGIがある。
FastCGIは動的コンテンツの受け渡しのためのインタフェースである。
spawn-fcgiはFastCGIプロセスの管理を行う。

ここで、PHPにはFastCGIサーバモードというのがある。
指定されたポートで待ち受けてリクエストに応えるというもの。
spawn-fcgiとPHPのFastCGIサーバモードを組み合わせれば、PHPのFastCGIインタフェースができあがる。

nginxはPHPコンテンツのリクエストを受けたら、FastCGIを通してphp-cgiにコンテンツを生成してもらう、というわけ。

参考。まあwikipediaなんですけどね。

nginx
http://ja.wikipedia.org/wiki/Nginx
CGI
http://ja.wikipedia.org/wiki/Common_Gateway_Interface
FastCGI
http://ja.wikipedia.org/wiki/FastCGI

インストール

FreeBSDなら、pkgで前章の三つをインストールする。
特に難しいこともないので割愛。
phpはpkgそのままでfastCGI対応になっているので意識する必要なし。

PHPの確認

FastCGI対応かどうかを念のため確認。
/usr/local/bin/php-cgiというのがインストールされていればよい。
念のため-vで確認。

 

spawn-fcgiの設定

spawn_fcgiには特定の設定ファイルがないのでrc.confに直接書き込む。
起動スクリプト/usr/local/rc.d/spawn-fcgiの中身を見るとどういったオプションがあるかが分かる。

nginx、spawn-fcgiの起動設定と一緒にやってしまおう。
下記を/etc/rc.confにひとまず貼りつける。

コメントアウトしてあるのはデフォルト設定。
変えたい箇所があれば#を外して設定する。

注意!
spawn-fcgiのspawnとfcgiの間はハイフン(ダッシュ)”-“であるが、/etc/rc.confでの記載にはアンダースコア”_”にすること。
言い方を変えると、spawn-fcgi_enableなどと書かないこと。

最終的に以下のようにした。
個人用のサーバなのでささやかに。
(冗長なので一部のコメント部分は除く)

 

spawn-fcgiの起動確認

serviceコマンドで起動。

sockstatで待ち受けポートを確認

 

phpの動作確認

nginxにはサンプルの設定ファイルがついてくる。
それをベースに、たとえば以下のような設定ファイルを作る。
location ~ \.php$のブロックが重要。
fastcgi_pass 127.0.0.1:8000;のポートを先のswawn-fcgiと合わせること。

/usr/local/www/php-testにindex.htmlをつくる。また、test.phpを作る。
index.html

test.php

nginxをスタートしておき;

ブラウザで繋ぐ。
スクリーンショット撮るのが面倒なのでw3mで。
下記の通り/usr/local/www/nginx/index.htmlの内容が表示される。

index.htmlの内容が表示された。
これで通常のwebサーバとしては問題なく動作していることが確認できた。

ではphpの動作確認
PHP infoの結果が表示される。
内部的には、nginxが127.0.0.1:8000で待っているphp-cgiにtest.phpを実行させて、その結果を返している。

以上