nginxとlighttpdで悩んでlighttpd + php5 + fastcgiのインストールと設定へ

Pocket

apacheは吊るしのFreeBSD pkgでphpを使えない。

10.0-BETA1にして曲がりなりにもpkgが普通に使えるようになって、あまりの便利さに感動し、追加ソフトウェアはすべてpkgにしようと決めたのだが。

apacheとphpでいきなり壁に当たりました。
apacheをpkgでインストールすると、phpのモジュールが付いてこないのである。
phpモジュールが欲しいなら、apacheをportsからインストールしないといけない。

もちろん、pkgngはportsと一緒に使えるよう考えて作られている。
apacheだけportsからインストールしたって何の問題もない。
ただ、あの巨大な/usr/portsディレクトリをメンテしていくのが億劫なわけですよ。

ならばよろしいapacheはもう捨てよう。
たぶんまた、吊るしのpkgで使えないソフトウェアが出てくると思うが、その時はその時考えよう。

nginx, lighttpdのどちらがよいか。

apacheの代替といってすぐに思い浮かぶのはnginxとlighttpdである。

“nginx lighttpd comparison”などとググってみると、いくつかのもまとめがヒットする。

http://www.wikivs.com/wiki/Lighttpd_vs_nginx
http://wiki.dreamhost.com/Web_Server_Performance_Comparison

軽く速く柔軟な設定が可能という点では同じだが、概観したところnginx優勢のようである。

また、lighttpdには品質面で気になる点もある。
どうも長い間放置されているメモリリークがあるようだ。

ただlighttpdの設定のほうが分かりやすい、というのは皆の認めるところらしい。
メモリリークは心配だが、さっさとhttpサーバを設定したいのでlighttpdを選択。

以下、lighttpdでphpを、fastcgiで動かす。
環境はFreeBSD 10.0-BETA1。pkgngでインストール。
設定方法は他OSでも参考になる部分があるかも。

lighttpd, php5のインストール

pkgでインストール。
簡単。
lighttpdは依存も少ない。

 

php5のバージョン確認

lighttpdを扱う前に、phpを確認する。
fastcgi対応かどうか。

“php5″でインストールされたのは5.4.20
/usr/local/bin/php-cgiを確認すると、特に指定や追加のインストールの必要なくfastcgi対応であることが分かる。

 

lighttpdのファイル配置

lighttpdとしてインストールされたファイルを確認する。

設定ファイル
/usr/local/etc/lighttpd下に。

ドキュメントルート
初期状態では/usr/local/www/dataだが、ディレクトリは自分で作る必要がある。

lighttpdのログファイル
初期状態では/var/log/lighttpd下に。

ファイルを確認したら、lighttpdの設定に移る。

lighttpdの設定

流れとしては、

  1. lighttpd.confで全体の設定を、
  2. modules.confで読み込むモジュールの設定を、
  3. conf.d/下の*.confで各モジュールの設定を行う。

fastcgiを使うなら、
lighttpd.confで設定ののち、
modules.confでfastcgiのモジュールを読み込む指定をし、
conf.d/fastcgi.confでphpの指定をする、となる。

なお、php.iniにも一部変更が必要。

lighttpdオフィシャルのチュートリアルはここ
以下、/usr/local/etc/lighttpd下にある設定ファイルに手を加えていく。

lighttpd.confの修正

lighttpd.conf.sampleから変えたのは以下の3行だけ。

コメント行、空行を除いたlighttpd.confは以下の通り。
include “modules.conf”と指定がある通り、ここでmoduleを読み込んでいる。

 

modules.conf

lighttpd.confで指定されたmodules.confの設定。
どんなmoduleを読み込むか。
以下の行を有効にしただけ。
つまりfastcgiを有効に。
そのほかにも興味深そうなmoduleはあるがミニマルスタートが原則。

コメント行、空行を除いたlighttpd.confは以下の通り。

 

conf.d/fastcgi.conf

fastcgiの設定。
phpをどう実行するかを指定できる。

ローカルのphp-cgiでもよいし、ローカルホストの別webサーバ(apacheとか)でもよいし、はたまた別ホストのwebサーバでもよい。
詳細はこちら

ここでは、ローカルの/usr/local/bin/php-cgiを使う。
fastcgi対応のphpである。

ローカルなのでIPアドレスやTCP/IPポートの指定は不要で、UNIXドメインソケットして使うファイルを指定すればよい。
最終的に以下の行を追加

コメント行、空行を除いたlighttpd.confは以下の通り。

以上でlighttpdの設定は完了

php.iniの設定

lighttpdのドキュメントを見ると以下のように書いてあるので、php.iniを修正する。

If you want to use PATH_INFO and PHP_SELF in you PHP scripts you have to configure php and lighttpd. The php.ini needs the option:
cgi.fix_pathinfo = 1

FreeBSDだとphp.iniは/usr/local/etcに置かれるべきもの。
初期状態ではphp.iniが無いので、sampleからコピーする。
sampleにはphp.ini-developmentとphp.ini-productionの二つがある。
developmentの方を選んだ。

以下の行のコメントを外す。

 

起動確認

/usr/local/www/dataを作り、”It works!”とでも書いたindex.htmlを作る。

FreeBSDなら/etc/rc.confに以下の行を追加。

 

起動。

 

ログに異常もなし。

 

ブラウザでつないで、index.htmlが表示されればOK。

No tags for this post.

2 comments

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください