### Apache HTTP Server

# Apache 1.3 の新機能の概要

今回のリリースでの新しい特徴として、Apache の機能性の拡張についてここでは説明します。 コア部分のコードが大きく変わりましたので、初期のバージョンの Apache (および NCSA httpd) が受け付けたものでも、新しい Apache では受けつけないものがあります。なんらかの問題がある場合には 互換性に関して でチェックしてください。

Apache 1.2 からのアップグレードは「アップグレードに関して」を読むと良いでしょう。

拡張: コア | パフォーマンス | 設定 | モジュール | API | その他

## コアの拡張:

Dynamic Shared Object (DSO) のサポート
  実行時にApache のモジュールをロードすることが可能になりました。 これにより、モジュールは必要なときだけサーバのメモリ領域に 読みこまれることになり、Apache 全体のメモリの使用をかなり減らすことになります。DSO は現在 FreeBSD, OpenBSD, NetBSD, Linux, Solaris, SunOS, Digital UNIX, IRIX, HP/UX, UnixWare, NetWare, AIX, ReliantUnix, 純粋な SVR4 プラットフォームでサポートされています。
Windows NT/95 のサポート
  Apache は Windows NT と Windows 2000 をサポートするようになりました。 Windows 95, 98, ME でも Apache は動作するかもしれませんが、 これらのコンシューマ製品の環境での使用は推奨していません。 そして、その使用についての状態は、実験的なものとしたままです。 Windows 上で動作している 1.3.15 より前のすべてのバージョンの Apache は、ベータ版品質のリリースだと考えてください。
Cygwin のサポート
  Apache は Windows NT と Windows 2000 上の Cygwin をサポートするようになりました。安定性や信頼性の面から、 Windows 自体と併せて Cygwin のバージョンを考慮すべきです。
NetWare 5.x のサポート
  Apache は NetWare 5.x をサポートするようになりました。
ソースの再構成
  Apache のソースファイルは再構成されました。Apache のユーザにとって主要な変更点は `Configuration` における "Module" 行が "AddModule" で置き換わり、 構文が少し変わったことです。モジュールの作者にとっては、 ユーザがモジュールを容易に追加できるようにするための変更が いくつかなされています。
信頼性のあるパイプされたログ
  ほとんどすべての Unix アーキテクチャで Apache は「信頼性のある」パイプされたログを mod_log_config で実装しています。 ここで、信頼性のあるとは、ログを収集している子プロセスが 何らかの理由で死んだときに、Apache はサーバ全体を再起動することなく、 そこから回復してログ用プロセスを再起動することができるという意味です。 更に、ログを収集している子プロセスが "詰まって" しまい、 パイプを十分な回数読んでいないときも Apache はそれを再起動します。 これで、ログのローテーションやヒットの選別をしたり、複数の vhost (訳注: バーチャルホスト) のログを別々にリアルタイムで分けたり、 その場での非同期の DNS 解決をしたりする機会ができます。

## 性能の改善

- IP に基づいたバーチャルホストはハッシュテーブルを用いて調べられます。
- <Directory> 解析の速度向上。
- 静的なリクエストに対するクリティカルパスのシステムコール 数が減りました。これは通常すべてのリクエストで役立ちます。 (よくチューンされた設定において、1.2 では静的なリクエストでシステムコールが 45 あったのに対して、1.3 では 22 です)。
- スループット向上のために `ProxyReceiveBufferSize` ディレクティブは、 `mod_proxy` からの外部接続に対して、 より大きなネットワークバッファを与えます。
- 複数の書き込みを一つのシステムコールですませるために低レベル I/O のルーチンでは (使用可能であれば) `writev` を使うようになっています。このルーチンではメモリのバッファへの コピーもできるだけ避けています。その結果、大きなファイルの転送に使われる CPU 時間が少なくなります。
- 静的なリクエストは `mmap` を用いて処理されます。 これで、バイトはカーネルによりディスクのバッファからネットワークの バッファへ直接コピーされるだけになります。プログラムは、 バイトのあちこちへのコピーをしません。(使用可能かつテスト されているときのみ。) それは CPU 時間を減少させてしまいます。
- 負荷が急激に増加したとき、サーバは速く子プロセスを起動して、 素早く適応します。
- モジュールをディスパッチするコードは API の特定の部分を実装しないモジュールを繰り返しスキップ するのを避けるよう最適化されています。(デフォルトのモジュール を組合せたサーバのプロファイルでは、このスキップで CPU 時間の 5% を使用していました。)
- Unix のスコアボードの管理コードを再構成しました。 これにより、多くの場合で子プロセスの数を数える時間が短くなりました。 以前は各ヒットに対してスキャンが実行されていましたが、今は 1 秒に 1 回実行されます。多くの子プロセスのある負荷の高いサーバでは、 その違いが顕著だと思います。
- 新しいシリアライズの方法を選択したことで Linux と IRIX での性能が改善されました。
- `mod_log_config` はコンパイル時に バッファへ書き込みをするように設定できるようになりました。
- `strncpy()` を結果全体を 0 で埋める必要のない `ap_cpystrn()` で置き換えました。これは `mod_include` の速度に劇的な効果があります。
- 内部の "table" API (キー/値 の文字列の対を保持するのに使われています) への追加により、多くの状況で最大 20% の性能の改善をもたらすように なりました。

