[APACHE DOCUMENTATION]

Apache HTTP Server Version 1.3

Apache 1.3 の新機能の概要

今回のリリースの新しい特徴は、Apache の機能的な拡張です。コアコードが大きく変わっているので、初期の Apache (と NCSA デーモン)よりも最新の Apache は、はるかに自由です - 何か問題がある場合には互換性についてでチェックしてください。

Apache 1.2 からアップグレードするなら、アップグレードについてを読むと良いでしょう。

拡張機能: Core | パフォーマンスPerformance | 設定 | モジュール | API | その他


Core の拡張:

Dynamic Shared Object (DSO) サポート
Apache のモジュールは runtime にロードされます; これは、必要なときにだけモジュールがサーバのプロセス空間にロードされて、Apache によるメモリの使用を大きく減らします。DSO は現在、FreeBSD、OpenBSD、NetBSD、Linux、Solaris、SunOS、Digital UNIX、IRIX、HP/UX、UnixWare、AIX、ReliantUnix、generic SVR4 といったプラットフォームでサポートされています。
Windows NT/95 のサポート
Apache は試験的にWindows NT と Windows 95 をサポートしています。
再構築されたソース
Apache のソースファイルは再構築されています。Apache ユーザにとっての主な違いは、Configuration にある"Module"行が、若干異なる構文で"AddModule"に置き換えられていることです。モジュールの作者には、それらのモジュールを追加するのが若干容易になっています。
確実なパイプログ
ほとんど全ての Unix アーキテクチャで、Apache は mod_log_config で"reliable"なパイプログを実装しています。なんらかの理由でログしている子プロセスが死んでも、Apache はサーバ全体を再起動することなく回復し、子プロセスを生じます。さらに、もしログしている子プロセスが"stuck"になって、十分にそのパイプを読んでいなくても、Apache は子プロセスを再起動します。これはログの交替、ヒットのフィルタリング、様々なバーチャルホストの real-time のログの分割、on the fly の非同期 DNS リゾルバのときに流れをよくします。


パフォーマンスの改良

詳しくは the new performance documentation を見てください。


設定の拡張

統一されたサーバ設定ファイル
(Apache 1.3.4) 三つのサーバ設定ファイルの内容(httpd.conf, srm.conf, access.conf)は、一つの httpd.conf ファイルに統一されました。srm.confaccess.conf ファイルは、ウェブマスターに httpd.conf を見ることを指示しているコメント以外は空になっています。さらに、統一された httpd.conf ファイルは直感的で重要な順番で directive を許可するように再構成されています。
設定ファイルの継続行
サーバ設定ファイルの directive 行は、正当な Unix 継続メカニズムを使うことによって様々な行に分割されています。すなわち、次の行が連結することを示す行では、最後の非ブランク文字が '\' です。
Apache の Autoconf-style Interface (APACI)
Apache 1.3 まで、完全な Apache パッケージには独創的にバッチする能力とインストール手段がありませんでした。これは現在トップレベルの configure スクリプトと、対応する Makefile.tmpl ファイルに与えられています。最終的にはバッチにある古い src/Configure をドライブして、GNU スタイルのディレクトリ・レイアウトでのパッケージをインストールできるようにすることです。古い設定の仕組みからのオプションは、Apache をフレキシブルにカスタマイズするために、たくさんの新しいオプションを加えて役に立ちます。
注: デフォルトのインストール・レイアウトは Apache 1.3.4 から変更されています。詳しくは、README.configureINSTALL を見てください。
APache eXtenSion (APXS) サポート・ツール
現在 dynamic shared object (DSO) ファイルからは runtime 下でモジュールのロードをフルサポートしています。off-source の構築をする新しいツールである apxs は、DSO-base のモジュールをインストールしてアクティブにします。ユーザからのプラットフォームに依存する DSO-build コマンドを隠して、Apache ソースツリーの外部でのモジュールの構築を簡単にします。この APACI を実現するには、apxs ツールと共に Apache C ヘッダファイルをインストールします。
Apache のデフォルトのディレクトリパスが /usr/local/apache/ に変更
Apache の ServerRoot のデフォルトディレクトリは、NCSA 互換の /usr/local/etc/httpd/ から /usr/local/apache/ に変更されます。この変更はデフォルトの設定(とドキュメント)を対象にします; もちろん Apache 起動時に -d ServerRoot と -f httpd.conf スイッチを用いて無効にすることは可能です。
HTTP/1.1-style Virtual Host の改良
新しい NameVirtualHost directive は HTTP/1.1 形式のバーチャルホストになる IP の address:port を示すために使われます。これはクライアントからの Host: ヘッダを基にしたバーチャルホスティングです。以前このアドレスはマシンの"main address"として同じでしたが、これはユーザに際限のない問題を引き起こし、十分なものではありませんでした。設定の更なる詳細は Apache Virtual Host documentation を見てください。
Include directive
Include directive は構文解析時に直に他の設定ファイルをインクルードします。
vhost セットアップをデバッグするための -S コマンドラインオプション
もし Apache が -S オプションで起動されれば、VirtualHost セクションをどのように解析したかについての情報を吐き出します。これはバーチャルホストの設定をデバッグしようとする人には便利です。
HTTP メソッドの制御
<LimitExcept> と </LimitExcept> は引数で示されていない、なんらかの HTTP アクセスメソッドに割り当てるアクセス制御 directive のグループで使われます。すなわち、 とは反対で、標準と非標準/無認識なメソッドの両方を制御するために使われます。


