2012/05/10(木)Apache 2.4 + mod_perl を導入してみた
2017/10/12 4:58
まだ置き換えるには時期尚早ではありますが、近い未来 2.0系/2.2系から置き換わっていくのは流れとしては自明なので、取り扱いを確立させるために、弊社の実験サーバにて、2.2.22 から、最新バーション 2.4.2 へ置き換えてみました。
付属マニュアルの日本語訳は、現状、2.2 系のものが流用されているようです。
上記のような感じです。
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 系で アクセス制御の文法が変わっている
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 ← 「次バーションで削除」という警告が出る。
当面は、弊社実験サーバでの運用の留めたいと考えています。