FreeBSD + nginx + FastCGI + PukiWiki

 自分の備忘録用にWikiがほしくなったので、自室で動かしているFreeBSDPukiWikiを導入することにした。Apacheでホストするのが無難なのだろうが、古いマシンで動かしているので、軽量で速いと評判のnginx*1を使うことにする。
 FreeBSD: Nginx FastCGI PHP Configuration - nixCraftという記事を参考にしてインストールしていく。

必要なもの

nginxのインストール

 portsからインストールしてもよいしバイナリパッケージを使ってもよい。インストール後、/usr/local/etc/nginx/nginx.confを自分の環境に合わせて編集する。また、/etc/rc.confに

nginx_enable="YES"

と忘れずに追記する。

PHP5のインストール

 portsからインストールする。PukiWikiCGIとして動かすので、以下の項目を有効にする:

 上記に加えて、たぶん次の項目も有効にしておく必要があるだろう:

  • MULTIBYTE: Enable zend multibyte support

lighttpdのビルドとspawn-fcgiのインストール

 nginxでホストするのになぜlighttpdが必要なのか? nginxは自分でFastCGIを起動しないので、lighttpdに含まれるspawn-fcgiを拝借する必要があるのだ。portsを使ってビルドしてもよいし、バイナリパッケージを使ってもよい。spawn-fcgi以外の目的でlighttpdを使う予定がないなら、portsを使う場合はビルドだけでインストールする必要はないし、パッケージを使う場合は/usr/local/bin/spawn-fcgiを退避した後でパッケージをアンインストールすればよい。

追記: 参考にした記事のコメント部分に、spawn-fcgiだけパッケージで導入できると書いてあった。portsは/usr/ports/www/spawn-fcgi

FastCGIを起動・終了するシェルスクリプト

 参考記事の中でspawn-fcgiを起動するためのシェルスクリプトのサンプルが紹介されているので、これをダウンロードして/usr/local/etc/rc.d/php.cgi.shにコピーする。

nginxとFastCGIの接続

 nginx.confファイルのserverコンテキスト部分にlocationセクションを作り、*.phpファイルが参照されたら要求をFastCGIに渡すように設定する。/usr/local/etc/nginx/nginx.conf-distの中に

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

と書かれた部分があるので、これを参考にする。筆者の場合、/usr/local/www/直下にPukiWikiのファイルを置くことになるので、次のようになる。

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root /usr/local/www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/www$fastcgi_script_name;
            include        fastcgi_params;
        }

PukiWikiのインストール

 本家からUTF-8*2をダウンロードして展開する。pukiwiki.ini.phpを自分の環境に合わせて編集し、ディレクトリツリーごと/usr/local/www/にコピーして作業は完了する。

*1:"engine x"と発音するらしい。

*2:もちろんEUC版でも構わない。