本日、このサーバーのHTTPサーバー Apache のバージョンを2.2 から 2.4 に更新しました。
できることなら 2.2 系で使い続けたかったのですが、pkgng への切り替えで、mod_php5 を更新するためには、Apache 2.4 に上げるしかないため、渋々 2.4 に更新しました。スムーズに切り替えできない事は覚悟していたのですが、できることなら、10分以内のダウンタイムにとどめたいところです。
いきなりメインサーバーを更新するのは恐いため、先に、アクセス数が少ないサーバーを apache24 に更新し動作させるところまで実施して、動作確認できた httpd.conf ファイルをテンプレートとして、本番サーバー用 apache24 用設定ファイルを作成しておき、Webサーバーのダウンタイムを数分にととどめる予定でした。
しかし、、、、、httpd.conf 設定はサーバー毎に異なるため、思惑通りには行きませんでした。
mod_php5 とapache22 のパッケージを削除した後、mod_php5 をインストール。これで mod_php5 と apache24 がインストールされました。
この後で、カスタマイズ済みとして準備しておいた httpd.conf や httpd-vhost.conf などextraファイルを設定位置にコピー。 apache24を起動すれば更新終了のはずでした。
WordPress で構成しているページをアクセスすると、「Internal Error」で動きません。
エラーログを確認したところ、大きく分けて二通りのエラーが記録されていました。
- 「.htaccess: order not allowed here」、「cgi-bin/.htaccess: <Files not allowed here」
- CGIをアクセスすると、HTMLではなくCGIソースが表示される
apache24に更新に成功したサーバーは、単独サーバー。それに対し、このサーバーは、「システム管理メモ」と「Diabloメモ」を別ホスト名で動かすため、仮想WebサーバーになっていることやCGIを動かしている点が少し異なります。WordPress を使っている点は同じ。
しかし、Apache 2.2 の時は正常に動作していたドキュメントディレクトリーが、なぜ? と検索エンジンで検索してみると、ヒントが見つかりました。原因は分からないものの、エラーが同一で回避策があるようです。httpd-vhosts.conf の仮想サーバーセクション内に、directive を追加する必要があるようです。
上記サイトの情報を元に、httpd-vhosts.conf を編集したところ、上記1のエラーは解決。WordPress が動くようになりました。
次に、CGIページを表示させようとすると、CGIのソースがテキストで見えてしまうという症状。
昔は何度も体験した症状で、httpd.conf の中に .cgi ハンドラーを登録し忘れると発生する現象でしたが、今回はそんなミスはしていません。
これも検索してると、httpd.conf 内のある行をコメントから有効にする必要があるとの事。
Apache22の場合、httpd.conf 内 LoadModule 行は全てコメントにされていましたが、apache24 は最低限のモジュールのみがコメント解除され、必要に応じて管理者が手作業で有効化すようになっていて、CGI 用の LoadModule もデフォルトコメント行になっていました。 よく分かりませんが、 mod_cgi に関連しそうな次の2行をコメント解除して、再起動。
LoadModule cgi_module libexec/apache24/mod_cgi.so LoadModule cgid_module libexec/apache24/mod_cgid.so
これで無事、CGIが復活。まだもう少し調整するところがありますが、Apache 2.4 への更新の第1段階が終了しました。