詳しい情報は性能についての新しいドキュメント を参照してください。

## 設定の拡張

サーバの設定ファイルの一元化
  (Apache 1.3.4) 三つのサーバ設定ファイル (`httpd.conf`, `srm.conf`, `access.conf`) が `httpd.conf` ファイル一つにまとめられました。`srm.conf` と `access.conf` ファイルは、ウェブマスターが `httpd.conf` を見るようコメントがあるだけで、 後は空になっています。 更に、まとめられた `httpd.conf` ファイルでは、 ディレクティブ がより直感的で意味のある順番になるように再構成されました。
設定ファイルでの継続した行
  設定ファイルにおけるディレクティブの行は Unix の継続行を扱う通常の方法、すなわち '\' をその行の空白以外の最後の文字として置くことで、 次の行をつなぐ形式を用いて、 複数の行に分けることができるようになりました。
Apache Autoconf-style Interface (APACI)
  Apache 1.3 になるまでは、 Apache パッケージ全部を展開したらすぐに、ビルドしてインストール するようなバッチ的手順は提供されていませんでした。 しかし、トップディレクトリにある `configure` スクリプトと、それに対応するトップディレクトリの `Makefile.tmpl` ファイルで、それが実現されました。 この目的は、GNU の Autoconf 形式のフロントエンドを提供することです。 そして、これまでの `src/Configure` 関連要素のバッチ処理と、 GNU 流のディレクトリ構成でのパッケージインストールの両方が可能になります。 古い設定方法で可能だったものオプションすべてに加えて、Apache を柔軟にカスタマイズするためのたくさんの新しいオプションが 使用可能です。
  注意: デフォルトのインストールの構成は Apache 1.3.4 で変更されました。詳細については `README.configure` と `INSTALL` ファイルを参照してください。
APache eXtenSion (APXS) サポートツール
  Apache は実行時に dynamic shared object (DSO) ファイルから モジュールをロードすることを完全にサポートするようになりました。 そこで、DSO に基づいたモジュールを Apache のソースとは別の場所で ビルド、インストール、アクティブ化を行なう新しいサポートツール `apxs` が作成されました。これにより、プラットフォーム に依存した DSO ビルド用のコマンドはユーザから完全に隠され、Apache のソースツリーの外でモジュールをビルドすることが容易になっています。 これを達成するために、APACI は Apache の C のヘッダファイルを `apxs` と一緒にインストールします。
Apache のデフォルトディレクトリパスを `/usr/local/apache/` へ変更
  Apache のデフォルトの ServerRoot ディレクトリが、NCSA 互換の `/usr/local/etc/httpd/`から `/usr/local/apache/` に変更されました。 これはデフォルトの設定 (とドキュメント) の変更だけです。もちろん、 Apache を起動するときに -d ServerRoot と -f httpd.conf を指定することで変更することができます。
HTTP/1.1 形式のバーチャルホストの改善
  `NameVirtualHost` という新しいディレクティブを使用して IP アドレス:ポート の対を指定することで、HTTP/1.1 形式のバーチャルホストを実現します。 これはクライアントからの `Host:` ヘッダに基づく バーチャルホストです。以前はこのアドレスは暗黙のうちにマシンの "メインアドレス" と同じにしていましたが、これは数多くの問題を引き起こし、 また機能も十分ではありませんでした。設定の詳細についは 「Apache バーチャルホストドキュメント」 を参照してください。
