今回のリリースの新しい特徴は、Apache の機能的な拡張です。コアコードが大きく変わっているので、初期の Apache (と NCSA デーモン)よりも最新の Apache は、はるかに自由です - 何か問題がある場合には互換性についてでチェックしてください。
Apache 1.2 からアップグレードするなら、アップグレードについてを読むと良いでしょう。
拡張機能: Core | パフォーマンスPerformance | 設定 | モジュール | API | その他
Configuration にある"Module"行が、若干異なる構文で"AddModule"に置き換えられていることです。モジュールの作者には、それらのモジュールを追加するのが若干容易になっています。
ProxyReceiveBufferSize directive は処理が増えたことにより、mod_proxy の外部への接続に大きなネットワークバッファを与えています。
writev を使います。また、バッファの中にメモリをコピーするのを出来る限り避けます。結果として、大きなファイルを転送するために CPU が使う時間が少なくなっています。
mmapを使って受け取られます。プログラムは CPU 速度を減少させるようなバイトを決してコピーしません(有効でテストされている場所でだけ)。
mod_log_config はバッファの書き込みに対してコンパイル時に設定されます。
ap_cpystrn() と strncpy() を置き換えることにより、ルーチンは空の result をゼロ充填することがなくなります。これは mod_include の速度に大きく影響します。
詳しくは the new performance documentation を見てください。
configure スクリプトと、対応する Makefile.tmpl ファイルに与えられています。最終的にはバッチにある古い src/Configure をドライブして、GNU スタイルのディレクトリ・レイアウトでのパッケージをインストールできるようにすることです。古い設定の仕組みからのオプションは、Apache をフレキシブルにカスタマイズするために、たくさんの新しいオプションを加えて役に立ちます。
README.configure と INSTALL を見てください。
apxs は、DSO-base のモジュールをインストールしてアクティブにします。ユーザからのプラットフォームに依存する DSO-build コマンドを隠して、Apache ソースツリーの外部でのモジュールの構築を簡単にします。この APACI を実現するには、apxs ツールと共に Apache C ヘッダファイルをインストールします。
/usr/local/apache/ に変更/usr/local/etc/httpd/ から /usr/local/apache/ に変更されます。この変更はデフォルトの設定(とドキュメント)を対象にします; もちろん Apache 起動時に -d ServerRoot と -f httpd.conf スイッチを用いて無効にすることは可能です。
NameVirtualHost directive は HTTP/1.1 形式のバーチャルホストになる IP の address:port を示すために使われます。これはクライアントからの Host: ヘッダを基にしたバーチャルホスティングです。以前このアドレスはマシンの"main address"として同じでしたが、これはユーザに際限のない問題を引き起こし、十分なものではありませんでした。設定の更なる詳細は Apache Virtual Host documentation を見てください。
Include directive
Include directive は構文解析時に直に他の設定ファイルをインクルードします。
-S オプションで起動されれば、VirtualHost セクションをどのように解析したかについての情報を吐き出します。これはバーチャルホストの設定をデバッグしようとする人には便利です。
SetEnvIf と SetEnvIfNoCase の追加。これらはサーバに環境変数の設定を許可し、CGI はリクエストの属性に準拠します。
mod_mime_magic が追加されています。"magic numbers" と、ファイルのコンテンツからどんなコンテンツであるかを判別するための指示を使います。もしファイルの拡張子によって決定されなければ、ファイルのメディアタイプを設定するためにこの情報を使います。
UNIQUE_ID で役に立ちます。
ProxyVia directive は "Via:" のサポートを on、off にしたり、プライバシーの理由から "Via:" ヘッダ行全体を出すのを抑制します。
NoProxy と ProxyDomain directive がプロキシーに追加され、イントラネットで使い易くなっています。
ProxyPassReverse directive。HTTP リダイレクトレスポンスの Location ヘッダにある URL を Apache に適応させます。
mod_include 文字列比較の拡張mod_dir モジュールは、ディレクトリの一覧ファイルをハンドルする mod_dir と、ディレクトリ一覧を作る mod_autoindex の二つに分割されています。危険なサーバから index 機能を外すことができます。
SuppressColumnSorting IndexOptions キーワードを使うことで無効になります。
SuppressHTMLPreamble が使われます。
IndexOptions directive は、そのキーワード引数に増加するプレフィックス(Options directive に対して既に可能となっているような、それぞれのキーワードの特徴を追加、削除する +/-)の使用ができます。同じディレクトリに対する様々な IndexOptions directive が集約されています。
IconHeight と IconWidth はディレクトリ一覧にある <IMG> タグに高さと広さの属性を設定します。
NameWidth キーワードは、"fancy" ディレクトリ一覧の列の数を設定します。もし'*'(アスタリスク)に設定すると、name width は自動的に調節されます。
Alias and Redirect のための正規表現サポート
AliasMatch、ScriptAliasMatch、RedirectMatch directive は正規表現の一致を使うことができます。さらに、新しい<DirectoryMatch>、<LocationMatch>、<FilesMatch> の記述は正規表現のセグメント化に新しいシンタックスを提供します。
AddModuleInfo directive が mod_info に追加されています。
TransferLog がなくなりました。
TransferLog directive が与えられていないと、ログは書き込まれません。これは他のログモジュールとの共存をサポートします。
LogFormat directive はログフォーマットを指定するニックネームを与えるように拡張されています。
いちいち完全なログフォーマット文字列を拾い読みするよりも、他の LogFormat と CustomLog directive でこれらのニックネームを使うことができます。
RewriteMap directive
RewriteMap directive に追加されました。新しい二つの機能: まず、rewriting マップでルックアップされた値からランダムにサブ値を選択することができます(逆プロキシー状態のバックエンドサーバ間で選ぶのに便利です)。次に、フィックスされた場合(upper or lower)に対して URL 部分を解釈することができます(mod_rewrite によって virtual host の塊にするときに便利です)。
全てのモジュールライターとコードハッカーのために:
child_init
child_exit
child_init と child_exit の機能は、ライフタイムが子プロセスのライフタイムと同じであるプールをパスします( Apache に回復の見込みがない modulo の完全に致命的なイベント )。対照的に、module init 機能は、親プロセスが終了するか再起動する時にライフタイムが終わるプールをパスします。
child_terminate
register_other_child
http_main.h を見てください。これはモニターするために子プロセスを登録する親プロセスのために使われます。親プロセスは与えられたコールバック機能にステータスを報告します。これは httpd の子プロセスと共にモニターされる自身の子プロセスをモジュールに作らせます。
piped_log
http_log.h を見てください。この API は 実施しているパイプログに共通コードを与えます。特に、それをサポートしているアーキテクチャで確実なパイプログを実現します(すなわち、現在は Unix)。
set_last_modified は3つに分割されています
set_last_modified は Last-Modified ヘッダ、ETag ヘッダ、処理している条件付きリクエスト(IMS のような)の設定を含むマルチジョブを行います。これらの機能は3つに分割されています: set_last_modified、set_etag、meets_conditions です。領域の mtime は meets_conditions を容易にするために request_rec に追加されます。
ap_log_error
ap_log_error と呼ばれる機能に置き換わりつつあります。これはまだ開発中です。
set_file_slot
set_file_slot ルーチンは、非絶対パスの ServerRoot のふりをする標準ルーチンを提供します。
post_read_request module API
psocket と popendir
psocket と pclosesocket の機能はリソース・トラッキングで race-condition のフリーソケットの作成を考慮します。
同様に popendir と pclosedir はディレクトリの読み込みをプロテクトします。
is_initial_req
kill_only_once
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_addn、table_setn、table_mergen
pstrdup を呼びません。これはスピードアップに大きく貢献します。コードが適切にそれらを使うようにする、いくつかのデバッグサポートがあります。詳しくは src/CHANGES を見てください。
construct_url
server_rec * を取ることから、request_rec * を取ることに変更したプロトタイプです。
get_server_name、get_server_port
ap_bspawn_child と ap_call_exec のためのプロトタイプへの変更
spawn 機能(ap_bspawn_child としてパスする)と ap_call_exec に child_info * が追加されました。nomenclature を少し整理して、単純な ap_spawn_child で spawn_child_err を交換し、単純な ap_bspawn_child で spawn_child_err_buff を交換します。
ap_add_version_component()
Server: ヘッダ行に表示される、自身の追加サーバ・トークンを付加できるようにします。以前の 1.3beta バージョンはこの機能のために SERVER_SUBVERSION compile-time #define を使っていました。トークンが実際に表示されるかどうかは、新しい ServerTokens directive によって制御されます。
AccessFileName の拡張
AccessFileName directive は一つ以上のファイル名を取ることができます。これは、サイトにネットワークのファイルシステムと一つ以上の Apache ウェブサーバからページを受け取らせて、共有ページが受け取られる間、サーバに基づいたアクセスを設定させます。
HostNameLookups のデフォルトは "Off"
HostNameLookups directive のデフォルトは"Off"になりました。これは、on になっていなければ、サーバは IP アドレスを名前にリソルバしません。不要な DNS トラフィックを避けます。
HostnameLookups directive は二重逆引き DNS をサポートしています(tcp_wrappers では PARANOID として知られています)。逆引きマップの正引きマップが本来の IP を含んでいれば、IP アドレスは二重逆引き DNS のテストをパスします。
HostnameLookup の設定に関係なく、mod_access は二重逆引き DNS のテストをパスする全ての名前を要求する DNS 名を使ったリストにアクセスします(Apache の以前のバージョンでは、二重逆引き DNS を可能にするコンパイル時のスイッチを要求していました)。
mod_include によって使われるデフォルトの timefmt 年数表示を文字列は、2 桁ではなく、4 桁で表示するようになっています。mod_autoindex モジュールは FancyIndex のディレクトリ表示で年数を 4 桁で表示します。
htdigest のような)によって参照され、これらの他のアプリケーションは構築に失敗します。なぜならルーチンはサーバにだけ作られるからです。これらのルーチンは分かれたサブディレクトリとライブラリに移動して、サーバとは異なる、他のアプリケーションによって使われます。src/ap/ サブディレクトリを見てください。
ServerSignature directive
UseCanonicalName directive
UseCanonicalName off の apache は、もし有効ならクライアントによって与えられたホスト名とポートを使います。
SERVER_VERSION 定義の概要とサーバ構築日時
SERVER_VERSION に対して#defineされた値を通じてモジュールを利用できました。この値を維持するために、モジュールとコア・サーバが異なる時にコンパイルされると、この情報はコアの API ルーチン ap_get_server_version() を経由して利用できます。SERVER_VERSION の使用は軽視されています。ap_get_server_built() もまた、コア・サーバがリンクした時間を表す文字列を返します。
ServerTokens は Webmaster がクライアントに返す Server レスポンス・ヘッダ領域の値を変更できるようにします。ServerTokens directive は、含まれているモジュールの情報と同じように、サーバが走っている OS タイプについてのサーバの、非特異的な事項を含むかどうかを制御します。Apache 1.3 では、この追加情報はデフォルトで含まれます。