FreeBSD + nginx + FastCGI + PukiWiki
自分の備忘録用にWikiがほしくなったので、自室で動かしているFreeBSDにPukiWikiを導入することにした。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からインストールする。PukiWikiをCGIとして動かすので、以下の項目を有効にする:
上記に加えて、たぶん次の項目も有効にしておく必要があるだろう:
- 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; }