`Include` ディレクティブ
  設定ファイルのパースの途中で `Include` ディレクティブに出会うと、 直ちに他の設定ファイルをその場所に挿入します。
バーチャルホストの設定のデバッグのための -S コマンドラインオプション
  コマンドラインオプション `-S` を付けて Apache を起動すると、`VirtualHost` をどのようにパースしたかという情報を表示します。 これはバーチャルホストの設定をデバッグしようとする場合に便利です。
HTTP メッソドの制御
  <LimitExcept> と </LimitExcept> はアクセス制御命令のグループを囲み、 引数として指定していない HTTP アクセスメソッドについてそのアクセス制御命令が適用されます。 すなわち、これは <Limit> セクションの逆で、 標準のメソッドと非標準ないしは認識できない メソッドの両方を制御するために使うことができます。

### モジュールの拡張

mod_negotiation の改善
  オプショナルのコンテントネゴシエーション (MultiViews) モジュールが Apache 1.3.4 で全体的に修正され、最新の HTTP/1.1 改訂版と実験的に RFC 2295 と RFC 2296 の Transparent Content Negotiation 機能が追加されました。
NEW - 綴り修正モジュール (訳注: mod_speling)
  このオプショナルなモジュールは、サーバから要求された ドキュメントのパス名でしばしば見られる綴りや大文字小文字の 間違いを修正します。
NEW - 条件付き環境変数の設定 (訳注: mod_setenvif)
  `SetEnvIf` ディレクティブと `SetEnvIfNoCase` ディレクティブが追加されました。 これにより、リクエストの属性に応じてサーバと CGI の環境変数を設定することができます。
NEW - "Magic" MIME タイプ (訳注: mod-mime_magic)
  オプショナルな `mod_mime_magic` が追加されました。 このモジュールは、"マジックナンバー" やファイルの内容から 得られる情報を使用して、対象となるコンテンツの属性を調べます。 この情報は、ファイルの拡張子からそのファイルのメディアタイプを 決定できない場合に使用されます。
NEW - 一意に識別可能な ID (訳注: mod_unique_id)
  mod_unique_id mod_unique_id を組み込むことで、あるヒットと他のヒットとを区別する ユニークな識別子を生成するようになります (ここでの 「ユニークな」 にはいくつか制限があります。) その識別子は、環境変数 `UNIQUE_ID` として参照することができます。
mod_proxy の拡張:
  - ftp proxy のログインでのより簡単かつ安全な認証:接続先の ftp サーバが要求しているのに、URL として ftp にユーザ名と パスワードが指定されていない場合、Apache は "[401] Authorization Required" ステータスを返すようになりました。このステータスコードを クライアントが受け取ると、通常は「ユーザ名とパスワードを入力 してください」というダイアログを表示し、そこで入力された ユーザ認証を用いたリクエストが再び行なわれます。こうすることで、 リクエスト URL に認証情報を含ませて指定する方法 (古い proxy サーバでは平文でログに記録されてしまう可能性があります) よりも若干安全になっています。
  - 新規の `AllowCONNECT` ディレクティブにより、proxy CONNECT メソッドが接続可能なポートが指定できるようになりました。 これにより、Apache 1.3.2 以前ではエラーメッセージが返されていた https://some.server:8443/ について proxy することができるようになります。
  - RFC2068 で指定されている HTTP/1.1 の "Via:" ヘッダを サポートするようになりました。新規の `ProxyVia` ディレクティブで "Via:" のサポートのオン/オフを切り替えることができます。 また、プライバシー上の理由から、外に出て行くヘッダから "Via:" を削るようにすることができます。
  - HTTP/1.1 で規定されている "Max-Forwards:" TRACE ヘッダをサポートするようになりました。それにより、(他の proxy サーバでもサポートしていれば) プロキシーの連鎖をたどって リクエストのパスをトレースすることができます。
  - `NoProxy` ディレクティブと `ProxyDomain`ディレクティブが追加されました。 イントラネットでの利用に便利です。
  - `ProxyPassReverse` ディレクティブ命令が新規に追加されました。 これにより、HTTP のリダイレクトレスポンスにおける `Location:` ヘッダ中の URL を調整することができます。
  - FTP サーバのディレクトリツリーでの移動が、より簡単になりました。
