2012/05/10(木)Apache 2.4 + mod_perl を導入してみた

2017/10/12 4:58 サーバ運営・管理
今年2月にリリースされた Apache 2.4。
まだ置き換えるには時期尚早ではありますが、近い未来 2.0系/2.2系から置き換わっていくのは流れとしては自明なので、取り扱いを確立させるために、弊社の実験サーバにて、2.2.22 から、最新バーション 2.4.2 へ置き換えてみました。

20120510_1.png

付属マニュアルの日本語訳は、現状、2.2 系のものが流用されているようです。
上記のような感じです。

20120510_2.png

perl 5.14.2 + mod_perl 2.0.6 + Apache 2.4.2 + PHP 5.4.2 という組み合わせですが、
mod_perl がまだApache 2.4 には対応しておらず、そのままでは、コンパイル自体が通りません。

既に幾つか言及されていますが、2.2系からの変更が地味に多いです。
正直なところ、しばし嵌りましたorz
気づいた点を列挙してみましょう:

○ apr, apr-util, pcre は、ビルドインで提供されなくなった
  apr 、apr-util、 pcre 、これら3つのユーティリティ は、Apache の構築に欠かせないものですが、それ故 2.2 系までは Apache ソースツリーと一緒に配布されていました。
 なぜか 2.4 系では、これらは提供されなくなり、自前で構築するか、拾ってくる必要があります。
 先ず、apr と apr-util を ここからダウンロードで持ってきて、 apache ソースツリーの srclib ディレクトリ配下にソースツリーごと置きます。
 現在(2012/05/10) のバージョンは、 apr-1.4.6 , apr-util-1.4.1。
#英文ですが、 INSTALL ファイルにそう書いてある模様です。
 ソース配置手順はこんな感じ:
# cd httpd-2.4.2/srclib
# cp ../../apr-1.4.6.tar.bz2 ./
# cp ../../apr-util-1.4.1.tar.bz2 ./
# tar xvzf apr-1.4.6.tar.bz2
# tar xvzf apr-util-1.4.1.tar.bz2
# mv apr-1.4.6 apr
# mv apr-util-1.4.1 apr-util


 apr と apr-utilを事前インストールする方法もあるようですが、筆者の環境ではApache本体のコンパイルそのものが上手くいきませんでした。

○ pcre , expat は ports 等で。
  pcre は 8.20 以降、 expat は 2.0 以降が必要です。
  事前にインストールしておくとよいです。

○ Apache 2.2系では、構築デフォルトが「スタティックリンク」
  Apache 2.4系では、構築デフォルトが「DSO」
→ ソースコードからコンパイルする際、2.2系の configure オプションそのままでは、同じように構築されず、結局は httpd.conf の構文エラーとなって不具合を起こす。
  エンタープライズ系には有益な場面も多いのでしょうが、この変更は「何を勘違いしたか?」的な感覚を覚える。
 2.4系では、明示的に「スタティックリンク」を指定することで、凌ぐ。

○ Apache 2.4 系で アクセス制御の文法が変わっている
20120510_3.png

httpd.conf などのサーバ設定ファイル、.htaccess などの挙動変更設定ファイルは全て見直して、変更する必要があります。

 ここまでは、結構記載があります。
 しかし、嵌ったのは SSI の挙動。どこにも記載がない。

 2.2.22 で普通に動作していた、以下のような SSI が認識されません。
<!--#if expr="'$REMOTE_ADDR' = '/^192.168.1.1/'" -->

 このような評価式は、perl と同じ書式にすることで解決しました。
<!--#if expr="'$REMOTE_ADDR' eq '/^192.168.1.1/'" -->


 構築オプションの問題かもしれませんが、原因はわかりません。
 2.2系までは、pcre が内包された形で配布されていたけれども、2.4系では、予め別途インストールするようになったため、数式評価の部分で挙動が変わったということでしょう。

○ 削除ディレクティブなどがある

 LockFile    ← 文法エラー
 SSLMutex    ← 文法エラー
 DefaultType   ← text/plain の指定は、「無視する」と警告が出る。
 NameVirtualHost ← 「次バーションで削除」という警告が出る。
 
当面は、弊社実験サーバでの運用の留めたいと考えています。