FreeBSD: Apache PHP5モジュールでまたハマる

一体何度目なんだろう?
また、Apache と phpモジュールで、またハマりました。

ports 管理に pkgng を使わざるを得なくなって、それはそれでメリットも大きいのですが、融通が利かないという欠点もあり、今回、私のヒューマンエラーが重なり PHPで書かれているページが動かないというトラブルが発生してしまいました。
WordPress や phpMyAdmin のページをアクセスすると、真っ白になるか、PHPのソースがそのまま見えてしまうというもの。過去に何度も遭遇している現象のため、簡単に解決できるはずだったのですが、6時間くらい悩んでしまいました。

pkg upgrade コマンドを発行する度に、 (options changed) やら (direct dependency changed) が大量表示されるのがうっとうしいので、一度 Y(es) を選択してバイナリーインストールを行い、その後カスタマイズが必要なパッケージだけ手動で戻そうと思ったのがトラブルの始まり。
このサーバーとは別のマシンで、FreeBSD 8.4、www/apache22、www/php5、lang/php5 で構成しているサーバーがあるのですが、そこで “pkg upgrade” を行ったところ、

www/apache22
www/mod_php5

だけ、conflict があるとのことで自動更新を拒否されてしまいました。
すでに ports の標準バージョンは Apache2.2 から Apache 2.4 に更新されたため、この際 Apache2.4 に上げるかということで、上記二つのパッケージを pkg delete で削除し、”pkg install apache24 mod_php5″ で更新をかけ、何事もなくスムーズにインストールが終了しました。

問題はこの後からで、Apacheの設定ファイル httpd.conf ファイルは、2.2 のものは削除はされないものの 2.4 では利用できず、2.4 の httpd.conf テンプレートを初めからカスタマイズしなくちゃいけません。サーバー毎にドキュメントルートの位置が違っていたり、 Alias 指定しているディレクトリがあったりするので、サーバー毎、これを一つ一つ 2.2 の httpd.conf から2.4のものに転記しなくちゃいけません。2.2 と 2.4 では微妙にディレクティブやセクション位置が異なったりで転記するのが結構面倒くさい。Apache 2.2 のものがそのまま使えないかとコピーしたところ、モジュールを格納する /usr/local/libexec/apache2x はapacheのバージョン込みの名称になっていて結局そのままでは使えない。

なんとか転記を終えて Apache2.4 を起動したら、スタティックページは動作するものの、PHPで記述されたWordPress と phpMyAdmin が動きません。
こんな時は、私が行うミスは、mod_php5が入っていないか、httpd.conf 中の LoadModule セクションのコメント外し忘れ。ところが今回は、どちらも問題なし。pkgng を使って依存関係があるパッケージをインストールしたのは今回が初めてなので、必要なファイルがちゃんとインストールされていないんじゃない? それとも httpd.conf の転記ミス?正常に動くファイルがないので、よく分からないわけです。でもまあ、元の apache2.2 にダウンデートしてテストするのがよさそうです。(pkg upgrade のうっとうしいメッセージは消えているだろうから、2.2で、そのまま使ってもいいし。)
“pkg install apache22″ コマンドで apache22 をインストールしようとしたら、自動的に apache24 と mod_php5 が削除されるのはいいのですが、mod_php5 は apache22 との組み合わせではインストールできない!手動の make でmod_php5 を入れようとしても IGNORE にマークされているからと表示されてビルドも出来ない。が~んですよ。削除はできてもインストールは出来ないとは!動作する環境に戻すという試みは見事に失敗。
mod_php5 を入れるためには、自動的に apacheも2.4 に上げざるを得ないというわけです。 pkg2ng を行う前は問題なかったはずなのに~と融通が利かない pkg コマンドに不満たらたら。

こうなったら、Apache2.4 と mod_php5 の組み合わせで切り分けを行うしかありません。直接の原因は、PHP拡張子のファイルをCGIと認識できない事ですから httpd.conf の中のその関係を一つ一つ見て行けば良かったわけです。(pkg コマンドを疑って、httpd.conf を最後までチェックしていなかった。)

問題は、”AddHandler php5-script .php” の記述漏れ。気づかなかった~。
<IfModule mime_module> セクションの中に、1行書いたら動くようになりました。自分で、Apache と PHP を使うための httpd.conf ファイルカスタマイズ方法を書いているのに、見落とすんですよ。

良い機会なので、 Apache で PHP を使う場合に PHPソースが表示されてしまうとき、 httpd.conf の中のチェックすべき項目をメモしておく事にします。

  • <Directory /> をコメントにする、または修正する。(デフォルトだとすべてのCGIが動かない)
  • DirectoryIndex に index.php を追加する
  • AddType application/x-httpd-php .php .phtml .php3
    AddType application/x-httpd-php-source .phps
    AddType text/html .php
    の3行があることを確認。
  • AddHandler php5-script .php を追加する
  • LoadModule php5_module 行が存在していて、さらに、コメントを外されている事を確認。(当然 libphp5.so が指定ディレクトリにインストールされている事)

次回は起きて欲しくないものの、短時間で解決できる事を望みます。

コメントを残す