`mod_include`の文字列比較の拡張
  文字列に基づいた server-side include (SSI) のフロー制御 ディレクティブに未満 (<)、以下 (<=)、より大きい (>)、 以上 (>=) が含められました。以前は等しいか等しくないかの 比較しかできませんでした。
ServerRoot からの相対パスでの auth ファイル名指定
  様々な認証モジュールの auth ファイル名の指定は、 フルパスで無い場合は ServerRoot からの相対パスとして 扱われるようになりました。
ディレクトリのインデックスの拡張:(訳注: mod_autoindex)
  - コードの分割: `mod_dir` モジュールが、ディレクトリのインデックスファイルを扱う mod_dir と、 ディレクトリ内のファイル一覧を作成する mod_autoindex の二つに分割されました。これにより、クリティカルなサーバから インデックスの機能を外すことができます。
  - ソート可能: カラムのタイトルを クリックするとそのカラム値によるリストのソートを行ないます。 この機能は IndexOptions の `SuppressColumnSorting` キーワードで無効にできます。
  - README.html ファイルに HTML のヘッダが記述されている場合は、 `SuppressHTMLPreamble` を使うことができます。
  - The `IndexOptions` ディレクティブは、キーワード引数に対して インクリメンタルプレフィックスを使用できるようになりました (Options ディレクティブと同様に、 機能に対するキーワードの機能の追加を +/- で指定します)。 これにより、同じディレクトリに適用される複数の IndexOptions ディレクティブを一つにまとめることができます。
  - `IconHeight` と `IconWidth` でディレクトリの一覧表示での `<IMG>` タグの height 属性と width 属性を設定できます。
  - IndexOptions ディレクティブに新規に追加された `NameWidth` キーワードで、"凝った" ディレクトリ内容一覧 の桁数を設定できます。 アスタリスク `*' に設定すると、名前 (訳注: Name の部分) の幅は自動的に調整されます。
  - `FancyIndexing` ディレクティブは設定済みの `IndexOptions` ディレクティブの効果を置き換えてしまうことなく、正しく `IndexOptions FancyIndexing` と同じ効果になるようになりました。
  - 1.3.15 からは、IndexOptions に `TrackModified` ディレクティブが含まれている場合は、サーバはディレクトリの リクエストを受けたときに、キャッシュを制御する ETag と LastModified を付けて返します。そのリクエストが変更されていないとクライアント が判断したときには、サーバはその一覧を生成する必要がありません。 これにより、性能が向上します。この機能は実験的なものなので、 デフォルトでは使用可能にはなっていません。
CGI スクリプトの出力のバッファリングの減少
  以前のバージョンの Apache では、CGI スクリプトからの出力は、 サーバが内部的にバッファをしていて、バッファが一杯になるか CGI スクリプトが終了するまではクライアントに送られませんでした。 Apache 1.3 では、クライアントへのデータのバッファは、 バッファ中に何かがあって、サーバがスクリプトからのさらなる出力を 待っているときにいつでもフラッシュされます。これにより、CGI スクリプトは長い処理操作の間に部分的なステータス報告が可能になります。
`Alias` と `Redirect` での正規表現のサポート
  新規の `AliasMatch`, `ScriptAliasMatch`, と `RedirectMatch` ディレクティブで、正規表現でのパターンマッチを指定できるようになりました。 更に、新規の `<DirectoryMatch>`, `<LocationMatch>`, `<FilesMatch>` セクションにより、 正規表現を用いたセクション指定ができる新しい構文が提供されます。
mod_info への `AddModuleInfo` ディレクティブの追加
  指定されたモジュールについて、表示させる追加情報を指定できるように なりました。
`TransferLog` が無い場合のログ収集の抑制
  `TransferLog` ディレクティブが無い場合はログは 収集されません。これは他のログ用モジュールとの共用をサポートします。
ログの書式に名前を付ける機能
  `LogFormat` ディレクティブが拡張され、特定のログフォーマットにニックネームを 付けることを可能になりました。毎回ログフォーマットの文字列を書く代わりに、 このニックネームを他の `LogFormat` ディレクティブの指定や `CustomLog` ディレクティブの指定で使うことができます。
条件付きログ収集
  mod_log_config が環境変数に基づいたログ収集をサポート するようになりました。mod_log_referer と mod_log_agent は使用しないことが推奨されています。
mod_cern_meta をディレクトリ毎に設定可能
  mod_cern_meta をディレクトリ毎に設定することができるようになりました。
`RewriteMap`ディレクティブの新しいマップタイプ
  mod_rewrite の `RewriteMap` ディレクティブに新しいマップ型 `Randomized Plain Text' と `Internal Function' が追加されました。これらのマップ型は 二つの機能を提供します: 一つは、書き換え用マップで参照される 値から対応する値をランダムに選択することができるようになりました (Reverse Proxy において、バックエンドのサーバを選ぶ場合に便利です)。 もう一つは、URL の一部を大文字か小文字のどちらかに変換することが できるようになりました (mod_rewrite を用いて大規模な バーチャルホスティングを行なう場合に便利です)。