モジュールの拡張

mod_negotiation の改良
オプションのコンテント・ネゴシエーション(MultiViews)モジュールは、Apache 1.3.4 で完全にオーバーホールされ、最新の HTTP/1.1 リビジョンと RFC 2295、RFC 2296 の実験的な Transparent Content Negotion 機能を組み込んでいます。
NEW - スペル訂正モジュール
このオプションのモジュールは、サーバから要求されたドキュメント名のスペルと大文字使用のエラーを頻繁に訂正します。
NEW - 環境変数の条件付き設定
SetEnvIf SetEnvIfNoCase の追加。これらはサーバに環境変数の設定を許可し、CGI はリクエストの属性に準拠します。
NEW - "Magic" MIME-typing
オプションの mod_mime_magic が追加されています。"magic numbers" と、ファイルのコンテンツからどんなコンテンツであるかを判別するための指示を使います。もしファイルの拡張子によって決定されなければ、ファイルのメディアタイプを設定するためにこの情報を使います。
NEW - ユニークなリクエスト識別子
mod_unique_id は、あらゆる他のヒットからのヒットを区別するユニークな識別子の生成を含むことができます("Unique" はそれを限定します)。識別子は環境変数 UNIQUE_ID で役に立ちます。
mod_proxy の拡張:
mod_include 文字列比較の拡張
文字列ベースの server-side include (SSI) フロー制御 directive には現在、未満(<)、以下(<=)、大なり(>)、以上(>=) の比較ができます。以前の比較は等号、不等号だけでした。
ServerRoot 相対認証ファイル名
フルパスでない場合、様々な認証モジュールの認証ファイル名は ServerRoot に相対するものとして扱われます。
ディレクトリ index の拡張:
CGI スクリプトの出力バッファの減少
Apache の以前のバージョンでは、CGI スクリプトの出力がサーバによって内部的にバッファされて、バッファが一杯になるか、CGI スクリプトが終了するまでクライアントにフォワードしません。Apache 1.3 では、クライアントに対するバッファは、それが何かを含んでいるときに消費されて、サーバはスクリプトからの情報を待ちます。これは、長いプロセス操作の間 CGI スクリプトが部分的なステータスリポートを出すようにします。
Alias and Redirect のための正規表現サポート
新しいAliasMatchScriptAliasMatchRedirectMatch directive は正規表現の一致を使うことができます。さらに、新しい<DirectoryMatch><LocationMatch><FilesMatch> の記述は正規表現のセグメント化に新しいシンタックスを提供します。
AddModuleInfo directive が mod_info に追加されています。
指定されているモジュールと共に一覧される追加情報を許可します。
ログを不可能にする TransferLog がなくなりました。
もし TransferLog directive が与えられていないと、ログは書き込まれません。これは他のログモジュールとの共存をサポートします。
name ログフォーマット能力
LogFormat directive はログフォーマットを指定するニックネームを与えるように拡張されています。 いちいち完全なログフォーマット文字列を拾い読みするよりも、他の LogFormatCustomLog directive でこれらのニックネームを使うことができます。
条件付きログ
mod_log_config は環境変数を基にしたログをサポートしています。mod_log_referer と mod_log_agent は現在薦められません。
ディレクトリ毎の mod_cern_meta 設定
mod_cern_meta は現在ディレクトリ毎の設定が可能です。
New map types for RewriteMap directive
新しいマップタイプである `Randomized Plain Text' と `Internal Function' が mod_rewrite の RewriteMap directive に追加されました。新しい二つの機能: まず、rewriting マップでルックアップされた値からランダムにサブ値を選択することができます(逆プロキシー状態のバックエンドサーバ間で選ぶのに便利です)。次に、フィックスされた場合(upper or lower)に対して URL 部分を解釈することができます(mod_rewrite によって virtual host の塊にするときに便利です)。
CIDR と Netmask のアクセス制御
mod_access directive は CIDR (Classless Inter-Domain Routing) スタイルのプレフィックスと、IP アクセスリスト制御のためのネットマスクをサポートします。


