Apache HTTPサーバ – Upgrading to 2.4 from 2.2 超意訳版
前回、Gentoo Box の Apache を 2.4.1 に上げたメモを書いたが、2.2 から 2.4 にするに当たって Upgrading to 2.4 from 2.2 – Apache HTTP Server を読むべきだと書いた。ただ、現状で公式に日本語翻訳されたものがないので、例によって超意訳をしてみた。間違いがある場合は指摘していただけるとうれしい。
Table of Contents
Upgrading to 2.4 from 2.2
皆さんのアップグレードを支援するために、我々は Apache HTTP サーバのユーザにとって極めて重要な情報をまとめたドキュメントをメンテナンスしている。これらの情報は短くまとめるつもりであり、より多くの情報をApache HTTP Server 2.4 の新機能の概要や src/CHANGES
で見つけることができるだろう。アプリケーションやモジュールの開発者向けには、API Changes in Apache HTTP Server 2.4 since 2.2 にアップデートの概要がある。
このドキュメントを読めば、設定を変更する必要があるサーバの動作の変更点や、2.2 を現在使っているユーザがこれまでと同じように 2.4 を使い続けるためにどのようにすればよいかが分かる。2.4 の新機能を使いこなすためには、新機能の概要を参照すること。
このドキュメントでは、2.2 と 2.4 の違いのみ記述している。もし 2.0 からアップグレードするなら、2.0 から 2.2 へのアップグレードも併せて読んだほうがいい。
コンパイル時の設定についての変更
コンパイルのプロセスについては 2.2 と非常に似ている。ほぼ全ての場合、既にインストールされたもののソースツリーにある build/config.nice
にあるような前の configure オプションが使えるだろう。デフォルトの設定についてはいくつか変更がある:
- mod_authn_default, mod_authz_default, mod_mem_cache モジュールは削除された。もし 2.2 で mod_mem_cache を使っているなら、2.4 では mod_cache_disk を参照。
- ロードバランサの実装については、mod_proxy に実装されていたものがすべて個別のモジュール(例えば mod_lbmethod_bybusyness)に移された。そのため、設定で使っているロードバランシング関係のモジュールをビルドした上でロードする必要がある。
- BeOS, TPF, そして A/UX, Next, Tandem のような更に古いプラットフォームのサポートは終了した。いずれにせよ、これらの実装は何かしら正しく動作しなかっただろう。
- configure: ダイナミックモジュール (DSO) がデフォルトでビルドされる。
- configure: デフォルトでは、基本的なモジュールのみがロードされ、その他の
LoadModule
ディレクティブはコメントアウトされている。 - configure: most モジュールオプションはデフォルトでビルド対象となる。
- configure: reallyall モジュールオプションは、all に加えて開発者用のモジュールを追加する。
- apr と apr-util: APR と APR-Util は Apache httpd 2.4 にはもうバンドルされていない。既にインストールされているバージョンを使うか、Apache APR からソースをダウンロードして ./srclib/ 以下の apr/apr-util ディレクトリに展開した上で
--with-included-apr
を指定する必要がある。
実行時の設定についての変更
認証の設定周りはかなり変更されており、それに加えていくつかの小さな変更がある。そのため、2.2 の設定ファイルを 2.4 で使う前にいくつか変更する必要がある。
認証
認証を使っている設定ファイルはほぼすべて変更する必要がある。
認証、承認、アクセス制御、中でも特に認証系のディレクティブが適用される順序を制御する新しい機能について説明している単純な承認のその先は熟読しておくべきだろう。
アクセス制御
2.2 では、クライアントのホスト名、IP アドレスやその他のクライアントリクエストの特徴をベースとしたアクセス制御で、Order
, Allow
, Deny
, Satisfy
ディレクティブで制御されていた。
2.4 では、新しく実装された mod_authz_host モジュールを使い、その他の認証チェックと同じ方法でアクセス制御される。古い設定ファイルの互換性のために、mod_access_compat モジュールが新しく提供されているが、とはいえこういった古いアクセス制御関係の設定は新しい認証機構の記述に置き換えるべきである。
以下に、同じようにアクセス制御を行うために、2.2 と 2.4 ではどう書くかの例を示す。
この例では、全てのアクセスを拒否する。
# 2.2 configuration: Order deny,allow Deny from all
# 2.4 configuration: Require all denied
この例では、全てのアクセスを許可する。
# 2.2 configuration: Order allow,deny Allow from all
# 2.4 configuration: Require all granted
この例では、example.org ドメインのホスト全てからのアクセスを許可し、それ以外からは拒否する。
# 2.2 configuration: Order Deny,Allow Deny from all Allow from example.org
# 2.4 configuration: Require host example.org
その他の設定についての変更
以下の設定については、多少調整する必要がある場合がある。
MaxRequestsPerChild
は MaxConnectionsPerChild に名前が変更された。これにより、実態がよりディレクティブの名前に近づいた。MaxRequestsPerChild
についても引き続きサポートされる。MaxClients
は MaxRequestWorkers に名前が変更された。これにより、実態がよりディレクティブの名前に近づいた。event といった非同期 MPM については、クライアントの最大数はワーカースレッドの数と同等ではない。MaxClients
についても引き続きサポートされる。- The DefaultType ディレクティブは、
none
以外の値が指定されている場合に出力される警告を出さないようにする以外、何ら動作に影響を与えない。2.4 でこのディレクティブを置き換えるために、別の設定を行う必要がある。 - EnableSendfile ディレクティブは、2.4 ではデフォルトで Off になっている。
- FileETag ディレクティブは、2.4 ではデフォルトで “MTime Size” (Iノードなし) になっている。
- mod_log_config:
${cookie}C
がクッキー名に完全一致する。前は部分一致だった。 - mod_dav_fs: DavLockDB ファイルの形式が、iノードを持つシステムについては変更になった。DavLockDB で指定されたファイルはアップグレードの際に削除する必要がある。
- KeepAlive ディレクティブは、
On
とOff
のみ受け付けるようになった。以前は “Off” または “0” 以外が “On” として扱われていた。 - AcceptMutex, LockFile, RewriteLock, SSLMutex, SSLStaplingMutex, WatchdogMutexPath ディレクティブは Mutex ディレクティブひとつに統合された。2.2 で使われていたこれら削除済みのディレクティブについて、2.2 の設定ファイルからただ削除すればいいのか、または Mutex ディレクティブで置き換える必要があるのかを吟味する必要がある。
- mod_cache: CacheIgnoreURLSessionIdentifiers ディレクティブは、クエリストリングに対して部分一致から完全一致するようになった。例えば
/someapplication/image.gif;jsessionid=123456789
を引っ掛けるためにsessionid
を使っている場合などは、完全なパラメータ名jsessionid
に書き換える必要がある。 - mod_ldap: LDAPTrustedClientCert ディレクティブは、他と同じようにディレクトリごとの設定のみになった。もしこのディレクティブを使っているなら、必要なディレクトリ全てに対して設定されているか、設定ファイルを確認する必要がある。
- mod_filter: FilterProvider の文法が変更され、フィルタが適用されるかのブーリアン表現になった。
- mod_include:
#if expr
SSI 要素が SSI パーサ で使えるようになった。古い文法については、新しく追加されたディレクティブ SSILegacyExprParser を読み込むことで引き続き使える。- あるディレクトリ向けに書かれた SSI* 設定ディレクティブによって、その他のディレクトリごとの SSI* ディレクティブがデフォルト値にリセットされないようになった。(SSI* config directive in directory scope no longer causes all other per-directory SSI* directives to be reset to their default values.)
- mod_charset_lite:
DebugLevel
オプションは、LogLevel の引数にモジュールを指定できるようになったので削除された。 - mod_ext-filter:
DebugLevel
オプションは、LogLevel の引数にモジュールを指定できるようになったので削除された。 - mod_ssl: CRL (訳注: Certificate Revocation List) ベースの証明書失効チェックを行うには、SSLCARevocationCheck ディレクティブで明示的に設定する必要がある。
- mod_substitute: 1行は最大 1MB に制限されるようになった。
- mod_reqtimeout: このモジュールをロードすると、(訳注: リクエストヘッダやボディが送られてくるまでの)デフォルトタイムアウトが設定される。
Misc Changes
- mod_autoindex: .xhtml ファイルについてもタイトルをファイル内からスキャンして取得したり説明を表示するようになった。これまでは無視されていた。(訳注: IndexOptions ScanHTMLTitles のときなど)
- mod_ssl:
*_DN
変数のデフォルトの形式が変更された。古い形式も SSLOptionsLegacyDNStringFormat を指定することで使うことができる。SSLv2 プロトコルはサポートされない。SSLProxyCheckPeerCN と SSLProxyCheckPeerExpire はデフォルトで On になる。これにより、問題があったり期限が切れたりした証明書でホストされている HTTPS ホストへのプロキシ接続要求は 502 Bad gateway を返すようになる。 - htpasswd は全てのプラットフォームで MD5 を使うようになった。
- NameVirtualHost ディレクティブは警告を出さないようにする以外に何ら効果のないディレクティブになった。全てのアドレスとポートの組み合わせは暗黙に名前ベースのバーチャルホストとして扱われる。
- mod_deflate モジュールは、圧縮後のデータが圧縮前よりも大きくなると分かっている場合には圧縮しないようになった。
- mod_include モジュールで
#if expr=
の新しい文法に調整されていなかったり、SSILegacyExprParser ディレクティブがエラードキュメントを含むディレクトリに対して有効になっていなかったりする場合には、2.2.x 向け多言語エラードキュメントは動作しない。
Third Party Modules
ロードする前に、2.4 向けに再コンパイルする必要がある。
2.2 向けにデザインされたモジュールは、多くの場合 Apache HTTP Server 2.4 でもソースコードを変更することなく動作する。一部については変更する必要がある。概要については API update を参照。
アップロード時のよくある問題
- 起動時のエラー
Invalid command 'User', perhaps misspelled or defined by a module not included in the server configuration
– mod_unixd モジュールをロードすればよい。Invalid command 'Require', perhaps misspelled or defined by a module not included in the server configuration
またはInvalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration
– mod_access_compat モジュールをロードするか、2.4 の認証ディレクティブの書式に書き換えればよい。Ignoring deprecated use of DefaultType in line NN of /path/to/httpd.conf
– DefaultType を削除するか、別の設定で置き換えればよい。
- サーバリクエスト時のエラー:
configuration error: couldn't check user: /path
– mod_authn_core モジュールをロードすればよい。