CIDR と Netmask によるアクセス制御
  mod_access ディレクティブは CIDR (Classless Inter-Domain Routing) 形式のプレフィックスの指定と、IP のアクセスリストの制御を より細かく設定できるネットマスクをサポートするようになりました。

### API の追加と変更

モジュール作者とコードハッカー向け情報:

`child_init`
  "heavy-weight process" につき1回呼ばれる Apache API の新規フェーズです。この後でリクエストの処理を行ないます。 これをすることで、モジュールがプロセス毎に行なう必要のあることを すべて設定することができます。 たとえば、データベースへの接続があります。
`child_exit`
  "heavy-weight process" につき1回呼ばれる新規のフェーズで、 プロセスの終了時に呼ばれます。致命的な状況では (たとえばセグメンテーションフォールトや kill -9 された場合) 呼ばれないことに注意してください。`child_init` 関数と `child_exit` 関数は、子プロセスの生存期間と (Apache が回復できる見込みのない完全に致命的なイベントを除いて) 同じ生存期間を持つプールを渡されます。対照的に、モジュールの `init` 関数は親プロセスが終了したり再起動したりすると 消滅するプールを渡されます。
`child_terminate`
  現在のリクエストを終了した後に子プロセスが終了すべきであることを 示すために子プロセスで使われます。
`register_other_child`
  `http_main.h` を参照してください。 これは親プロセスで使用し、監視する子プロセスを登録します。 親プロセスは与えられたコールバック関数に状態を報告します。 この関数を使用すると、モジュールが生成する子プロセスは、 httpd の他の子プロセスと共に監視されるようになります。
`piped_log`
  `http_log.h` を参照してください。この API は、パイプされたログを実装するための共通のコードを提供します。 特に、アーキテクチャがサポートしている場合は (つまり 現時点では Unix)、信頼性のあるパイプされたログを実装しています。
スコアボードの形式変更
  スコアボードの形式はかなり変更されました。 普通スコアボードは "private" なインターフェースだとされているので、 ここでは紹介するにとどめておきます。
`set_last_modified` を三つに分割
  古い `set_last_modified` 関数は、 `Last-Modified` ヘッダや、`Etag` ヘッダの設定、 (If-Modified-Since のような ) 条件付きリクエストの処理など、 複数の仕事をしていました。これらの機能は三つの関数、 `set_last_modified`, `set_etag`, `meets_conditions` に分割されました。 `meets_conditions` 関数の処理を簡単にするために `requrest_rec` 構造体に `mtime` がフィールドが追加されました。
エラーログ収集用の新規関数: `ap_log_error`
  ログ収集用の古い関数はすべて非推奨となっています。 これらの関数を `ap_log_error` という単独の関数で置き換えようとしています。 これはまだ作業中です。
設定解析のための `set_file_slot`
  `set_file_slot` ルーチンは、 絶対パスになっていないパスの前に ServerRoot を追加するための標準ルーチンを提供します。
`post_read_request` モジュール API
  このリクエストフェーズはリクエスト (ヘッダ) を読み込んだ直後や、内部リダイレクトを作成した直後に起こります。 その後の段階に影響する環境変数を設定するために一番役に立ちます。
`psocket` と `popendir`
  socket の生成において、競合状態が起こらないようにリソースの トラッキングをする `psocket` 関数と `pclosesocket` 関数が用意されました。同様に、`popendir` 関数と `pclosedir` 関数はディレクトリの読み込みを保護します。