API の追加と変更

全てのモジュールライターとコードハッカーのために:

child_init
Apache API の新しいフェーズは、なんらかのリクエストがハンドルされる前に"heavy-weight process,"毎に一度呼ばれます。これはプロセス毎に一度行われる必要があるものを、モジュールにセットアップさせます。例えば、データベースへの接続です。
child_exit
終了したときに、新しいフェーズが"heavy-weight process,"毎に一度呼ばれます。致命的な場合(segfaults や kill -9)には、呼ばれないことに気を付けてください。child_initchild_exit の機能は、ライフタイムが子プロセスのライフタイムと同じであるプールをパスします( Apache に回復の見込みがない modulo の完全に致命的なイベント )。対照的に、module init 機能は、親プロセスが終了するか再起動する時にライフタイムが終わるプールをパスします。
child_terminate
カレントのリクエストが終了した後に子プロセスが終了することを示す子プロセスで使われます。
register_other_child
http_main.h を見てください。これはモニターするために子プロセスを登録する親プロセスのために使われます。親プロセスは与えられたコールバック機能にステータスを報告します。これは httpd の子プロセスと共にモニターされる自身の子プロセスをモジュールに作らせます。
piped_log
http_log.h を見てください。この API は 実施しているパイプログに共通コードを与えます。特に、それをサポートしているアーキテクチャで確実なパイプログを実現します(すなわち、現在は Unix)。
scoreboard フォーマットの変更
スコアボードフォーマットは全く異なっています。一般的には"private"なインターフェースだと考えられますが、ここでは FYI として言及されています。
set_last_modified は3つに分割されています
古い機能である set_last_modifiedLast-Modified ヘッダ、ETag ヘッダ、処理している条件付きリクエスト(IMS のような)の設定を含むマルチジョブを行います。これらの機能は3つに分割されています: set_last_modifiedset_etagmeets_conditions です。領域の mtimemeets_conditions を容易にするために request_rec に追加されます。
新しいエラーログ機能: ap_log_error
全ての古いログ機能は評価されておらず、単一の ap_log_error と呼ばれる機能に置き換わりつつあります。これはまだ開発中です。
設定構文解析のための set_file_slot
set_file_slot ルーチンは、非絶対パスの ServerRoot のふりをする標準ルーチンを提供します。
post_read_request module API
このリクエストフェーズはリクエスト(ヘッダ)を読み込んだ直後と、内部リダイレクトを生成した直後に生じます。将来のフェーズに影響する環境変数を設定するためには、これは非常に便利です。
psocketpopendir
psocketpclosesocket の機能はリソース・トラッキングで race-condition のフリーソケットの作成を考慮します。 同様に popendirpclosedir はディレクトリの読み込みをプロテクトします。
is_initial_req
リクエストが最初のリクエストかどうかをテストします(すなわち、クライアントから来る一つ)。
kill_only_once
Apache が子プロセスを強引に殺すのを避ける ap_spawn_child 機能へのオプション
alloc デバッグモード
ALLOC_DEBUG の定義は、低いインパクトのサーバで使われる基礎メモリデバッグを準備します -- 0xa5 に割り当てられて、メモリバイトが解放されるように設定します。ALLOC_USE_MALLOC の定義は、それぞれのオブジェクトに対して malloc()free() を使う alloc コードを引き起こすことになります。これは、はるかに高く付き、Electric Fence と Purify のようなツールでテストするためにだけ使うべきです。詳しくは main/alloc.c を見てください。
ap_cpystrn
わずかに異なるセマンティクスの新しいstrncpy"lookalike"は、strncpy よりもはるかに速いです。なぜなら完全なバッファを zero-fill してはいけないからです。
table_addntable_setntable_mergen
これらの新しい機能は引数に pstrdup呼びません。これはスピードアップに大きく貢献します。コードが適切にそれらを使うようにする、いくつかのデバッグサポートがあります。詳しくは src/CHANGES を見てください。
construct_url
この機能は server_rec * を取ることから、request_rec * を取ることに変更したプロトタイプです。
get_server_nameget_server_port
リクエストされたサーバ名とポートを検索するときに、UseCanonicalName directive を扱う wrapper があります。
ap_bspawn_childap_call_exec のためのプロトタイプへの変更
Win32 で子プロセスが正しく動くように、spawn 機能(ap_bspawn_child としてパスする)と ap_call_execchild_info * が追加されました。nomenclature を少し整理して、単純な ap_spawn_childspawn_child_err を交換し、単純な ap_bspawn_childspawn_child_err_buff を交換します。
ap_add_version_component()
この API 機能はモジュールのために、Server: ヘッダ行に表示される、自身の追加サーバ・トークンを付加できるようにします。以前の 1.3beta バージョンはこの機能のために SERVER_SUBVERSION compile-time #define を使っていました。トークンが実際に表示されるかどうかは、新しい ServerTokens directive によって制御されます。


