…実にがっかりなことでハマったので記録しておくことにする。

さくらのVPSにnginxとfastcgiのPHPをインストールしてある。要するにHTTPはnginxが受け付けて、PHPのリクエストに関しては、nginxからFastCGIで常駐しているPHP-cgiを呼び出して処理する…そんな構成になっている。

このサーバでは、WordPressが動いているのだが、nginxが軽いせいか、普通にApache httpd+mod_php5の組み合わせよりも体感速度は速い。

nginxとFastCGIで起動してあるphp-cgiは連携はしているものの、起動するプロセスの数を制御する関係にはないので、FastCGIで常駐しているphp-cgiの数以上は同時にリクエストを捌けないという欠点もある。しかし、この欠点が問題になるようなシーンでは、動的にいくつもプロセスを起動すれば解決するような気もしない(結局、山ほどプロセス起動してみても、足りないリソースが増えるわけじゃないし)から、あんまり気にしてない。裏側のphp-cgiが足りなくなったら、nginxがBad Gatewayあたりを返しそうな気がするから、それを見かけたら、リソース見合いでFastCGIで起動するphp-cgiの数を増やすかなぁという感じ。

そんな構成のサーバに対して、久々にメンテナンスでもするかってことで、PHP5のバージョンアップを行うことにした。

いつも通りのPHPのビルドオプションでビルド(…実はコレがまずかったのだが、すぐに気づくこともなく…)に成功。make installでインストールを完了して、CLIのPHPを実行してみたら、普通に動作するのだが、php-cgiを常駐させるために使っているspawn-fcgiがうまく動かない。

メンテナンス前に普通に使えていた起動スクリプトからphp-cgiを常駐させようとしても、なぜか、子プロセスがexitしてしまい、pidファイルがむなしく残る…と。いろんなログを見てみても、何も出力されておらず、ただ、起動直後に子プロセスがexitしていることだけがわかった。

まぁ、PHPを新バージョンにするまでは普通に動いていたわけだから、PHPが問題ってのはわかったので、1バージョン前のPHPをビルドし直してみたり、なぜかspawn-fcgiのバージョンを更新してみたり…ひたすら迷走。

ふと、PHPのビルドオプションを確認し直しているときに、軽いめまいが…。いつものPHPのビルドオプション=Apache httpd + mod_php5用なんだった(涙)端的に言えば、FastCGIで常駐させるってのにPHP5のビルドオプションに「–enable-fastcgi」が追加されてなかった。そりゃ、起動スクリプトで起動しようとしても終了するわけだ(汗)

…というわけで、PHP5を「–enable-fastcgi」付でビルド(実は、ダメ押しで「–with-fastcgi」なんて謎のオプションつけてconfigureかけちゃったのは秘密)したら、何事もなくFastCGIでphp-cgiを常駐させられた…と。

ま、いくらネタがないからってケアレスミス(構成管理ミス…か)をネタにしちゃいけないなぁ…なんて思いながら、しっかり書いちゃった(汗)