`is_initial_req`
  リクエストが初期リクエスト (すなわち、 クライアントから来るもの)であるかどうかを判定します。
`kill_only_once`
  `ap_spawn_child` 関数のオプションで、 Apache が子プロセスを積極的に kill しようとすることを抑制します。
`alloc デバッグ用コード`
  `ALLOC_DEBUG` を定義すると原始的なメモリデバッガが提供されます。 これを使う場合、生存中のサーバに与える影響が少なく済みます。 それは、割り当てられてるメモリおよび解放されるメモリのバイト数をすべて 0xa5 に設定します。`ALLOC_USE_MALLOC` を定義すると、 alloc コードがそれぞれのオブジェクトに対して `malloc()` と `free()` を使うようになります。これはずっとコストが高く、 Electric Fence や Purify のようなツールを使ってテストをするときにのみ 使われるべきものです。詳細は `main/alloc.c` を参照してください。
`ap_cpystrn`
  新しい `strncpy` のようなものですが、バッファ全体を 0 で満たす必要が無いために `strncpy` よりずっと速い点で若干違います。
`table_addn`, `table_setn`, `table_mergen`
  これらの新しい関数は、引数に対して `pstrdup` を呼びません。これは大きな速度向上をもたらします。 コードがそれらを適切に使用していることを確かめるためのデバッグの サポートもあります。詳しい情報は `src/CHANGES` を参照してください。
`construct_url`
  この関数のプロトタイプが `server_rec *` から `request_rec *` を引数として取るように変わりました。
`get_server_name`, `get_server_port`
  リクエストに対応するサーバ名とポート番号を取得する際に UseCanonicalName ディレクティブを扱うためのラッパーです。
`ap_bspawn_child` と `ap_call_exec` のプロトタイプの変更
  Win32 で子プロセスが正しく動作するように、 `spawn` 関数 (`ap_bspawn_child` に渡される) と `ap_call_exec` 関数に `child_info *` を追加しました。 また、`spawn_child_err` を単に `ap_spawn_child` で置き換え、 `spawn_child_err_buff` を単に `ap_bspawn_child` で置き換えることで、 関数名を少し整理しました。
`ap_add_version_component()`
  この API 関数は `Server:` ヘッダに出力されるサーバトークンを、 モジュール自身が追加できるようにします。以前の 1.3beta バージョンではコンパイル時に `#define` された `SERVER_SUBVERSION` を定義してこの機能を実現していました。 トークンが実際に表示されるかどうかは新しい `SeverTokens` ディレクティブで制御されます。

### その他の拡張

BS2000/OSD を実行している EBCDIC メインフレームマシンへの移植
  (訳注: メインフレームマシンへの移植の ) 手始めとして、 このバージョンの Apache では、EBCDIC 文字セットを ネイティブコードセットとして使用するメインフレームマシンへの 移植のベータ版が付いています (IBM/390 互換のプロセッサー上で BS2000/OSD オペレーティングシステムを実行している SIEMENS のメインフレームファミリーです。このメインフレームの OS は、最近では SVR4 ライクの POSIX のサブシステムの機能があります)。
`AccessFileName` の拡張
  `AccessFileName` ディレクティブは、複数のファイル名を 受け付けるようになりました。これにより、NFS を用いて複数の Apache サーバでページを提供しているサーバでの設定に応じたアクセスを設定 できるようになります。(訳注: NFS を用いて、同じコンテンツ空間を複数の サーバで共有していると、それらのサーバの AccessFileName が同じとは限りません。 共有しているコンテンツに対するアクセス制御は同じ設定を使いたいときに、 この機能が役に立ちます)。
`HostnameLookups` のデフォルトを "Off" に変更
  `HostnameLookups` ディレクティブはデフォルトで "Off" になりました。明示的に on にしない限り、サーバは IP アドレスの名前解決を行なわないということです。 この変更はインターネットにおいてを不必要な DNS トラフィックを 発生させないために行なわれました。
DNS の二重逆引きの強制機能
  `HostnameLookups` ディレクティブは DNS の二重逆引きをサポートするようになりました。 (tcp_wrapper の用語では PARANOID として知られているものです)。 IP アドレスに対して逆引きを行ない、さらに正引きして得られる IP アドレスのリストに元の IP アドレスが含まれていれば、 二重逆引きのテストを通過します。HostnameLookup の設定に関わらず、 mod_access アクセス制御の設定で DNS 名を使用している場合、すべての名前が DNS の二重逆引きテストに合格する ことを要求します。(以前のバージョンの Apache では、DNS の二重逆引きを可能にするためにコンパイル時のスイッチが必要でした。)