その他の拡張

EBCDIC メインフレーム機で走る BS2000/OSD への移植
初めて、Apache のこのバージョンは、本来のコードセットとして EBCDIC キャラクターセットを使ったメインフレーム機に対応したベータ版になっています。 (IBM/390 互換プロセッサーで BS2000/OSD OS が走るメインフレームの SIEMENS ファミリーです。このメインフレーム OS の最新機能は SVR4-like POSIX サブシステムです)。
AccessFileName の拡張
AccessFileName directive は一つ以上のファイル名を取ることができます。これは、サイトにネットワークのファイルシステムと一つ以上の Apache ウェブサーバからページを受け取らせて、共有ページが受け取られる間、サーバに基づいたアクセスを設定させます。
HostNameLookups のデフォルトは "Off"
HostNameLookups directive のデフォルトは"Off"になりました。これは、on になっていなければ、サーバは IP アドレスを名前にリソルバしません。不要な DNS トラフィックを避けます。
二重逆引き DNS の強制
HostnameLookups directive は二重逆引き DNS をサポートしています(tcp_wrappers では PARANOID として知られています)。逆引きマップの正引きマップが本来の IP を含んでいれば、IP アドレスは二重逆引き DNS のテストをパスします。 HostnameLookup の設定に関係なく、mod_access は二重逆引き DNS のテストをパスする全ての名前を要求する DNS 名を使ったリストにアクセスします(Apache の以前のバージョンでは、二重逆引き DNS を可能にするコンパイル時のスイッチを要求していました)。
LogLevel と syslog サポート
Apache はエラーログレベルの設定syslogd(8) 経由のエラーログ をサポートしています。
stdin/out/err からのデタッチ
ブート時に Apache は stdin、stdout、stderr からデタッチします。コンフィグファイルの読み込みに成功するまでは stderr からデタッチしません。そうしてコンフィグファイルのエラーを見ます。これは rsh や crontab から Apache を起動しやすくします。
2000 年問題の解決
mod_include によって使われるデフォルトの timefmt 年数表示を文字列は、2 桁ではなく、4 桁で表示するようになっています。mod_autoindex モジュールは FancyIndex のディレクトリ表示で年数を 4 桁で表示します。
分割ライブラリへ移動する一般ルーチン
OS によって異なるライブラリ・ルーチンを入れ替えたり、追加したりする Apache プロジェクトのために開発された、たくさんの機能とルーチンがあります。このほとんどが Apache サーバによってだけ使われますが、いくつかはサポートするアプリケーション(htdigest のような)によって参照され、これらの他のアプリケーションは構築に失敗します。なぜならルーチンはサーバにだけ作られるからです。これらのルーチンは分かれたサブディレクトリとライブラリに移動して、サーバとは異なる、他のアプリケーションによって使われます。src/ap/ サブディレクトリを見てください。
New ServerSignature directive
この directive は、サーバのバージョンとサーバ生成ページに対する virtual ホスト名を含む行を任意で追加します (エラー・ドキュメント、ftp ディレクトリ表示、mod_info 出力、)。 これは特に proxy chain (イントラネットでしばしば見られます)で、サーバの作るエラーメッセージをユーザに分かりやすくします。
New UseCanonicalName directive
この directive は Apache がどのように自己参照 URL を作るかを制御します。以前、Apache はサーバのための"canonical"名を構成するために、 ServerNamePort directive を使っていました。UseCanonicalName off の apache は、もし有効ならクライアントによって与えられたホスト名とポートを使います。
SERVER_VERSION 定義の概要とサーバ構築日時
初期のバージョンでは、Apache サーバのバージョンは SERVER_VERSION に対して#defineされた値を通じてモジュールを利用できました。この値を維持するために、モジュールとコア・サーバが異なる時にコンパイルされると、この情報はコアの API ルーチン ap_get_server_version() を経由して利用できます。SERVER_VERSION の使用は軽視されています。ap_get_server_built() もまた、コア・サーバがリンクした時間を表す文字列を返します。
サーバ認識での OS の内包
新しい directive、ServerTokens は Webmaster がクライアントに返す Server レスポンス・ヘッダ領域の値を変更できるようにします。ServerTokens directive は、含まれているモジュールの情報と同じように、サーバが走っている OS タイプについてのサーバの、非特異的な事項を含むかどうかを制御します。Apache 1.3 では、この追加情報はデフォルトで含まれます。

このページの情報に関わる、ご質問、お問い合わせは、 japache@infoscience.co.jpまで。

JAPACHE ホームページ