LogLevel と syslog のサポート
  Apache はエラーのログ収集レベルを設定 できる機能が追加されました。また、syslogd(8) によるエラーのログ収集をサポートするようになりました。
標準入力/標準出力/標準エラー出力からの切離し
  Apache は、ブート時に標準入力/標準出力/標準エラー出力を 切り離すようになりました。標準エラー出力は、設定ファイルの 読み込みに成功するまで切り離しません。ですから、設定ファイルの エラーは目にすることになるでしょう。これにより、rsh や crontab で Apache を起動しやすくなっているはずです。
2000 年問題の改善
  `mod_include` で使われるデフォルトの `timefmt` 文字列が、以前使われていた 2 桁ではなく 4 桁を使うように 修正されました。`mod_autoindex` モジュールも FancyIndex されたディレクトリ一覧表示に 4 桁の年を表示するように修正されました。
共通のルーチンを独立したライブラリに分離
  オペレーティングシステムによるライブラリのルーチンの違いを 補完したり置き換えたりする関数やルーチンが、Apache プロジェクトのために数多く開発されています。ほとんどのものは Apache サーバ自身でのみで使用されていますが、中には `htdigest` のようなサポート用アプリケーションで参照されているものもあります。 そして、そのルーチンはサーバにのみ組込まれているために、 このような別アプリケーションはビルドに失敗します。これらのルーチンを 別のサブディレクトリで別のライブラリに移動しました。これにより、 サーバだけでなく他のアプリケーションからも使えるようになりました。 `src/ap/` サブディレクトリを参照してください。
新しい `ServerSignature` ディレクティブ
  このディレクティブはサーバが作成したページ (エラードキュメント、 FTP のディレクトリ内容一覧、mod_info の出力 など) にサーバのバージョンとバーチャルホスト名を含む行をオプションで追加します。 これにより、特に pxory の連鎖 (イントラネットの環境ではよくあります) があるときに、どのサーバがエラーメッセージを出したのかをユーザが 簡単に知ることができるようになります。
新しい `UseCanonicalName` ディレクティブ
  このディレクティブは、Apache がどのように自分自身を参照する URL を作成するかを制御します。以前の Apache では、 ServerName ディレクティブと Port ディレクティブを常に指定することで "正規化された" サーバの名を生成していました。`UseCanonicalName off` で、クライアントから提供されたホスト名とポート番号がある場合、 Apache はそれを使用するようになります。
`SERVER_VERSION` の定義の抽象化と サーバのビルド日時の追加
  以前のバージョンでは、`SERVER_VERSION` で定義された値を通じて、モジュールは Apache サーバのバージョンを参照することができました。 コアサーバとモジュールが違う時にコンパイルされた場合でも この値の一貫性を保つために、この情報はコア API ルーチン `ap_get_server_version()` で得ることができるようになりました。`SERVER_VERSION` シンボルの仕様は非推奨です。 また、`ap_get_server_built()` はコアサーバがリンクされた 時刻を表す文字列を返します。
サーバの ID にオペレーティングシステムを含める
  新しいディレクティブ `ServerTokens` により、 クライアントに送り返される `Server` レスポンスヘッダフィールドの値をウェブマスターが 変更できるようになりました。`ServerTokens` ディレクティブでは、サーバが動作しているオペレーティングシステムの 種類についての詳しすぎない程度の情報を、モジュール情報と同様にサーバ ID に含めるかどうかを制御します。Apache 1.3 では、 この追加の情報がデフォルトで含まれるようになっています。
Netscape 形式の SHA1 で暗号化されたパスワードのサポート
  (Apache に組込まれている MD5 や、OS 固有の crypt(3) 関数と異なり) パスワードが SHA1 で暗号化されるような BasicAuth パスワード方式の移行や統合を促進するため、`{SHA1}` が前に付いているパスワードは Base64 で符号化された SHA1 パスワードとして解釈されます。さらなる情報や Netscape の ldap/ldif エントリを変換するためのユーティリティーは、 support/SHA1 にあります。

### Apache HTTP Server