From f438923a5c634449fdbdd216af4dde62bbf54a3c Mon Sep 17 00:00:00 2001 From: Takashi Sato Date: Fri, 6 Jun 2008 14:36:23 +0000 Subject: [PATCH] Convert Japanese translations from ISO-2022-JP to UTF-8 since "Support for Additional Languages" needs to be enabled in the installation of JRE to read ISO-2022-JP. Reviewed by: kawai git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@663964 13f79535-47bb-0310-9956-ffa450edef68 --- docs/manual/bind.xml.ja | 174 +- docs/manual/configuring.xml.ja | 186 +- docs/manual/content-negotiation.xml.ja | 888 +++--- docs/manual/custom-error.xml.ja | 156 +- docs/manual/developer/modules.xml.ja | 194 +- docs/manual/dns-caveats.xml.ja | 264 +- docs/manual/dso.xml.ja | 390 +-- docs/manual/env.xml.ja | 390 +-- docs/manual/filter.xml.ja | 48 +- docs/manual/handler.xml.ja | 108 +- docs/manual/howto/auth.xml.ja | 672 ++--- docs/manual/howto/cgi.xml.ja | 636 ++-- docs/manual/howto/htaccess.xml.ja | 418 +-- docs/manual/howto/index.xml.ja | 80 +- docs/manual/howto/public_html.xml.ja | 108 +- docs/manual/howto/ssi.xml.ja | 496 ++-- docs/manual/index.xml.ja | 100 +- docs/manual/install.xml.ja | 462 +-- docs/manual/invoking.xml.ja | 182 +- docs/manual/logs.xml.ja | 656 ++--- docs/manual/mod/core.xml.ja | 3106 ++++++++++---------- docs/manual/mod/directive-dict.xml.ja | 340 +-- docs/manual/mod/directives.xml.ja | 16 +- docs/manual/mod/index.xml.ja | 14 +- docs/manual/mod/mod_access_compat.xml.ja | 430 +-- docs/manual/mod/mod_actions.xml.ja | 132 +- docs/manual/mod/mod_alias.xml.ja | 316 +- docs/manual/mod/mod_asis.xml.ja | 54 +- docs/manual/mod/mod_auth_basic.xml.ja | 84 +- docs/manual/mod/mod_authn_anon.xml.ja | 140 +- docs/manual/mod/mod_authn_dbm.xml.ja | 102 +- docs/manual/mod/mod_authn_default.xml.ja | 36 +- docs/manual/mod/mod_authn_file.xml.ja | 100 +- docs/manual/mod/mod_authz_default.xml.ja | 36 +- docs/manual/mod/mod_authz_groupfile.xml.ja | 96 +- docs/manual/mod/mod_authz_owner.xml.ja | 136 +- docs/manual/mod/mod_authz_user.xml.ja | 38 +- docs/manual/mod/mod_autoindex.xml.ja | 906 +++--- docs/manual/mod/mod_cache.xml.ja | 282 +- docs/manual/mod/mod_cgi.xml.ja | 218 +- docs/manual/mod/mod_cgid.xml.ja | 66 +- docs/manual/mod/mod_dav.xml.ja | 228 +- docs/manual/mod/mod_dav_fs.xml.ja | 42 +- docs/manual/mod/mod_dav_lock.xml.ja | 90 +- docs/manual/mod/mod_deflate.xml.ja | 270 +- docs/manual/mod/mod_dir.xml.ja | 138 +- docs/manual/mod/mod_disk_cache.xml.ja | 82 +- docs/manual/mod/mod_dumpio.xml.ja | 48 +- docs/manual/mod/mod_echo.xml.ja | 22 +- docs/manual/mod/mod_env.xml.ja | 40 +- docs/manual/mod/mod_expires.xml.ja | 194 +- docs/manual/mod/mod_ext_filter.xml.ja | 202 +- docs/manual/mod/mod_headers.xml.ja | 352 +-- docs/manual/mod/mod_ident.xml.ja | 62 +- docs/manual/mod/mod_include.xml.ja | 720 ++--- docs/manual/mod/mod_info.xml.ja | 122 +- docs/manual/mod/mod_log_config.xml.ja | 494 ++-- docs/manual/mod/mod_log_forensic.xml.ja | 146 +- docs/manual/mod/mod_logio.xml.ja | 46 +- docs/manual/mod/mod_mem_cache.xml.ja | 164 +- docs/manual/mod/mod_mime.xml.ja | 920 +++--- docs/manual/mod/mod_negotiation.xml.ja | 276 +- docs/manual/mod/mod_proxy.xml.ja | 1170 ++++---- docs/manual/mod/mod_proxy_ajp.xml.ja | 434 +-- docs/manual/mod/mod_proxy_balancer.xml.ja | 174 +- docs/manual/mod/mod_proxy_connect.xml.ja | 28 +- docs/manual/mod/mod_setenvif.xml.ja | 182 +- docs/manual/mod/mod_so.xml.ja | 178 +- docs/manual/mod/mod_speling.xml.ja | 100 +- docs/manual/mod/mod_status.xml.ja | 102 +- docs/manual/mod/mod_suexec.xml.ja | 30 +- docs/manual/mod/mod_unique_id.xml.ja | 306 +- docs/manual/mod/mod_userdir.xml.ja | 144 +- docs/manual/mod/mod_version.xml.ja | 82 +- docs/manual/mod/module-dict.xml.ja | 98 +- docs/manual/mod/mpm_common.xml.ja | 1128 +++---- docs/manual/mod/mpm_winnt.xml.ja | 34 +- docs/manual/mod/prefork.xml.ja | 144 +- docs/manual/mod/quickreference.xml.ja | 28 +- docs/manual/mod/worker.xml.ja | 172 +- docs/manual/mpm.xml.ja | 124 +- docs/manual/new_features_2_0.xml.ja | 280 +- docs/manual/sections.xml.ja | 428 +-- docs/manual/server-wide.xml.ja | 78 +- docs/manual/sitemap.xml.ja | 198 +- docs/manual/ssl/index.xml.ja | 30 +- docs/manual/ssl/ssl_intro.xml.ja | 886 +++--- docs/manual/stopping.xml.ja | 338 +-- docs/manual/style/lang/ja.xml | 86 +- docs/manual/suexec.xml.ja | 620 ++-- docs/manual/urlmapping.xml.ja | 352 +-- docs/manual/vhosts/examples.xml.ja | 384 +-- docs/manual/vhosts/fd-limits.xml.ja | 104 +- docs/manual/vhosts/index.xml.ja | 84 +- docs/manual/vhosts/ip-based.xml.ja | 142 +- docs/manual/vhosts/name-based.xml.ja | 352 +-- 96 files changed, 13467 insertions(+), 13467 deletions(-) diff --git a/docs/manual/bind.xml.ja b/docs/manual/bind.xml.ja index 74572ab2a0..55f5f42477 100644 --- a/docs/manual/bind.xml.ja +++ b/docs/manual/bind.xml.ja @@ -1,4 +1,4 @@ - + @@ -22,17 +22,17 @@ - $B%P%$%s%I(B + バインド -

Apache $B$,;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj$r$7$^$9!#(B

+

Apache が使用するアドレスとポートの設定をします。

- $B%P!<%A%c%k%[%9%H(B - DNS $B$NLdBj(B + バーチャルホスト + DNS の問題
- $B35MW(B + 概要 @@ -46,36 +46,36 @@ -

Apache $B$O5/F0;~$K!"%m!<%+%k%^%7%s$N$"$k%]!<%H$*$h$S%"%I%l%9(B - $B$KBP$7$F@\B3$7!"%j%/%(%9%H$,Mh$k$N$rBT$A$^$9!#(B - $B%G%U%)%k%H$G$O%^%7%s$N$9$Y$F$N%"%I%l%9$KBP$7$F(B listen $B$7$^$9!#(B - $B$7$+$7$J$,$i!"FCDj$N%]!<%H$+!"FCDj$N%"%I%l%9$N$_$+!"(B - $B$^$?$O$=$l$i$NAH$_9g$o$;$N$$$:$l$+$r(B listen $B$9$k$h$&$K$9$kI,MW$,$"$j$^$9!#(B - $B$3$l$O!"0[$J$k(B IP $B%"%I%l%9!"%[%9%HL>!"%]!<%H$KBP$9$k(B Apache - $B$N1~EzJ}K!$r7hDj$9$k%P!<%A%c%k%[%9%H5!G=$HAH$_9g$o$;$F;H$o$l$^$9!#(B

+

Apache は起動時に、ローカルマシンのあるポートおよびアドレス + に対して接続し、リクエストが来るのを待ちます。 + デフォルトではマシンのすべてのアドレスに対して listen します。 + しかしながら、特定のポートか、特定のアドレスのみか、 + またはそれらの組み合わせのいずれかを listen するようにする必要があります。 + これは、異なる IP アドレス、ホスト名、ポートに対する Apache + の応答方法を決定するバーチャルホスト機能と組み合わせて使われます。

Listen - $B%G%#%l%/%F%#%V$G!"FCDj$N%]!<%H$d%"%I%l%9!&%]!<%H$NAH$+$i$N$_F~$C$F$/$k(B - $B%j%/%(%9%H$rListen - $B%G%#%l%/%F%#%V$G;XDj$5$l$?>l9g$O!"(B - $B$9$Y$F$N%$%s%?!<%U%'!<%9$NM?$($i$l$?%]!<%HHV9f$r(B - listen $B$7$^$9!#(B IP $B%"%I%l%9$,%]!<%HHV9f$HF1;~$KM?$($i$l$?>l9g$O!"(B - $B%5!<%P$OM?$($i$l$?%]!<%H$H%$%s%?!<%U%'!<%9$r(B listen $B$7$^$9!#(B - $BJ#?t$N(B Listen $B%G%#%l%/%F%#%V$rMQ$$$F(B - $B$$$/$D$+$N(B listen $B$9$k%"%I%l%9$H%]!<%H$r;XDj$G$-$^$9!#(B - $B%5!<%P$O%j%9%H$5$l$?%"%I%l%9$d%]!<%H$+$i$N$9$Y$F$N%j%/%(%9%H$K(B - $BBP$7$F1~Ez$7$^$9!#(B

- -

$B$?$H$($P!"%]!<%H(B 80 $B$H(B 8000 $B$NN>J}$KBP$7$F$N@\B3$r + ディレクティブで、特定のポートやアドレス・ポートの組からのみ入ってくる + リクエストを受け付けるようにできます。 + もしポート番号のみが Listen + ディレクティブで指定された場合は、 + すべてのインターフェースの与えられたポート番号を + listen します。 IP アドレスがポート番号と同時に与えられた場合は、 + サーバは与えられたポートとインターフェースを listen します。 + 複数の Listen ディレクティブを用いて + いくつかの listen するアドレスとポートを指定できます。 + サーバはリストされたアドレスやポートからのすべてのリクエストに + 対して応答します。

+ +

たとえば、ポート 80 と 8000 の両方に対しての接続を受け付けるには

Listen 80
Listen 8000
-

$B$H$7$^$9!#(B - $BFs$D$N;XDj$5$l$?%$%s%?%U%'!<%9$H%]!<%HHV9f$KBP$7$F$N@\B3$rとします。 + 二つの指定されたインタフェースとポート番号に対しての接続を受け付けるには、

@@ -83,8 +83,8 @@ Listen 192.0.2.5:8000 -

$B$H$7$^$9!#(B - IPv6 $B%"%I%l%9$O!"3Q3g8L$G +

とします。 + IPv6 アドレスは、角括弧で次の例のように囲まなければいけません。

Listen [2001:db8::a00:20ff:fea7:ccea]:80 @@ -92,82 +92,82 @@
- IPv6 $B$NFC5-;v9`(B - -

$BB?$/$N%W%i%C%H%[!<%`$G(B IPv6 $B$,%5%]!<%H$5$l$F$-$F$$$F!"(B - APR $B$O$3$l$i$N$[$H$s$I$G(B IPv6 $B$r%5%]!<%H$7$F$$$k$N$G!"(B - Apache $B$O(B IPv6 $B%=%1%C%H$r3d$jEv$F$F(B IPv6 - $B7PM3$GAw$i$l$F$-$?%j%/%(%9%H$r07$&$3$H$,$G$-$^$9!#(B

- -

IPv6 $B%=%1%C%H$,(B IPv4 $B$H(B IPv6 $B%3%M%/%7%g%s$NN>J}$r07$&$3$H$,$G$-$k$+(B - $B$I$&$+$O!"(BApache $B4IM}l9g$O!"(B - IPv4 $B%^%C%W$5$l$?(B IPv6 $B%"%I%l%9$r;HMQ$7$F$$$F!"(B - $B$[$H$s$I$N%W%i%C%H%[!<%`$G$O%G%U%)%k%H$G;HMQ2DG=$G$9$,!"(B - FreeBSD, NetBSD, OpenBSD $B$G$O!"%7%9%F%`A4BN$H$7$F$N%]%j%7!<$H$N@09g@-$+$i!"(B - $B%G%U%)%k%H$G$O;HMQIT2D$K@_Dj$5$l$F$$$^$9!#(B - $B$3$l$i$N%G%U%)%k%H$G;HMQIT2D$N%W%i%C%H%[!<%`$G$"$C$F$b!"(B - $BFCJL$J(B configure $B$N(B - $B@_Dj%Q%i%a!<%?$G(B Apache $B$N5sF0$rJQ2=$5$;$k$3$H$,$G$-$^$9!#(B

- -

$B0lJ}$G!"(BLinux $B$d(B Tru64 $B$H$$$C$?%W%i%C%H%[!<%`$G(B IPv4 $B$H(B IPv6 - $B$NN>J}$r07$&$K$O!"%^%C%W%H%"%I%l%9$r;HMQ$9$k(B$B0J30$NJ}K!$O$"$j$^$;$s(B$B!#(B - IPv4 $B$H(B IPv6 $B$N%3%M%/%7%g%s$r:G>.8B$N%=%1%C%H$G07$$$?$$$N$G$"$l$P!"(B - IPv4 $B%^%C%W$N(B IPv6 $B%"%I%l%9$r;HMQ$9$kI,MW$,$"$j!"(B + IPv6 の特記事項 + +

多くのプラットホームで IPv6 がサポートされてきていて、 + APR はこれらのほとんどで IPv6 をサポートしているので、 + Apache は IPv6 ソケットを割り当てて IPv6 + 経由で送られてきたリクエストを扱うことができます。

+ +

IPv6 ソケットが IPv4 と IPv6 コネクションの両方を扱うことができるか + どうかは、Apache 管理者にとって厄介な問題です。 + IPv4 コネクションを IPv6 ソケットで扱う場合は、 + IPv4 マップされた IPv6 アドレスを使用していて、 + ほとんどのプラットホームではデフォルトで使用可能ですが、 + FreeBSD, NetBSD, OpenBSD では、システム全体としてのポリシーとの整合性から、 + デフォルトでは使用不可に設定されています。 + これらのデフォルトで使用不可のプラットホームであっても、 + 特別な configure の + 設定パラメータで Apache の挙動を変化させることができます。

+ +

一方で、Linux や Tru64 といったプラットホームで IPv4 と IPv6 + の両方を扱うには、マップトアドレスを使用する以外の方法はありません。 + IPv4 と IPv6 のコネクションを最小限のソケットで扱いたいのであれば、 + IPv4 マップの IPv6 アドレスを使用する必要があり、 --enable-v4-mapped configure - $B%*%W%7%g%s$r;XDj$7$^$9!#(B

+ オプションを指定します。

-

--enable-v4-mapped $B$O!"(B - FreeBSD, NetBSD, OpenBSD $B0J30$NA4$F$N%W%i%C%H%[!<%`$G$N%G%U%)%k%H$G$9!#(B - $B$G$9$+$i!"$*$=$i$/$* +

--enable-v4-mapped は、 + FreeBSD, NetBSD, OpenBSD 以外の全てのプラットホームでのデフォルトです。 + ですから、おそらくお手元の Apache はこの設定でビルドされているでしょう。

-

$B%W%i%C%H%U%)!<%`$d(B APR $B$,2?$r%5%]!<%H$9$k$+$K4X$o$i$:!"(B - IPv4 $B%3%M%/%7%g%s$N$_$r07$&$h$&$K$7$?$$>l9g$O!"(B - $BListen $B%G%#%l%/%F%#%V$G(B - IPv4 $B%"%I%l%9$r;XDj$7$F$/$@$5$$!#(B

+

プラットフォームや APR が何をサポートするかに関わらず、 + IPv4 コネクションのみを扱うようにしたい場合は、 + 次の例のように全ての + Listen ディレクティブで + IPv4 アドレスを指定してください。

Listen 0.0.0.0:80
Listen 192.0.2.1:80
-

$B>r7o$rK~$?$9%W%i%C%H%[!<%`$G!"(BApache $B$,(B - IPv4 $B$H(B IPv6 $B$N%3%M%/%7%g%s$r8DJL$N%=%1%C%H$G07$&$h$&$K$7$?$$>l9g(B - ($B$D$^$j(B IPv4 $B%^%C%W$N%"%I%l%9$rL58z$K$7$?$$>l9g(B) - $B$O!"(B--disable-v4-mapped +

条件を満たすプラットホームで、Apache が + IPv4 と IPv6 のコネクションを個別のソケットで扱うようにしたい場合 + (つまり IPv4 マップのアドレスを無効にしたい場合) + は、--disable-v4-mapped configure - $B%*%W%7%g%s$r;XDj$7$F!"Listen - $B%G%#%l%/%F%#%V$r;HMQ$7$F$/$@$5$$!#(B - --disable-v4-mapped $B$O!"(B - FreeBSD, NetBSD, OpenBSD $B%W%i%C%H%[!<%`$G$N%G%U%)%k%H$G$9!#(B

+ ディレクティブを使用してください。 + --disable-v4-mapped は、 + FreeBSD, NetBSD, OpenBSD プラットホームでのデフォルトです。

- $B%P!<%A%c%k%[%9%H$KBP$7$F$I$&F/$/$N$+(B + バーチャルホストに対してどう働くのか

Listen - $B$G%P!<%A%c%k%[%9%H$,VirtualHost - $B%G%#%l%/%F%#%V$,;H$o$l$J$$>l9g$O!"(B - $BVirtualHost - $B$r;H$C$F!"(B - $B0l$D0J>e$N%"%I%l%9$d%]!<%H$KBP$7$F0[$J$k5sF0$r$9$k$h$&$K(B - $B;XDj$9$k$3$H$,$G$-$^$9!#(B - VirtualHost $B$rVirtualHost - $B%;%/%7%g%s$r:n$j$^$9!#$b$7(B + セクションを作ります。もし VirtualHost - $B$,(B listen $B$7$F$$$J$$%"%I%l%9$H%]!<%H$KBP$7$F(B - $B@_Dj$5$l$F$7$^$&$H!"(B - $B$=$l$K$O%"%/%;%9$G$-$J$$$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B

+ が listen していないアドレスとポートに対して + 設定されてしまうと、 + それにはアクセスできないということに注意してください。

diff --git a/docs/manual/configuring.xml.ja b/docs/manual/configuring.xml.ja index 2cfae944ae..0bded6155e 100644 --- a/docs/manual/configuring.xml.ja +++ b/docs/manual/configuring.xml.ja @@ -1,4 +1,4 @@ - + @@ -22,15 +22,15 @@ - $B@_Dj%U%!%$%k(B + 設定ファイル -

$B$3$NJ8=q$G$O!"(BApache HTTP $B%5!<%P$r@_Dj$9$k$N$K;HMQ$9$k%U%!%$%k$K$D$$$F(B -$B5-=R$7$F$$$^$9!#(B

+

この文書では、Apache HTTP サーバを設定するのに使用するファイルについて +記述しています。

- $B%a%$%s$N@_Dj%U%!%$%k(B + メインの設定ファイル mod_mime @@ -42,49 +42,49 @@ -

Apache $B$O(B $B%G%#%l%/%F%#%V(B $B$r@_Dj%U%!%$%k$KJ?J8$G=q$/$3$H$K$h$j@_Dj$7$^$9!#(B - $B%a%$%s$N@_Dj%U%!%$%k$OIaDL$O(B httpd.conf $B$H$$$&L>A0$G$9!#(B - $B$3$N%U%!%$%k$N0LCV$O%3%s%Q%$%k;~$K@_Dj$5$l$^$9$,!"%3%^%s%I%i%$%s$N(B - -f $B%U%i%0$K$h$j>e=q$-$G$-$^$9!#(B - $B$^$?!"B>$N@_Dj%U%!%$%k$r(B Include - $B%G%#%l%/%F%#%V$K$h$C$FDI2C$G$-!"%o%$%k%I%+!<%I$r;HMQ$7$FB??t$N(B - $B@_Dj%U%!%$%k$rDI2C$9$k$3$H$,$G$-$^$9!#(B - $B$I$s$J%G%#%l%/%F%#%V$b!"$3$l$i$N@_Dj%U%!%$%k$I$l$K$G$bF~$l$k$3$H$,$G$-$^$9!#(B - Apache $B$O5/F0;~$+:F5/F0;~$N$_%a%$%s@_Dj%U%!%$%k$NJQ99$rG'<1$7$^$9!#(B

- -

$B%5!<%P$O(B MIME - $B%I%-%e%a%s%H%?%$%W$r4^$s$G$$$k%U%!%$%k$bFI$_9~$_$^$9!#%U%!%$%kL>$O(B +

Apache は ディレクティブ を設定ファイルに平文で書くことにより設定します。 + メインの設定ファイルは普通は httpd.conf という名前です。 + このファイルの位置はコンパイル時に設定されますが、コマンドラインの + -f フラグにより上書きできます。 + また、他の設定ファイルを Include + ディレクティブによって追加でき、ワイルドカードを使用して多数の + 設定ファイルを追加することができます。 + どんなディレクティブも、これらの設定ファイルどれにでも入れることができます。 + Apache は起動時か再起動時のみメイン設定ファイルの変更を認識します。

+ +

サーバは MIME + ドキュメントタイプを含んでいるファイルも読み込みます。ファイル名は TypesConfig - $B$G@_Dj$5$l!"%G%U%)%k%H$G$O(B mime.types - $B$K$J$C$F$$$^$9!#(B

+ で設定され、デフォルトでは mime.types + になっています。

- $B@_Dj%U%!%$%k$N9=J8(B + 設定ファイルの構文 -

Apache $B$N@_Dj%U%!%$%k$O(B 1 $B9T$K(B 1 $B$D$N%G%#%l%/%F%#%V$+$i$J$j$^$9!#(B - $B%P%C%/%9%i%C%7%e(B "\" $B$O%G%#%l%/%F%#%V$,$NJ8;z$d6uGr$,$"$C$F$O$$$1$^$;$s!#(B +

Apache の設定ファイルは 1 行に 1 つのディレクティブからなります。 + バックスラッシュ "\" はディレクティブが次の行に継続していることを + 示すために行の最後の文字として使われているかもしれません。 + 行の最後とバックスラッシュの間に他の文字や空白があってはいけません。

-

$B@_Dj%U%!%$%k$N%G%#%l%/%F%#%V$OBgJ8;z>.J8;z$r6hJL$7$^$;$s$,!"(B - $B0z?t$K$O$7$P$7$P6hJL$9$k$b$N$,$"$j$^$9!#%O%C%7%eJ8;z(B "#" - $B$G;O$^$k9T$O%3%a%s%H$H8+$J$5$l$FL5;k$5$l$^$9!#(B - $B@_Dj%G%#%l%/%F%#%V$N8e$N9T$G$O%3%a%s%H$,4^$^$l$F$$$F$O(B$B$$$1$^$;$s(B$B!#%G%#%l%/%F%#%V$NA0$N6u9T$H6uGr$OL5;k$5$l$^$9$N$G!"(B - $B$o$+$j$d$9$/$9$k$?$a$K%G%#%l%/%F%#%V$r%$%s%G%s%H$7$F$b9=$$$^$;$s!#(B +

設定ファイルのディレクティブは大文字小文字を区別しませんが、 + 引数にはしばしば区別するものがあります。ハッシュ文字 "#" + で始まる行はコメントと見なされて無視されます。 + 設定ディレクティブの後の行ではコメントが含まれていてはいけません。ディレクティブの前の空行と空白は無視されますので、 + わかりやすくするためにディレクティブをインデントしても構いません。

-

$B@_Dj%U%!%$%k$N9=J8%(%i!<$O!"(B +

設定ファイルの構文エラーは、 apachectl configtest - $B$+%3%^%s%I%i%$%s%*%W%7%g%s(B - -t $B$r;H$C$FD4$Y$i$l$^$9!#(B

+ かコマンドラインオプション + -t を使って調べられます。

- $B%b%8%e!<%k(B + モジュール @@ -96,28 +96,28 @@ -

Apache $B$O%b%8%e!<%k2=$5$l$?%5!<%P$G$9!#(B - $B%3%"%5!<%P$K$O:G$b4pK\E*$J5!G=$@$1$,4^$^$l$F$$$^$9!#3HD%5!G=$O(B - Apache $B$K%m!<%I$5$l$k(B$B%b%8%e!<%k(B$B$H$7$FMxMQ2DG=$G$9!#%G%U%)%k%H$G$O!"%3%s%Q%$%k;~$K%b%8%e!<%k$N(B - Base $B%;%C%H(B ($B4pK\%;%C%H(B) $B$,(B - $B%5!<%P$K4^$^$l$^$9!#%5!<%P$,(B$BF0E*%m!<%I(B$B%b%8%e!<%k$r;H$&$h$&$K%3%s%Q%$%k$5$l$F$$$k>l9g$O!"(B - $B%b%8%e!<%k$rJL$K%3%s%Q%$%k$7$F!"$$$D$G$b(B +

Apache はモジュール化されたサーバです。 + コアサーバには最も基本的な機能だけが含まれています。拡張機能は + Apache にロードされるモジュールとして利用可能です。デフォルトでは、コンパイル時にモジュールの + Base セット (基本セット) が + サーバに含まれます。サーバが動的ロードモジュールを使うようにコンパイルされている場合は、 + モジュールを別にコンパイルして、いつでも LoadModule - $B%G%#%l%/%F%#%V$r;H$C$FDI2C$G$-$^$9!#(B - $B$=$&$G$J$$>l9g$O!"%b%8%e!<%k$NDI2C$d:o=|$r$9$k$?$a$K$O(B Apache - $B$r:F%3%s%Q%$%k$9$kI,MW$,$"$j$^$9!#@_Dj%G%#%l%/%F%#%V$O(B IfModule - $B%V%m%C%/$KF~$l$k$3$H$GFCDj$N%b%8%e!<%k$,B8:_$9$k$H$-$@$1(B - $B@_Dj%U%!%$%k$K4^$^$l$k$h$&$K$9$k$3$H$,$G$-$^$9!#(B

+ ブロックに入れることで特定のモジュールが存在するときだけ + 設定ファイルに含まれるようにすることができます。

-

$B%3%^%s%I%i%$%s%*%W%7%g%s(B -l $B$r;H$C$F8=;~E@$G(B - $B$I$N%b%8%e!<%k$,%5!<%P$K%3%s%Q%$%k$5$l$F$$$k$+$rCN$k$3$H$,$G$-$^$9!#(B

+

コマンドラインオプション -l を使って現時点で + どのモジュールがサーバにコンパイルされているかを知ることができます。

- $B%G%#%l%/%F%#%V$NE,MQHO0O(B + ディレクティブの適用範囲 @@ -131,40 +131,40 @@ -

$B%a%$%s@_Dj%U%!%$%k$K$"$k%G%#%l%/%F%#%V$O%5!<%PA4BN$KE,MQ$5$l$^$9!#(B - $B%5!<%P$N0lItJ,$N@_Dj$@$1$rJQ99$7$?$$>l9g$O(B メイン設定ファイルにあるディレクティブはサーバ全体に適用されます。 + サーバの一部分の設定だけを変更したい場合は Directory, DirectoryMatch, Files, FilesMatch, Location, LocationMatch - $B%;%/%7%g%s$NCf$KCV$/$3$H$GE,MQHO0O$r7h$a$i$l$^$9!#(B - $B$3$l$i$N%;%/%7%g%s$O$=$NCf$K$"$k%G%#%l%/%F%#%V$NE,MQHO0O$r(B - $BFCDj$N%U%!%$%k%7%9%F%`$N0LCV$d(B URL $B$K8BDj$7$^$9!#(B - $BHs>o$K:YN3EY$N@_Dj$r2DG=$K$9$k$?$a$K!"(B - $B%;%/%7%g%s$rF~$l;R$K$9$k$3$H$b$G$-$^$9!#(B

- -

Apache $B$OF1;~$KB?$/$N0c$&%&%'%V%5%$%H$r07$&G=NO$,$"$j$^$9!#(B - $B$3$l$O(B $B%P!<%A%c%k%[%9%H(B $B$H8F$P$l$F$$$^$9!#(B - $BFCDj$N%&%'%V%5%$%H$K$N$_E,MQ$5$l$k$h$&$K$9$k$?$a$K!"(B - $B%G%#%l%/%F%#%V$O(B + セクションの中に置くことで適用範囲を決められます。 + これらのセクションはその中にあるディレクティブの適用範囲を + 特定のファイルシステムの位置や URL に限定します。 + 非常に細粒度の設定を可能にするために、 + セクションを入れ子にすることもできます。

+ +

Apache は同時に多くの違うウェブサイトを扱う能力があります。 + これは バーチャルホスト と呼ばれています。 + 特定のウェブサイトにのみ適用されるようにするために、 + ディレクティブは VirtualHost - $B%;%/%7%g%s$NCf$KCV$/$3$H$G$bE,MQHO0O$rJQ$($k$3$H$,$G$-$^$9!#(B

- -

$B$[$H$s$I$N%G%#%l%/%F%#%V$O$I$N%;%/%7%g%s$K$G$b=q$1$^$9$,!"(B - $BCf$K$O%3%s%F%-%9%H$K$h$C$F$O0UL#$r$J$5$J$$$b$N$b$"$j$^$9!#(B - $BNc$($P!"%W%m%;%9$N:n@.$r@)8f$7$F$$$k%G%#%l%/%F%#%V$O%a%$%s%5!<%P$N(B - $B%3%s%F%-%9%H$K$N$_=q$/$3$H$,$G$-$^$9!#(B - $B$I$N%G%#%l%/%F%#%V$r$I$N%;%/%7%g%s$K=q$/$3$H$,$G$-$k$+$rCN$k$?$a$K$O(B - $B%G%#%l%/%F%#%V$N(B $B%3%s%F%-%9%H(B $B$rD4$Y$F$/$@$5$$!#>\$7$$>pJs$O!"(B + セクションの中に置くことでも適用範囲を変えることができます。

+ +

ほとんどのディレクティブはどのセクションにでも書けますが、 + 中にはコンテキストによっては意味をなさないものもあります。 + 例えば、プロセスの作成を制御しているディレクティブはメインサーバの + コンテキストにのみ書くことができます。 + どのディレクティブをどのセクションに書くことができるかを知るためには + ディレクティブの コンテキスト を調べてください。詳しい情報は、 Directory, Location, Files - $B%;%/%7%g%s$NF0:nK!(B$B$K$"$j$^$9!#(B

+ セクションの動作法にあります。

- .htaccess $B%U%!%$%k(B + .htaccess ファイル @@ -173,30 +173,30 @@ -

Apache $B$G$O%&%'%V%D%j!<$NCf$KCV$+$l$?FCJL$J%U%!%$%k$r;H$C$F(B - $BHsCf1{=88"E*$J@_Dj4IM}$r$G$-$^$9!#$=$NFCJL$J%U%!%$%k$OIaDL$O(B - .htaccess $B$H$$$&L>A0$G!"(B +

Apache ではウェブツリーの中に置かれた特別なファイルを使って + 非中央集権的な設定管理をできます。その特別なファイルは普通は + .htaccess という名前で、 AccessFileName - $B%G%#%l%/%F%#%V$G$I$s$JL>A0$K$G$b;XDj$G$-$^$9!#(B + ディレクティブでどんな名前にでも指定できます。 .htaccess - $B%U%!%$%k$K=q$+$l$?%G%#%l%/%F%#%V$O%U%!%$%k$rCV$$$?(B - $B%G%#%l%/%H%j$H$=$NA4$F$N%5%V%G%#%l%/%H%j$KE,MQ$5$l$^$9!#(B - .htaccess $B%U%!%$%k$O!"%a%$%s$N@_Dj%U%!%$%k$HF1$8(B - $B9=J8$r;H$$$^$9!#(B + ファイルに書かれたディレクティブはファイルを置いた + ディレクトリとその全てのサブディレクトリに適用されます。 + .htaccess ファイルは、メインの設定ファイルと同じ + 構文を使います。 .htaccess - $B%U%!%$%k$O$9$Y$F$N%j%/%(%9%H$GFI$_9~$^$l$k$?$a!"(B - $BJQ99$O$9$0$KH?1G$5$l$^$9!#(B

+ ファイルはすべてのリクエストで読み込まれるため、 + 変更はすぐに反映されます。

-

$B$I$N%G%#%l%/%F%#%V$,(B .htaccess - $B%U%!%$%k$K=q$1$k$+$rD4$Y$k$K$O!"%G%#%l%/%F%#%V$N(B$B%3%s%F%-%9%H(B - $B$rD4$Y$F$/$@$5$$!#%5!<%P4IM}どのディレクティブが .htaccess + ファイルに書けるかを調べるには、ディレクティブのコンテキスト + を調べてください。サーバ管理者はさらにメイン設定ファイルの AllowOverride - $B$r@_Dj$9$k$3$H$G$I$N%G%#%l%/%F%#%V$r(B .htaccess - $B%U%!%$%k$K=q$1$k$h$&$K$9$k$+$r@)8f$9$k$3$H$,$G$-$^$9!#(B

+ を設定することでどのディレクティブを .htaccess + ファイルに書けるようにするかを制御することができます。

-

.htaccess $B%U%!%$%k$K4X$9$k>\$7$$>pJs$O(B - .htaccess $B%A%e!<%H%j%"%k(B - $B$r;2>H$7$F$/$@$5$$!#(B

+

.htaccess ファイルに関する詳しい情報は + .htaccess チュートリアル + を参照してください。

diff --git a/docs/manual/content-negotiation.xml.ja b/docs/manual/content-negotiation.xml.ja index bdf8928428..093bf03b5d 100644 --- a/docs/manual/content-negotiation.xml.ja +++ b/docs/manual/content-negotiation.xml.ja @@ -1,4 +1,4 @@ - + @@ -22,127 +22,127 @@ -$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B +コンテントネゴシエーション -

Apache $B$O(B HTTP/1.1 $B$N5,3J$K5-=R$5$l$F$$$k%3%s%F%s%H%M%4%7%(!<%7%g%s$r(B - $B%5%]!<%H$7$F$$$^$9!#(B - $B%V%i%&%6$K$h$jDs6!$5$l$?%a%G%#%"%?%$%W!"(B - $B8@8l!"J8;z%;%C%H!"%(%s%3!<%G%#%s%0$NM%@h798~$K4p$E$$$F!"(B - $B:GE,$J%j%=!<%9$NI=8=$rA*Br$G$-$^$9!#(B - $B$^$?!"IT40A4$J%M%4%7%(!<%7%g%s>pJs$rAw$C$F$/$k%V%i%&%6$+$i$N%j%/%(%9%H$r(B - $B$b$C$H8-$/ +

Apache は HTTP/1.1 の規格に記述されているコンテントネゴシエーションを + サポートしています。 + ブラウザにより提供されたメディアタイプ、 + 言語、文字セット、エンコーディングの優先傾向に基づいて、 + 最適なリソースの表現を選択できます。 + また、不完全なネゴシエーション情報を送ってくるブラウザからのリクエストを + もっと賢く取り扱えるよう、いくつか機能も実装してあります。

-

$B%3%s%F%s%H%M%4%7%(!<%7%g%s$O(B +

コンテントネゴシエーションは mod_negotiation - $B%b%8%e!<%k$K$h$C$FDs6!$5$l$F$$$F!"%G%U%)%k%H$GAH$_9~$^$l$F$$$^$9!#(B

+ モジュールによって提供されていて、デフォルトで組み込まれています。

-
$B%3%s%F%s%H%M%4%7%(!<%7%g%s$K$D$$$F(B - -

$B%j%=!<%9$O!"4v$D$+0[$J$C$?I=8=$GMxMQ$G$-$k>l9g$,$"$j$^$9!#(B - $BNc$($P!"0[$J$k8@8l$d0[$J$k%a%G%#%"%?%$%W!"(B - $B$^$?$O$=$l$i$NAH$_9g$o$;$GMxMQ$G$-$k$+$bCN$l$^$;$s!#(B - $B$b$C$H$bE,$7$?A*Br$r$9$kJ}K!$N0l$D$K$O!"%$%s%G%C%/%9%Z!<%8$r(B - $B%f!<%6$K8+$;$F!"%f!<%6$KA*$s$G$b$i$&J}K!$,$"$j$^$9!#(B - $B$7$+$7!"%5!<%P$,<+F0E*$KA*$V$3$H$,$G$-$k>l9g$,B?$/$"$j$^$9!#(B - $B$3$l$O!"%V%i%&%6$,%j%/%(%9%HKh$K!"(B - $B$I$NI=8=$rSO9%$9$k$+$H$$$&>pJs$rAw$k$3$H$GF0:n$7$F$$$^$9!#(B - $BNc$($P%V%i%&%6$O!"2DG=$J$i%U%i%s%98l$G>pJs$r8+$?$$!"(B - $BIT2DG=$J$i$=$NBe$o$j$K1Q8l$G$b$h$$$H!"(B - $B<+J,$NSO9%$rCN$i$;$k$3$H$,$G$-$^$9!#(B - $B%V%i%&%6$O%j%/%(%9%H$N%X%C%@$G<+J,$NM%@h798~$rCN$i$;$^$9!#(B - $B%U%i%s%98l$N$_$NI=8=$rMW5a$9$k>l9g$O!"%V%i%&%6$O +

コンテントネゴシエーションについて + +

リソースは、幾つか異なった表現で利用できる場合があります。 + 例えば、異なる言語や異なるメディアタイプ、 + またはそれらの組み合わせで利用できるかも知れません。 + もっとも適した選択をする方法の一つには、インデックスページを + ユーザに見せて、ユーザに選んでもらう方法があります。 + しかし、サーバが自動的に選ぶことができる場合が多くあります。 + これは、ブラウザがリクエスト毎に、 + どの表現を嗜好するかという情報を送ることで動作しています。 + 例えばブラウザは、可能ならフランス語で情報を見たい、 + 不可能ならその代わりに英語でもよいと、 + 自分の嗜好を知らせることができます。 + ブラウザはリクエストのヘッダで自分の優先傾向を知らせます。 + フランス語のみの表現を要求する場合は、ブラウザは次を送ります。

Accept-Language: fr -

$B$3$NM%@h798~$O!"A*Br2DG=$JI=8=$,B8:_$7$F!"(B - $B8@8l$K$h$C$FMM!9$JI=8=$,$"$k>l9g$K$N$_E,MQ$5$l$k(B - $B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B

+

この優先傾向は、選択可能な表現が存在して、 + 言語によって様々な表現がある場合にのみ適用される + ということに注意してください。

-

$B$b$C$HJ#;($J%j%/%(%9%H$NNc$r5s$2$^$7$g$&!#(B - $B$3$N%V%i%&%6$O%U%i%s%98l$H1Q8l$r$N%?%$%W$h$j$O(B HTML $B$r9%$`!"(B - $BB>$N%a%G%#%"%?%$%W$h$j$O(B GIF $B$d(B JPEG $B$r9%$`!"$7$+$7:G=*$N%a%G%#%"%?%$%W$b +

もっと複雑なリクエストの例を挙げましょう。 + このブラウザはフランス語と英語を受け付ける、しかしフランス語を好む、 + そして様々なメディアタイプを受け付けるが、 + プレインテキストや他のタイプよりは HTML を好む、 + 他のメディアタイプよりは GIF や JPEG を好む、しかし最終手段として + 他のメディアタイプも受け付ける、と設定されています。

Accept-Language: fr; q=1.0, en; q=0.5
Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
-

Apache $B$O(B HTTP/1.1 $B5,3J$GDj5A$5$l$F$$$k(B 'server - driven' $B%3%s%F%s%H%M%4%7%(!<%7%g%s$r%5%]!<%H$7$F$$$^$9!#(B +

Apache は HTTP/1.1 規格で定義されている 'server + driven' コンテントネゴシエーションをサポートしています。 Accept, Accept-Language, Accept-Charset, Accept-Encoding - $B%j%/%(%9%H%X%C%@$r40A4$K%5%]!<%H$7$F$$$^$9!#(BApache $B$O(B - 'transparent' $B%3%s%F%s%H%M%4%7%(!<%7%g%s$b%5%]!<%H$7$F$$$^$9$,!"(B - $B$3$l$O(B RFC 2295 $B$H(B RFC 2296 $B$GDj5A$5$l$F$$$k;n83E*$J(B - $B%M%4%7%(!<%7%g%s%W%m%H%3%k$G$9!#(B - $B$3$l$i$N(B RFC$B$GDj5A$5$l$F$$$k(B 'feature negotiation' - $B$O%5%]!<%H$7$F$$$^$;$s!#(B

- -

$B%j%=!<%9(B$B$H$O(B URI - $B$GFCDj$5$l$k35G0>e$N$b$N$N$3$H$G$9(B (RFC 2396)$B!#(B Apache - $B$N$h$&$J(B HTTP $B%5!<%P$O!"$=$NL>A06u4V$NCf$G$N(B - $B%j%=!<%9$N(B$BI=8=(B$B$X$N%"%/%;%9$rDs6!$7$^$9!#(B - $B$=$l$>$l$NI=8=$O(B - $BDj5A$5$l$?%a%G%#%"%?%$%W!"J8;z%;%C%H!"%(%s%3!<%G%#%s%0Ey$N(B - $BIUB0$7$?!"%P%$%HNs$N7A<0$G$9!#(B - $B$=$l$>$l$N%j%=!<%9$O$"$k;~E@$G(B 0 $B8D!"(B1 $B8D!"$=$l0J>e$NI=8=$H(B - $B4XO"IU$1$i$l$k2DG=@-$,$"$j$^$9!#J#?t$NI=8=$,MxMQ$G$-$k>l9g$O!"(B - $B%j%=!<%9$O(B$B%M%4%7%(!<%7%g%s2DG=$G$"$k(B$B$H$5$l!"(B - $B8D!9$NI=8=$O(B variant $B$H8F$P$l$^$9!#(B - $B%M%4%7%(!<%7%g%s2DG=$J%j%=!<%9$N(B variant $B$,0[$J$k!"(B - $B$=$N>uBV$r;X$7$F!"(B - $B%M%4%7%(!<%7%g%s$N(B$B$B$H8F$S$^$9!#(B

+ リクエストヘッダを完全にサポートしています。Apache は + 'transparent' コンテントネゴシエーションもサポートしていますが、 + これは RFC 2295 と RFC 2296 で定義されている試験的な + ネゴシエーションプロトコルです。 + これらの RFCで定義されている 'feature negotiation' + はサポートしていません。

+ +

リソースとは URI + で特定される概念上のもののことです (RFC 2396)。 Apache + のような HTTP サーバは、その名前空間の中での + リソースの表現へのアクセスを提供します。 + それぞれの表現は + 定義されたメディアタイプ、文字セット、エンコーディング等の + 付属した、バイト列の形式です。 + それぞれのリソースはある時点で 0 個、1 個、それ以上の表現と + 関連付けられる可能性があります。複数の表現が利用できる場合は、 + リソースはネゴシエーション可能であるとされ、 + 個々の表現は variant と呼ばれます。 + ネゴシエーション可能なリソースの variant が異なる、 + その状態を指して、 + ネゴシエーションの次元と呼びます。

-
Apache $B$K$*$1$k%M%4%7%(!<%7%g%s(B +
Apache におけるネゴシエーション -

$B%j%=!<%9$r%M%4%7%(!<%7%g%s$9$k$?$a$K$O!"(B - $B%5!<%P$O(B variant $B$=$l$>$l$K$D$$$F$N>pJs$rCN$C$F$*$/I,MW$,$"$j$^$9!#(B - $B$3$l$O0J2<$NFs$D$NJ}K!$N$I$A$i$+$G9T$o$l$^$9!#(B

+

リソースをネゴシエーションするためには、 + サーバは variant それぞれについての情報を知っておく必要があります。 + これは以下の二つの方法のどちらかで行われます。

    -
  • $B%?%$%W%^%C%W(B - ($B$9$J$o$A(B *.var $B%U%!%$%k(B) - $B$r;H$&J}K!!#(B $B$3$l$O(B variant - $B$rL@<(E*$K5s$2$F$$$k%U%!%$%k$r;XDj$7$^$9!#(B
  • +
  • タイプマップ + (すなわち *.var ファイル) + を使う方法。 これは variant + を明示的に挙げているファイルを指定します。
  • 'Multiviews' - $B$r;H$C$F!"%5!<%P$,0EL[$NFb$K%U%!%$%kL>$K%Q%?!<%s>H9g$r(B - $B9T$J$C$F$=$N7k2L$+$iA*Br$9$kJ}K!!#(B
  • + を使って、サーバが暗黙の内にファイル名にパターン照合を + 行なってその結果から選択する方法。
-
type-map $B%U%!%$%k$r;H$&(B +
type-map ファイルを使う -

$B%?%$%W%^%C%W$O(B type-map $B%O%s%I%i(B - ($B$b$7$/$O!"8E$$(B Apache - $B$N@_Dj$H2<0L8_49$G$"$k(B MIME $B%?%$%W(B +

タイプマップは type-map ハンドラ + (もしくは、古い Apache + の設定と下位互換である MIME タイプ application/x-type-map) - $B$K4XO"IU$1$i$l$?%I%-%e%a%s%H$G$9!#(B - $B$3$N5!G=$r;H$&$?$a$K$O!"$"$k%U%!%$%k$N3HD%;R$r(B + に関連付けられたドキュメントです。 + この機能を使うためには、あるファイルの拡張子を type-map - $B$H$7$FDj5A$9$k$h$&$J%O%s%I%i$r!"(B - $B@_Dj%U%!%$%kCf$KCV$/I,MW$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B - $B$3$l$O(B

+ として定義するようなハンドラを、 + 設定ファイル中に置く必要があることに注意してください。 + これは

AddHandler type-map .var -

$B$r%5!<%P@_Dj%U%!%$%kCf$K=q$/$3$H$,0lHVNI$$J}K!$G$9!#(B

+

をサーバ設定ファイル中に書くことが一番良い方法です。

-

$B%?%$%W%^%C%W%U%!%$%k$O5-=R$9$k%j%=!<%9$HF1$8L>A0$r;}$C$F$$$F!"(B - $BMxMQ2DG=$J(B variant $B$=$l$>$l$N%(%s%H%j$r;}$C$F$$$kI,MW$,$"$j$^$9!#(B - $B$=$7$F!"$3$N%(%s%H%j$OO"B3$7$?(B HTTP $B$N%X%C%@9T$G9=@.$5$l$^$9!#(B - $B0[$J$k(B variant $B$N$?$a$N%(%s%H%j$O6u9T$G6h@Z$i$l$F$$$^$9!#(B - $B%(%s%H%jCf$K6u9T$,J#?t$"$C$F$O$$$1$^$;$s!#(B - $B=,47E*$K$O!"%^%C%W%U%!%$%k$OA4BN$r7k9g$7$?$b$N$N%(%s%H%j$+$i;O$^$j$^$9(B - ($B$7$+$7$3$l$OI,?\$G$O$J$/!"$"$C$?$H$7$F$bL5;k$5$l$k$b$N$G$9(B)$B!#(B - $Bfoo - $B$r5-=R$7$F$$$k$N$G!"(Bfoo.var $B$H$$$&L>A0$K$J$j$^$9!#(B

+

タイプマップファイルは記述するリソースと同じ名前を持っていて、 + 利用可能な variant それぞれのエントリを持っている必要があります。 + そして、このエントリは連続した HTTP のヘッダ行で構成されます。 + 異なる variant のためのエントリは空行で区切られています。 + エントリ中に空行が複数あってはいけません。 + 習慣的には、マップファイルは全体を結合したもののエントリから始まります + (しかしこれは必須ではなく、あったとしても無視されるものです)。 + 次に例を示します。このファイルはリソース foo + を記述しているので、foo.var という名前になります。

URI: foo
@@ -155,12 +155,12 @@ Content-type: text/html;charset=iso-8859-2
Content-language: fr, de
-

$B$?$H$((B MultiViews $B$r;HMQ$9$k$h$&$K$J$C$F$$$?$H$7$F$b!"(B - $B%U%!%$%kL>$N3HD%;R$h$j%?%$%W%^%C%W$NJ}$,M%@h8"$r;}$D$H$$$&$3$H$K$b(B - $BCm0U$7$F$/$@$5$$!#(B - variant $B$NIJ +

たとえ MultiViews を使用するようになっていたとしても、 + ファイル名の拡張子よりタイプマップの方が優先権を持つということにも + 注意してください。 + variant の品質が違うときは、この画像のように (JPEG, GIF, ASCII + アートがあります) メディアタイプの "qs" + パラメータで指定されます。

URI: foo
@@ -175,362 +175,362 @@ Content-type: text/plain; qs=0.01
-

qs $BCM$NHO0O$O(B 0.000 $B$+$i(B 1.000 $B$G$9!#(Bqs $BCM$,(B - 0.000 $B$N(B variant $B$O7h$7$F(B - $BA*Br$5$l$J$$$3$H$KCm0U$7$F$/$@$5$$!#(B'qs' $BCM$N$J$$(B variant - $B$O(B qs $BCM(B 1.0 $B$r(B $BM?$($i$l$^$9!#(Bqs - $B%Q%i%a!<%?$O%/%i%$%"%s%H$NG=NO$K4X78L5$/!"B>$N(B variant $B$H(B - $BHf3S$7$?$H$-$N(B variant - $B$NAjBPE*$J!VIJ - -

$BG'<1$5$l$k%X%C%@$N0lMw$O(B +

qs 値の範囲は 0.000 から 1.000 です。qs 値が + 0.000 の variant は決して + 選択されないことに注意してください。'qs' 値のない variant + は qs 値 1.0 を 与えられます。qs + パラメータはクライアントの能力に関係無く、他の variant と + 比較したときの variant + の相対的な「品質」を示します。 + 例えば、写真を表現しようとしているときは JPEG + ファイルの方が普通は ASCII + ファイルよりも高い品質になります。しかし、リソースが元々 + ASCII アートで表現されているときは、ASCII ファイルの + 方が JPEG ファイルよりも高い品質になります。このように、qs + は 表現されるリソースの性質によって variant + 毎に特有の値を取ります。

+ +

認識されるヘッダの一覧は mod_negotiation - $B%I%-%e%a%s%H$K$"$j$^$9!#(B

+ ドキュメントにあります。

Multiviews -

MultiViews $B$O%G%#%l%/%H%jKh$N%*%W%7%g%s$G!"(B - httpd.conf$B%U%!%$%k$N(B +

MultiViews はディレクトリ毎のオプションで、 + httpd.confファイルの Directory, Location, Files - $B%;%/%7%g%sCf$d!"(B(AllowOverride - $B$,E,@Z$JCM$K(B $B@_Dj$5$l$F$$$k$H(B) .htaccess - $B%U%!%$%k$G(B Options - $B%G%#%l%/%F%#%V$K$h$C$F@_Dj$9$k$3$H$,$G$-$^$9!#(B - Options All $B$O(B + セクション中や、(AllowOverride + が適切な値に 設定されていると) .htaccess + ファイルで Options + ディレクティブによって設定することができます。 + Options All は MultiViews - $B$r%;%C%H$7$J$$$3$H$KCm0U$7$F$/$@$5$$!#L@<(E*$K(B - $B$=$NL>A0$r=q$/I,MW$,$"$j$^$9!#(B

- -

MultiViews $B$N8z2L$O0J2<$N$h$&$K$J$j$^$9(B: - $B%5!<%P$,(B /some/dir/foo - $B$X$N%j%/%(%9%H$r/some/dir $B$G(B - MultiViews $B$,M-8z$G$"$C$F!"(B - /some/dir/foo $B$,B8:_(B$B$7$J$$(B$B>l9g!"(B - $B%5!<%P$O%G%#%l%/%H%j$rFI$s$G(B foo.* - $B$K$"$F$O$^$kA4$F$N%U%!%$%k$rC5$7!"(B - $B;ve$=$l$i$N%U%!%$%k$r%^%C%W$9$k%?%$%W%^%C%W$r:n$j$^$9!#(B - $B$=$N$H$-!"%a%G%#%"%?%$%W$H%3%s%F%s%H%(%s%3!<%G%#%s%0$O!"$=$N%U%!%$%kL>$r(B - $BD>@\;XDj$7$?$H$-$HF1$8$b$N$,3d$jEv$F$i$l$^$9!#(B - $B$=$l$+$i%/%i%$%"%s%H$NMW5a$K0lHV9g$&$b$N$rA*$S$^$9!#(B

- -

$B%5!<%P$,%G%#%l%/%H%j$N:w0z$r:n$m$&$H$7$F$$$k>l9g!"(B + をセットしないことに注意してください。明示的に + その名前を書く必要があります。

+ +

MultiViews の効果は以下のようになります: + サーバが /some/dir/foo + へのリクエストを受け取り、/some/dir で + MultiViews が有効であって、 + /some/dir/foo が存在しない場合、 + サーバはディレクトリを読んで foo.* + にあてはまる全てのファイルを探し、 + 事実上それらのファイルをマップするタイプマップを作ります。 + そのとき、メディアタイプとコンテントエンコーディングは、そのファイル名を + 直接指定したときと同じものが割り当てられます。 + それからクライアントの要求に一番合うものを選びます。

+ +

サーバがディレクトリの索引を作ろうとしている場合、 MultiViews - $B$O(B DirectoryIndex - $B%G%#%l%/%F%#%V$G;XDj$5$l$?%U%!%$%k$rC5$92aDx$K$b(B - $BE,MQ$5$l$^$9!#@_Dj%U%!%$%k$K(B

+ は DirectoryIndex + ディレクティブで指定されたファイルを探す過程にも + 適用されます。設定ファイルに

DirectoryIndex index -

$B$,=q$+$l$F$$$F!"(Bindex.html $B$H(B - index.html3 $B$,(B - $BN>J}B8:_$7$F$$$k$H!"%5!<%P$O$=$NCf$+$i$I$A$i$+$rE,Ev$KA*$S$^$9!#(B - $B$b$7$=$NN>J}$,B8:_$;$:$K(B index.cgi - $B$,B8:_$7$F$$$k$H!"(B $B%5!<%P$O$=$l$r - -

$B$b$7%G%#%l%/%H%j$rFI$s$G$$$k:]$K!"(B - $BJ8;z%;%C%H!"%3%s%F%s%H%?%$%W!"8@8l!"%(%s%3!<%G%#%s%0$r(B - $B;XDj$9$k$?$a$N(B mod_mime - $B$GG'<1$G$-$k3HD%;R$r;}$?$J$$%U%!%$%k$,8+$D$+$k$H!"7k2L$O(B +

が書かれていて、index.html と + index.html3 が + 両方存在していると、サーバはその中からどちらかを適当に選びます。 + もしその両方が存在せずに index.cgi + が存在していると、 サーバはそれを実行します。

+ +

もしディレクトリを読んでいる際に、 + 文字セット、コンテントタイプ、言語、エンコーディングを + 指定するための mod_mime + で認識できる拡張子を持たないファイルが見つかると、結果は MultiViewsMatch - $B%G%#%l%/%F%#%V$N@_Dj$K0MB8$7$^$9!#$3$N%G%#%l%/%F%#%V$O(B - $B%O%s%I%i!"%U%#%k%?!"B>$N%U%!%$%k3HD%;R%?%$%W$N$I$l$,(B - MultiViews $B%M%4%7%(!<%7%g%s$G;HMQ$G$-$k$+$r7hDj$7$^$9!#(B

+ ディレクティブの設定に依存します。このディレクティブは + ハンドラ、フィルタ、他のファイル拡張子タイプのどれが + MultiViews ネゴシエーションで使用できるかを決定します。

-
$B%M%4%7%(!<%7%g%sJ}K!(B +
ネゴシエーション方法 -

Apache $B$O%j%=!<%9$N(B variant $B$N0lMw$r!"%?%$%W%^%C%W%U%!%$%k$+(B - $B%G%#%l%/%H%jFb$N%U%!%$%kL>$+$i$+$G\:Y$rCN$kI,MW$O$"$j$^$;$s!#(B - $B$7$+$7$J$,$i!"$3$NJ8=q$N;D$j$G$O4X?4$N$"$k?M$N$?$a$K!"(B - $B;HMQ$5$l$F$$$kJ}K!$K$D$$$F@bL@$7$F$$$^$9!#(B

+

Apache はリソースの variant の一覧を、タイプマップファイルか + ディレクトリ内のファイル名からかで取得した後、 + 「最適な」 variant を決定するために二つの方法の + どちらかを起動します。 + Apache のコンテントネゴシエーションの機能を使うために、 + どのようにしてこの調停が行われるか詳細を知る必要はありません。 + しかしながら、この文書の残りでは関心のある人のために、 + 使用されている方法について説明しています。

-

$B%M%4%7%(!<%7%g%sJ}K!$OFs$D$"$j$^$9!#(B

+

ネゴシエーション方法は二つあります。

    -
  1. $BDL>o$O(B Apache $B$N%"%k%4%j%:%`$rMQ$$$?(B Server - driven negotiation $B$,;HMQ$5$l$^$9!#(BApache - $B$N%"%k%4%j%:%`$O8e$K>\:Y$K@bL@$5$l$F$$$^$9!#(B - $B$3$N%"%k%4%j%:%`$,;HMQ$5$l$?>l9g!"(BApache - $B$O$h$jNI$$7k2L$K$J$k$h$&$K!"FCDj$N\:Y$K@bL@$5$l$F$$$^$9!#(B
  2. +
  3. 通常は Apache のアルゴリズムを用いた Server + driven negotiation が使用されます。Apache + のアルゴリズムは後に詳細に説明されています。 + このアルゴリズムが使用された場合、Apache + はより良い結果になるように、特定の次元において品質の値を + 「変える」ことができます。Apache + が品質の値を変える方法は後で詳細に説明されています。
  4. RFC 2295 - $B$GDj5A$5$l$F$$$k5!9=$rMQ$$$F%V%i%&%6$,FC$K;XDj$7$?>l9g!"(B + で定義されている機構を用いてブラウザが特に指定した場合、 transparent content negotiation - $B$,;HMQ$5$l$^$9!#$3$N%M%4%7%(!<%7%g%sJ}K!$G$O!"!V:GE,$J!W(B - variant $B$N7hDj$r%V%i%&%6$,40A4$K@)8f$9$k$3$H$,$G$-$^$9!#(B - $B$G$9$+$i!"7k2L$O%V%i%&%6$,;HMQ$7$F$$$k%"%k%4%j%:%`$K0MB8$7$^$9!#(B - Transparent negotiation $B$N=hM}$N2aDx$G!"%V%i%&%6$O(B RFC 2296 - $B$G(B $BDj5A$5$l$F$$$k(B 'remote variant selection algorithm' - $B$r + が使用されます。このネゴシエーション方法では、「最適な」 + variant の決定をブラウザが完全に制御することができます。 + ですから、結果はブラウザが使用しているアルゴリズムに依存します。 + Transparent negotiation の処理の過程で、ブラウザは RFC 2296 + で 定義されている 'remote variant selection algorithm' + を実行するように頼むことができます。
-
$B%M%4%7%(!<%7%g%s$N<!85(B +
ネゴシエーションの次元 - - + - + - - + - + - + - - + -
$B + 次元$B@bL@(B説明
$B%a%G%#%"%?%$%W(Bメディアタイプ$B%V%i%&%6$O(B Accept - $B%X%C%@%U%#!<%k%I$GM%@h798~$r;XDj$7$^$9!#(B - $B%"%$%F%`$=$l$>$l$O!"4XO"$7$?IJ + ブラウザは Accept + ヘッダフィールドで優先傾向を指定します。 + アイテムそれぞれは、関連した品質数値を持つことができます。 + variant の説明も品質数値を持つことができます + ("qs" パラメータをご覧下さい)。
$B8@8l(B言語$B%V%i%&%6$O(B Accept-Language - $B%X%C%@%U%#!<%k%I$GM%@h798~$r;XDj$7$^$9!#(B - $BMWAG$=$l$>$l$KIJe$N8@8l$H(B - $B4XO"$E$1$k$3$H$,$G$-$^$9!#(Bブラウザは Accept-Language + ヘッダフィールドで優先傾向を指定します。 + 要素それぞれに品質数値を持たせることができます。 + variants は 0 か 1 つかそれ以上の言語と + 関連づけることができます。
$B%(%s%3!<%G%#%s%0(Bエンコーディング$B%V%i%&%6$O(B Accept-Encoding - $B%X%C%@%U%#!<%k%I$GM%@h798~$r;XDj$7$^$9!#(B - $BMWAG$=$l$>$l$KIJ + ブラウザは Accept-Encoding + ヘッダフィールドで優先傾向を指定します。 + 要素それぞれに品質数値を持たせることができます。
$BJ8;z%;%C%H(B文字セット$B%V%i%&%6$O(B Accept-Charset - $B%X%C%@%U%#!<%k%I$GM%@h798~$r;XDj$7$^$9!#(B - $BMWAG$=$l$>$l$KIJ + ブラウザは Accept-Charset + ヘッダフィールドで優先傾向を指定します。 + 要素それぞれに品質数値を持たせることができます。 + variant はメディアタイプのパラメータとして文字セットを + 指定することもできます。
-
Apache $B%M%4%7%(!<%7%g%s%"%k%4%j%:%`(B +
Apache ネゴシエーションアルゴリズム -

$B%V%i%&%6$KJV$9!V:GE,$J!W(Bvariant $B$r(B ($B$b$7$"$l$P(B) $BA*Br$9$k$h$&$K(B - Apache $B$O +

ブラウザに返す「最適な」variant を (もしあれば) 選択するように + Apache は次のアルゴリズムを使うことができます。 + このアルゴリズムを設定により変更することはできません。 + 次のように動作します:

    -
  1. $B$^$:$O$8$a$K!"%M%4%7%(!<%7%g%s$N$l$K$D$$$FE,@Z$J(B - Accept* $B%X%C%@%U%#!<%k%I$rD4$Y!"(B - variant $B$=$l$>$l$KIJAccept* $B%X%C%@$G$=$N(B variant - $B$,5vMF$G$-$J$$$3$H$,<($5$l$F$$$l$P!"$=$l$r:o=|$7$^$9!#(B - variant $B$,0l$D$b;D$C$F$$$J$1$l$P!"%9%F%C%W(B 4 $B$K9T$-$^$9!#(B
  2. +
  3. まずはじめに、ネゴシエーションの次元それぞれについて適切な + Accept* ヘッダフィールドを調べ、 + variant それぞれに品質を割り当てます。 + もしある次元の Accept* ヘッダでその variant + が許容できないことが示されていれば、それを削除します。 + variant が一つも残っていなければ、ステップ 4 に行きます。
  4. - $B>C5nK!$G!V:GE,$J!W(B variant $B$rA*$S$^$9!#(B - $B -
  5. variant $B$N%a%G%#%"%?%$%W$NIJAccept - $B%X%C%@$NIJ +
  6. variant のメディアタイプの品質数値と Accept + ヘッダの品質数値との積を計算して、最高値の variant + を選びます。
  7. -
  8. $B8@8lIJ +
  9. 言語品質数値が最高の variant を選びます。
  10. -
  11. ($B$b$7$"$l$P(B) Accept-Language $B%X%C%@$N8@8l=g$+!"(B - ($B$b$7$"$l$P(B) +
  12. (もしあれば) Accept-Language ヘッダの言語順か、 + (もしあれば) LanguagePriority - $B%G%#%l%/%F%#%V$N8@8l=g$G:GE,$J8@8l$N(B variant $B$rA*$S$^$9!#(B
  13. - -
  14. $B:G9b!V%l%Y%k!W$N%a%G%#%"%Q%i%a!<%?(B - (text/html $B%a%G%#%"%?%$%W$N%P!<%8%g%s$rM?$($k$?$a$K;H$o$l$^$9(B) - $B$r;}$D(B variant $B$rA*$S$^$9!#(B
  15. - -
  16. Accept-Charset $B%X%C%@9T$GM?$($i$l$F$$$k:G9b$NJ8;z%;%C%H(B - $B%a%G%#%"%Q%i%a!<%?$r;}$D(B variant $B$rA*$S$^$9!#(B - $BL@<(E*$K=|30$5$l$F$$$J$$8B$j!"(BISO-8859-1 - $B$,5vMF$5$l$k$h$&$K$J$C$F$$$^$9!#(B - text/* $B%a%G%#%"%?%$%W$G$"$k$1$l$I$b(B - $BFCDj$NJ8;z%;%C%H$KL@<(E*$K4XO"$E$1$i$l$F$$$k$o$1$G$O$J$$(B - variant $B$O(B ISO-8859-1 $B$G$"$k$H2>Dj$5$l$^$9!#(B
  17. - -
  18. ISO-8859-1 $B$G$O$J$$(B$BJ8;z%;%C%H%a%G%#%"%Q%i%a!<%?$H(B - $B4XO"$E$1$i$l$F$$$k(B variant $B$rA*$S$^$9!#(B - $B$=$N$h$&$J(B variant $B$,$J$$>l9g$O!"Be$o$j$KA4$F$N(B - variant $B$rA*$S$^$9!#(B
  19. - -
  20. $B:GE,$J%(%s%3!<%G%#%s%0$N(B variant $B$rA*$S$^$9!#(B - $B$b$7(B user-agent $B$,5vMF$9$k%(%s%3!<%G%#%s%0$,$"$l$P!"(B - $B$=$N(B variant $B$N$_$rA*$S$^$9!#(B - $B$=$&$G$O$J$/!"$b$7%(%s%3!<%I$5$l$?$b$N$H$=$&$G$J$$(B - variant $B$,:.$6$C$FB8:_$7$F$$$?$i%(%s%3!<%I$5$l$F$$$J$$(B - variant $B$N$_$rA*$S$^$9!#(B - variant $B$,A4It%(%s%3!<%I$5$l$F$$$k$+(B - variant $B$,A4It%(%s%3!<%I$5$l$F$$$J$$$H$$$&>l9g$O!"(B - $BA4$F$N(B variant $B$rA*$S$^$9!#(B
  21. - -
  22. $BFbMF$N:G$bC;$$(B variant $B$rA*$S$^$9!#(B
  23. - -
  24. $B;D$C$F$$$k(B variant $B$N:G=i$N$b$N$rA*$S$^$9!#(B - $B%?%$%W%^%C%W%U%!%$%k$N:G=i$K%j%9%H$5$l$F$$$k$+!"(B - variant $B$,%G%#%l%/%H%j$+$i:G=i$KFI$_9~$^$l$k;~$K(B - ASCII$B=g$G%=!<%H$7$F%U%!%$%kL>$,@hF,$K$J$C$?$+!"$N$I$A$i$+$G$9!#(B
  25. + ディレクティブの言語順で最適な言語の variant を選びます。 + +
  26. 最高「レベル」のメディアパラメータ + (text/html メディアタイプのバージョンを与えるために使われます) + を持つ variant を選びます。
  27. + +
  28. Accept-Charset ヘッダ行で与えられている最高の文字セット + メディアパラメータを持つ variant を選びます。 + 明示的に除外されていない限り、ISO-8859-1 + が許容されるようになっています。 + text/* メディアタイプであるけれども + 特定の文字セットに明示的に関連づけられているわけではない + variant は ISO-8859-1 であると仮定されます。
  29. + +
  30. ISO-8859-1 ではない文字セットメディアパラメータと + 関連づけられている variant を選びます。 + そのような variant がない場合は、代わりに全ての + variant を選びます。
  31. + +
  32. 最適なエンコーディングの variant を選びます。 + もし user-agent が許容するエンコーディングがあれば、 + その variant のみを選びます。 + そうではなく、もしエンコードされたものとそうでない + variant が混ざって存在していたらエンコードされていない + variant のみを選びます。 + variant が全部エンコードされているか + variant が全部エンコードされていないという場合は、 + 全ての variant を選びます。
  33. + +
  34. 内容の最も短い variant を選びます。
  35. + +
  36. 残っている variant の最初のものを選びます。 + タイプマップファイルの最初にリストされているか、 + variant がディレクトリから最初に読み込まれる時に + ASCII順でソートしてファイル名が先頭になったか、のどちらかです。
-
  • $B%"%k%4%j%:%`$r;H$C$F0l$D$N!V:GE,$J!W(Bvariant $B$rA*$S$^$7$?$N$G!"(B - $B$=$l$r1~Ez$H$7$FJV$7$^$9!#%M%4%7%(!<%7%g%s$NVary $B$,@_Dj$5$l$^$9(B - ($B%j%=!<%9$N%-%c%C%7%e$r$9$k;~$K!"(B - $B%V%i%&%6$d%-%c%C%7%e$O$3$N>pJs$r;H$&$3$H$,$G$-$^$9(B)$B!#(B - $B0J>e$G=*$o$j!#(B
  • - -
  • $B$3$3$KMh$?$H$$$&$3$H$O!"(Bvariant $B$,0l$D$bA*Br$5$l$J$+$C$?(B - ($B%V%i%&%6$,5vMF$9$k$b$N$,$J$+$C$?$?$a(B) $B$H$$$&$3$H$G$9!#(B - 406 $B%9%F!<%?%9(B ("No Acceptable representation" $B$r0UL#$9$k(B) - $B$,!"MxMQ2DG=$J(B variant $B$N%j%9%H$N$D$$$?(B HTML - $B%I%-%e%a%s%H$H$H$b$KJV$5$l$^$9!#(B - $BAj0c$NVary $B%X%C%@$b@_Dj$5$l$^$9!#(B
  • +
  • アルゴリズムを使って一つの「最適な」variant を選びましたので、 + それを応答として返します。ネゴシエーションの次元を指定するために + HTTP レスポンスヘッダ Vary が設定されます + (リソースのキャッシュをする時に、 + ブラウザやキャッシュはこの情報を使うことができます)。 + 以上で終わり。
  • + +
  • ここに来たということは、variant が一つも選択されなかった + (ブラウザが許容するものがなかったため) ということです。 + 406 ステータス ("No Acceptable representation" を意味する) + が、利用可能な variant のリストのついた HTML + ドキュメントとともに返されます。 + 相違の次元を示す HTTP Vary ヘッダも設定されます。
  • -
    $BIJ<A$NCM$rJQ$($k(B +
    品質の値を変える -

    $B>e5-$N(B Apache $B%M%4%7%(!<%7%g%s%"%k%4%j%:%`$N873J$J2rpJs$rAw$k(B - $B%V%i%&%68~$1$K$h$j$h$$7k2L$rF@$k$?$a$K9T$o$l$^$9!#(B - $B$+$J$j%]%T%e%i!<$J%V%i%&%6$G!"$b$7$J$$$H4V0c$C$?(B variant - $B$rA*Br$9$k7k2L$K$J$C$F$7$^$&$h$&$J(B Accept - $B%X%C%@>pJs$rAw$k$b$N$b$"$j$^$9!#(B - $B%V%i%&%6$,40A4$G@5$7$$>pJs$rAw$C$F$$$l$P!"(B - $B$3$N?tCMJQ2=$OE,MQ$5$l$^$;$s!#(B

    +

    上記の Apache ネゴシエーションアルゴリズムの厳格な解釈で + 得られるであろう値から、Apache は品質数値を時々変えます。 + これは、このアルゴリズムで完全ではない、あるいは正確でない情報を送る + ブラウザ向けによりよい結果を得るために行われます。 + かなりポピュラーなブラウザで、もしないと間違った variant + を選択する結果になってしまうような Accept + ヘッダ情報を送るものもあります。 + ブラウザが完全で正しい情報を送っていれば、 + この数値変化は適用されません。

    -
    $B%a%G%#%"%?%$%W$H%o%$%k%I%+!<%I(B +
    メディアタイプとワイルドカード -

    Accept: $B%j%/%(%9%H%X%C%@$O%a%G%#%"%?%$%W$NM%@h798~$r;XDj$7$^$9!#(B - $B$3$l$O$^$?!"(B"image/*" $B$d(B "*/*" - $B$H$$$C$?!V%o%$%k%I%+!<%I!W%a%G%#%"%?%$%W$r4^$`$3$H$,$G$-$^$9!#(B - $B$3$3$G(B * $B$OG$0U$NJ8;zNs$K%^%C%A$7$^$9!#(B - $B$G$9$+$i!" +

    Accept: リクエストヘッダはメディアタイプの優先傾向を指定します。 + これはまた、"image/*" や "*/*" + といった「ワイルドカード」メディアタイプを含むことができます。 + ここで * は任意の文字列にマッチします。 + ですから、次の:

    Accept: image/*, */* -

    $B$r4^$`%j%/%(%9%H$O!"(B"image/" $B$G$O$8$^$k%?%$%WA4$F$,5vMF$G$-$k!"(B - $B$=$7$FB>$N$I$s$J%?%$%W$b5vMF$G$-$k(B - ($B$3$N>l9g$O$8$a$N(B "image/*" $B$O>iD9$K$J$j$^$9(B) - $B$3$H$r<($7$^$9!#(B - $B07$&$3$H$N$G$-$kL@<(E*$J%?%$%W$K2C$($F!"5!3#E*$K(B - $B%o%$%k%I%+!<%I$rAw$k%V%i%&%6$b$"$j$^$9!#Nc$($P(B:

    +

    を含むリクエストは、"image/" ではじまるタイプ全てが許容できる、 + そして他のどんなタイプも許容できる + (この場合はじめの "image/*" は冗長になります) + ことを示します。 + 扱うことのできる明示的なタイプに加えて、機械的に + ワイルドカードを送るブラウザもあります。例えば:

    Accept: text/html, text/plain, image/gif, image/jpeg, */* -

    $B$3$&$9$k$3$H$NA@$$$O!"L@<(E*$K%j%9%H$7$F$$$k%?%$%W$,M%@h$5$l$k$1$l$I$b!"(B - $B0[$J$kI=8=$,MxMQ2DG=$G$"$l$P$=$l$G$bNI$$!"$H$$$&$3$H$G$9!#(B - $B$7$+$7$J$,$i!">e$N4pK\E*$J%"%k%4%j%:%`$G$O!"(B - */* $B%o%$%k%I%+!<%I$OB>$NA4$F$N%?%$%W$HA4$/F1Ey$J$N$GM%@h$5$l$^$;$s!#(B - $B%V%i%&%6$O(B */* $B$K$b$C$HDc$$IJ +

    こうすることの狙いは、明示的にリストしているタイプが優先されるけれども、 + 異なる表現が利用可能であればそれでも良い、ということです。 + しかしながら、上の基本的なアルゴリズムでは、 + */* ワイルドカードは他の全てのタイプと全く同等なので優先されません。 + ブラウザは */* にもっと低い品質 (優先) + 値を付けてリクエストを送るべきなのです。例えば:

    Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01 -

    $BL@<(E*$J%?%$%W$K$OIJl9g$K$N$_!"(B - $BB>$N%?%$%W$,JV$5$l$^$9!#(B

    - -

    $B$b$7(B Accept: $B%X%C%@$,(B q $BCM$rA4$/4^$s$G(B$B$$$J$1$l$P(B$B!"(B - $BK>$_$N5sF0$r$9$k$?$a$K!"(B - Apache $B$O(B "*/*" $B$,$"$l$P(B 0.01 $B$N(B q $BCM$r@_Dj$7$^$9!#(B - $B$^$?!"(B"type/*" $B$N7A$N%o%$%k%I%+!<%I$K$O(B 0.02 $B$N(B q $BCM$r@_Dj$7$^$9(B - ($B$G$9$+$i$3$l$i$O(B "*/*" $B$N%^%C%A$h$j$bM%@h$5$l$^$9(B)$B!#(B - $B$b$7(B Accept: $B%X%C%@Cf$N%a%G%#%"%?%$%W$N$I$l$+$,(B q - $BCM$r4^$s$G$$$l$P!"$3$l$i$NFC$B$5$l$:(B$B!"(B - $B@5$7$$>pJs$rAw$k%V%i%&%6$+$i$N%j%/%(%9%H$O4|BTDL$j$K(B - $BF0:n$9$k$h$&$K$J$j$^$9!#(B

    +

    明示的なタイプには品質数値が付けられていませんので、 + デフォルトの 1.0 (最高値) の優先になります。 + ワイルドカード */* は低い優先度 0.01 を与えられているので、 + 明示的にリストされているタイプに合致する variant がない場合にのみ、 + 他のタイプが返されます。

    + +

    もし Accept: ヘッダが q 値を全く含んでいなければ、 + 望みの挙動をするために、 + Apache は "*/*" があれば 0.01 の q 値を設定します。 + また、"type/*" の形のワイルドカードには 0.02 の q 値を設定します + (ですからこれらは "*/*" のマッチよりも優先されます)。 + もし Accept: ヘッダ中のメディアタイプのどれかが q + 値を含んでいれば、これらの特殊な値は適応されず、 + 正しい情報を送るブラウザからのリクエストは期待通りに + 動作するようになります。

    -
    $B8@8l%M%4%7%(!<%7%g%s$NNc30=hM}(B +
    言語ネゴシエーションの例外処理 -

    Apache 2.0 $B$G$O?7$?$K!"8@8l%M%4%7%(!<%7%g%s$,E,9g$9$k$b$N$r(B - $B8+$D$1$k$N$K<:GT$7$?;~$K!"M%2m$K%U%)!<%k%P%C%/$G$-$k$h$&$J(B - $B%M%4%7%(!<%7%g%s%"%k%4%j%:%`$,4v$D$+DI2C$5$l$^$7$?!#(B

    +

    Apache 2.0 では新たに、言語ネゴシエーションが適合するものを + 見つけるのに失敗した時に、優雅にフォールバックできるような + ネゴシエーションアルゴリズムが幾つか追加されました。

    -

    $B%5!<%P$N%Z!<%8$r%/%i%$%"%s%H$,%j%/%(%9%H$7$?$1$l$I$b!"(B - $B%V%i%&%6$NAw$C$F$-$?(B Accept-Language $B$K9gCW$9$k%Z!<%8$,0l$D$b(B - $B8+$D$+$i$J$+$C$?>l9g$K!"%5!<%P$O(B "No Acceptable Variant" - $B$+(B "Multiple Choices" $B%l%9%]%s%9$r%/%i%$%"%s%H$KJV$7$^$9!#(B - $B$3$l$i$N%(%i!<%a%C%;!<%8$rJV$5$J$$$h$&$K!"(B - $B$3$N$h$&$J>l9g$K$O(B Apache $B$,(B Accept-Language $B$rL5;k$7$F!"(B - $B%/%i%$%"%s%H$N%j%/%(%9%H$KL@<(E*$K$O9gCW$7$J$$%I%-%e%a%s%H$r(B - $BDs6!$9$k$h$&$K@_Dj$G$-$^$9!#(B +

    サーバのページをクライアントがリクエストしたけれども、 + ブラウザの送ってきた Accept-Language に合致するページが一つも + 見つからなかった場合に、サーバは "No Acceptable Variant" + か "Multiple Choices" レスポンスをクライアントに返します。 + これらのエラーメッセージを返さないように、 + このような場合には Apache が Accept-Language を無視して、 + クライアントのリクエストに明示的には合致しないドキュメントを + 提供するように設定できます。 ForceLanguagePriority - $B%G%#%l%/%F%#%V$O!"$3$l$i$N%(%i!<$N0l$D$+N>J}$r%*!<%P!<%i%$%I$9$k$?$a$K(B - $B;HMQ$G$-$F!"(B + ディレクティブは、これらのエラーの一つか両方をオーバーライドするために + 使用できて、 LanguagePriority - $B%G%#%l%/%F%#%V$NFbMF$r;H$C$F%5!<%P$NH=CG$rBe9T$9$k$h$&$K$G$-$^$9!#(B

    - -

    $B%5!<%P$OB>$KE,9g$9$k$b$N$,8+$D$+$i$J$1$l$P!"(B - $B8@8l%5%V%;%C%H$GE,9g$9$k$b$N$r;n$=$&$H$b$7$^$9!#(B - $BNc$($P%/%i%$%"%s%H$,1Q9q1Q8l$G$"$k(B en-GB $B8@8l$G(B - $B%I%-%e%a%s%H$r%j%/%(%9%H$7$?>l9g!"%5!<%P$O(B HTTP/1.1 - $B5,3J$G$O!"C1$K(B en $B$H%^!<%/$5$l$F$$$k%I%-%e%a%s%H$r(B - $B%^%C%A$9$k$b$N$H$9$k$3$H$ODL>o$O5v$5$l$F$$$^$;$s!#(B - ($B1Q9q1Q8l$OM}2r$G$-$k$1$I0lHLE*$J1Q8l$OM}2r$G$-$J$$$H$$$&FI$_en-GB - $B$r4^$s$G(B en $B$r4^$^$J$$$N$O$[$\3N$N8@8l$K$O%^%C%A$;$:!"(B"No Acceptable Variants" - $B%(%i!<$rJV$7$?$j!"(B + ディレクティブの内容を使ってサーバの判断を代行するようにできます。

    + +

    サーバは他に適合するものが見つからなければ、 + 言語サブセットで適合するものを試そうともします。 + 例えばクライアントが英国英語である en-GB 言語で + ドキュメントをリクエストした場合、サーバは HTTP/1.1 + 規格では、単に en とマークされているドキュメントを + マッチするものとすることは通常は許されていません。 + (英国英語は理解できるけど一般的な英語は理解できないという読み手は + 考えられないので、Accept-Language ヘッダで en-GB + を含んで en を含まないのはほぼ確実に設定の間違いである、 + ということに注意してください。 + ですが不幸なことに、多くのクライアントではデフォルトで + このような設定になっています。) + しかしながら、他の言語にはマッチせず、"No Acceptable Variants" + エラーを返したり、 LanguagePriority - $B$K%U%)!<%k%P%C%/$7$h$&$H$7$F$$$k$H$-$O!"(B - $B%5%V%;%C%H;XDj$rL5;k$7$F!"(Ben-GB $B$r(B en - $B$K%^%C%A$7$^$9!#(B - Apache $B$O%/%i%$%"%s%H$N5vMF8@8l%j%9%H$K0EL[$K(B - $BHs>o$KDc$$IJl9g$O!"(B - "fr" $B%I%-%e%a%s%H$,JV$5$l$k$3$H$KCm0U$7$F$/$@$5$$!#(B - $B$3$N$h$&$J=hM}$O!"(BHTTP 1.1 $B5,3J$H$N@09g@-$r0];}$7$F!"(B - $BE,@Z$K@_Dj$5$l$?%/%i%$%"%s%H$H$b$-$A$s$HF0:n$9$k$?$a$K(B - $BI,MW$G$9!#(B

    - -

    $B$h$j9bEY$J%F%/%K%C%/(B (Cookie $B$dFCmod_negotiation - $B$,(B$B4D6-JQ?t(B prefer-language - $B$rG'<1$9$k$h$&$K$J$j$^$7$?!#(B - $B$3$NJQ?t$,B8:_$7$F!"E,@Z$J8@8l%?%0$,BeF~$5$l$F$$$k$N$G$"$l$P!"(B - mod_negotiation $B$O9gCW$9$k(B variant - $B$rA*Br$7$h$&$H$7$^$9!#9gCW$9$k$b$N$,L5$1$l$P!"(B - $BDL>o$N%M%4%7%(!<%7%g%s + にフォールバックしようとしているときは、 + サブセット指定を無視して、en-GB を en + にマッチします。 + Apache はクライアントの許容言語リストに暗黙に + 非常に低い品質値の親言語を加えることになります。 + しかし、クライアントが "en-GB; q=0.9, fr; q=0.8" とリクエストして、 + サーバが "en" と "fr" と設計されたドキュメントを持っている場合は、 + "fr" ドキュメントが返されることに注意してください。 + このような処理は、HTTP 1.1 規格との整合性を維持して、 + 適切に設定されたクライアントともきちんと動作するために + 必要です。

    + +

    より高度なテクニック (Cookie や特殊な URL パス等) + においてもユーザの言語選択をサポートするため、 + Apache 2.0.47 からは、mod_negotiation + が環境変数 prefer-language + を認識するようになりました。 + この変数が存在して、適切な言語タグが代入されているのであれば、 + mod_negotiation は合致する variant + を選択しようとします。合致するものが無ければ、 + 通常のネゴシエーション手順が適用されます。

    Example SetEnvIf Cookie "language=(.+)" prefer-language=$1 @@ -539,39 +539,39 @@
    Transparent Content Negotiation -$B$N3HD%(B - -

    Apache $B$O(B transparent content negotiation $B%W%m%H%3%k(B -(RFC 2295) $B$r{encoding ..} -$BMWAG$r(B variant $B%j%9%HCf$K;H$C$F$$$^$9!#(B -$B%j%9%HCf$N%(%s%3!<%I$5$l$?(B variant $B$rG'<1$7!"(B -Accept-Encoding $B%j%/%(%9%H%X%C%@$K=>$C$F5vMF$5$l$k(B -$B%(%s%3!<%I$r$b$C$?(B variant $B$O!"$I$l$G$b8uJd(B variant -$B$H$7$F;HMQ$9$k$h$&$K!"(B -RVSA/1.0 $B%"%k%4%j%:%`(B (RFC 2296) $B$N.?tE@0J2<(B 5 $B7e$^$G4]$a$^$;$s!#(B

    +の拡張 + +

    Apache は transparent content negotiation プロトコル +(RFC 2295) を次のように拡張しています。 +特定のコンテントエンコーディングのみが利用可能である variant +に印を付けるために、新たに {encoding ..} +要素を variant リスト中に使っています。 +リスト中のエンコードされた variant を認識し、 +Accept-Encoding リクエストヘッダに従って許容される +エンコードをもった variant は、どれでも候補 variant +として使用するように、 +RVSA/1.0 アルゴリズム (RFC 2296) の実装が拡張されました。 +RVSA/1.0 の実装では、最適な variant が見つかるまで、 +計算した品質数値は小数点以下 5 桁まで丸めません。

    -
    $B%j%s%/$HL>A0$NJQ49$K4X$9$kCm0UE@(B +
    リンクと名前の変換に関する注意点 -

    $B8@8l%M%4%7%(!<%7%g%s$r;H$C$F$$$k>l9g$O!"(B - $B%U%!%$%k$,0l$D0J>e$N3HD%;R$r;}$F$F!"(B - $B3HD%;R$N=gHV$ODL>o$O9MN8$5$l$J$$(B - ($B>\:Y$O(B mod_mime - $B$r;2>H(B) $B$N$G!"(B - $B4v$D$+$N0[$J$kL>A0$NJQ49$rA*$Y$k$3$H$K$J$j$^$9!#(B

    +

    言語ネゴシエーションを使っている場合は、 + ファイルが一つ以上の拡張子を持てて、 + 拡張子の順番は通常は考慮されない + (詳細は mod_mime + を参照) ので、 + 幾つかの異なる名前の変換を選べることになります。

    -

    $BE57?E*$J%U%!%$%k$G$O!"(BMIME $B%?%$%W3HD%;R(B ($BNc$($P(B - html) $B$r;}$C$F$$$F!"%(%s%3!<%G%#%s%03HD%;R(B - ($BNc$($P(B gz) $B$r;}$C$F$$$k$+$b$7$l$J$/$F!"(B - $B$3$N%U%!%$%k$K0[$J$k8@8l(B variant $B$rMQ0U$7$F$$$l$P!"(B - $B$b$A$m$s8@8l3HD%;R(B ($BNc$($P(B en) - $B$r;}$C$F$$$k$G$7$g$&!#(B

    +

    典型的なファイルでは、MIME タイプ拡張子 (例えば + html) を持っていて、エンコーディング拡張子 + (例えば gz) を持っているかもしれなくて、 + このファイルに異なる言語 variant を用意していれば、 + もちろん言語拡張子 (例えば en) + を持っているでしょう。

    -

    $BNc(B:

    +

    例:

    • foo.en.html
    • @@ -581,17 +581,17 @@ RVSA/1.0 $B$Nfoo.en.html.gz
    -

    $B%U%!%$%kL>$H!"$=$l$KBP$7$F;H$($k%j%s%/$H;H$($J$$%j%s%/$NNc$G$9(B:

    +

    ファイル名と、それに対して使えるリンクと使えないリンクの例です:

    - + - + - + @@ -652,63 +652,63 @@ RVSA/1.0 $B$N
    $B%U%!%$%kL>(Bファイル名$B;H$($k%j%s%/(B使えるリンク$B;H$($J$$%j%s%/(B使えないリンク
    -

    $B>e$NI=$r8+$F!"3HD%;R$J$7$N%j%s%/(B ($BNc$($P(B foo) - $B$,$$$D$G$b;H$($k$3$H$K5$$,IU$/$G$7$g$&!#(B - $B$3$NMxE@$O!"%I%-%e%a%s%H$H$7$F1~Ez$9$k%U%!%$%k$N(B - $BH$rJQ99$9$k$3$H$J$/(B - $B8e$+$i%U%!%$%k$rJQ99$G$-$k!"(B - $BNc$($P(B html $B$+$i(B shtml - $B$K!"$"$k$$$O(B cgi $B$KJQ99$G$-$kE@$G$9!#(B

    - -

    $B%j%s%/$K(B MIME $B%?%$%W$r;H$$B3$1$?$$(B ($BNc$($P(B - foo.html)$B;~$O!"8@8l3HD%;R$O(B - ($B%(%s%3!<%G%#%s%03HD%;R$b$"$l$P$=$l$b4^$a$F(B) - MIME $B%?%$%W3HD%;R$N1&B&$K$J$1$l$P$J$j$^$;$s(B - ($BNc$($P(B foo.html.en)$B!#(B

    +

    上の表を見て、拡張子なしのリンク (例えば foo) + がいつでも使えることに気が付くでしょう。 + この利点は、ドキュメントとして応答するファイルの + 実際のファイルタイプを隠蔽して、リンクの参照を変更することなく + 後からファイルを変更できる、 + 例えば html から shtml + に、あるいは cgi に変更できる点です。

    + +

    リンクに MIME タイプを使い続けたい (例えば + foo.html)時は、言語拡張子は + (エンコーディング拡張子もあればそれも含めて) + MIME タイプ拡張子の右側になければなりません + (例えば foo.html.en)。

    -
    $B%-%c%C%7%e$K4X$9$kCm0U;v9`(B - -

    $B%-%c%C%7%e$,0l$D$NI=8=$rJ]B8$7$F$$$k$H$-$O!"(B - $B%j%/%(%9%H(B URL $B$H4XO"$E$1$i$l$F$$$^$9!#(B - $B - -

    HTTP/1.0 $B=`5r$N%/%i%$%"%s%H$+$i$N%j%/%(%9%H$KBP$7$F$O!"(B - ($B%V%i%&%6$G$"$m$&$H%-%c%C%7%e$G$"$m$&$H(B) - $B%M%4%7%(!<%7%g%s$rキャッシュに関する注意事項 + +

    キャッシュが一つの表現を保存しているときは、 + リクエスト URL と関連づけられています。 + 次にその URL がリクエストされた時に、キャッシュは + 保存されている表現を使用できます。しかし、 + リソースがサーバでネゴシエーション可能であれば、 + 最初のリクエストでキャッシュされて続くキャッシュヒットでは + 間違った応答を返してしまうということになりかねません。 + これを防ぐために、Apache はコンテントネゴシエーションの + 後に返された応答全てに、HTTP/1.0 クライアントでは + キャッシュ不可能の印をつけます。 + また、ネゴシエーションされた応答のキャッシュを可能にする + HTTP/1.1 プロトコルの機能も Apache はサポートします。

    + +

    HTTP/1.0 準拠のクライアントからのリクエストに対しては、 + (ブラウザであろうとキャッシュであろうと) + ネゴシエーションを受けた応答のキャッシュを許すために、 CacheNegotiatedDocs - $B%G%#%l%/%F%#%V$r;HMQ$G$-$^$9!#(B - $B$3$N%G%#%l%/%F%#%V$O!"%5!<%P@_Dj%U%!%$%k$d%P!<%A%c%k%[%9%H$K=q$/$3$H$,$G$-!"(B - $B0z?t$r$H$j$^$;$s!#(B - HTTP/1.1 $B%/%i%$%"%s%H$+$i$N%j%/%(%9%H$K$O8zNO$r;}$A$^$;$s!#(B

    - -

    HTTP/1.1 $B%/%i%$%"%s%H$KBP$7$F$O!"%l%9%]%s%9$N%M%4%7%(!<%7%g%sVary HTTP $B%l%9%]%s%9%X%C%@$rAw$j$^$9!#(B - $B%-%c%C%7%e$O!"$3$l$r;H$C$F8eB3$N%j%/%(%9%H$KBP$7$F%m!<%+%k%3%T!<$G1~Ez$G$-$k$+(B - $B$I$&$+$r7hDj$G$-$^$9!#(B - $B%M%4%7%(!<%7%g%sforce-no-vary $B4D6-JQ?t(B$B$r(B - $B@_Dj$7$^$9!#(B

    + ディレクティブを使用できます。 + このディレクティブは、サーバ設定ファイルやバーチャルホストに書くことができ、 + 引数をとりません。 + HTTP/1.1 クライアントからのリクエストには効力を持ちません。

    + +

    HTTP/1.1 クライアントに対しては、レスポンスのネゴシエーション次元 + を示すために Vary HTTP レスポンスヘッダを送ります。 + キャッシュは、これを使って後続のリクエストに対してローカルコピーで応答できるか + どうかを決定できます。 + ネゴシエーション次元とは関係なしにローカルコピーの使用を優先するようにするには、 + force-no-vary 環境変数を + 設定します。

    -
    $BDI2C>pJs(B +
    追加情報 -

    $B%3%s%F%s%H%M%4%7%(!<%7%g%s$K4X$9$kDI2C>pJs$O!"(B - Alan J. Flavell $B$5$s$N(Bコンテントネゴシエーションに関する追加情報は、 + Alan J. Flavell さんのLanguage - Negotiation Notes $B$r$4Mw2<$5$$!#$G$9$,!"(B - Apache 2.0 $B$G$NJQ99E@$r4^$`$?$a$K$O99?7$5$l$F$$$J$$$+$b$7$l$J$$(B - $B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B

    + Negotiation Notes をご覧下さい。ですが、 + Apache 2.0 での変更点を含むためには更新されていないかもしれない + ということに注意してください。

    diff --git a/docs/manual/custom-error.xml.ja b/docs/manual/custom-error.xml.ja index 2aba3aee4c..b3b2f4df8f 100644 --- a/docs/manual/custom-error.xml.ja +++ b/docs/manual/custom-error.xml.ja @@ -1,4 +1,4 @@ - + @@ -22,52 +22,52 @@ - $B%+%9%?%`%(%i!<%l%9%]%s%9(B + カスタムエラーレスポンス -

    $B%&%'%V%^%9%?!<$,2?$i$+$N%(%i!<$dLdBj$KBP$9$k(B - Apache $B$NH?1~$r@_Dj$G$-$k$h$&$K$9$kDI2C5!G=$rDs6!$7$^$9!#(B

    +

    ウェブマスターが何らかのエラーや問題に対する + Apache の反応を設定できるようにする追加機能を提供します。

    -

    $B%5!<%P$,%(%i!<$dLdBj$rH/8+$7$?>l9g$NH?1~$r!"(B - $B%+%9%?%^%$%:$7$FDj5A$9$k$3$H$,$G$-$^$9!#(B

    +

    サーバがエラーや問題を発見した場合の反応を、 + カスタマイズして定義することができます。

    -

    $B%9%/%j%W%H$Nl9g$NH?1~$r!"$h$j9%$^$7$$%F%-%9%H$d!"JL$N(B - URL ($BFbIt5Z$S30It(B) $B$X$N%j%@%$%l%/%7%g%s$KCV$-49$($k$3$H$,$G$-$^$9!#(B +

    スクリプトの実行が失敗して "500 Server Error" + を発生させたとします。この場合の反応を、より好ましいテキストや、別の + URL (内部及び外部) へのリダイレクションに置き換えることができます。

    - $BF0:n(B + 動作
    - $B8E$$F0:n(B + 古い動作 -

    NCSA httpd 1.3 $B$O!"8E$/$FB`6~$J%(%i!<(B/$BLdBj%a%C%;!<%8$r(B - $BJV$7$F$$$^$7$?!#$=$l$O$7$P$7$P%f!<%6$K$OL50UL#$G$"$j!"(B - $B$^$?$=$l$rH/@8$5$;$?860x$r5-O?$9$kJ}K!$bDs6!$7$F$$$^$;$s$G$7$?!#(B

    +

    NCSA httpd 1.3 は、古くて退屈なエラー/問題メッセージを + 返していました。それはしばしばユーザには無意味であり、 + またそれを発生させた原因を記録する方法も提供していませんでした。

    - $B?7$7$$F0:n(B + 新しい動作
      -
    1. NCSA $B$N%O!<%I%3!<%I$5$l$?%a%C%;!<%8$NBe$o$j$K(B - $BB>$N%F%-%9%H$rI=<((B
    2. +
    3. NCSA のハードコードされたメッセージの代わりに + 他のテキストを表示
    4. -
    5. $B%m!<%+%k$N(B URL $B$K%j%@%$%l%/%H(B
    6. +
    7. ローカルの URL にリダイレクト
    8. -
    9. $B30It$N(B URL $B$K%j%@%$%l%/%H(B
    10. +
    11. 外部の URL にリダイレクト
    -

    $B$9$k$h$&$K%5!<%P$r@_Dj$G$-$^$9!#(B

    +

    するようにサーバを設定できます。

    -

    $BJL$N(B URL $B$K%j%@%$%l%/%H$9$k$3$H$OLr$KN)$A$^$9$,!"(B - $B$=$l$O@bL@$r$7$?$j!"$h$jL@3N$K8m$j(B/$BLdBj$r5-O?$7$?$j$9$k$?$a$K(B - $B2?$+>pJs$rEA$($i$l$k$H$-$K8B$j$^$9!#(B

    +

    別の URL にリダイレクトすることは役に立ちますが、 + それは説明をしたり、より明確に誤り/問題を記録したりするために + 何か情報を伝えられるときに限ります。

    -

    $B$3$l$r +

    これを実現するために、 Apache は新しく CGI のような環境変数を + 定義します:

    REDIRECT_HTTP_ACCEPT=*/*, image/gif, @@ -84,28 +84,28 @@ REDIRECT_URL=/cgi-bin/buggy.pl -

    $BF,$KIU$/(B REDIRECT_ $B$KCmL\$7$F$/$@$5$$!#(B

    - -

    $B>/$J$/$H$b(B REDIRECT_URL $B$H(B - REDIRECT_QUERY_STRING $B$O?7$7$$(B URL (CGI $B%9%/%j%W%H$+(B - CGI $B%$%s%/%k!<%I$G$"$k$H2>Dj$5$l$^$9(B) $B$KEO$5$l$^$9!#(B - $BB>$NJQ?t$O!"%(%i!<$dLdBj$,5/$-$kA0$KB8:_$7$?>l9g$K$@$1B8:_$7$^$9!#(B - $B$b$7$"$J$?$N@_Dj$7$?(B ErrorDocument $B$,(B $B30It(B$B%j%@%$%l%/%H(B - ($B$9$J$o$A(B$B!"(Bhttp: - $B$N$h$&$JBN7OL>$+$i;O$^$k$9$Y$F$N$b$N!#$?$H$(F1$8%[%9%H$r;X$7$F$$$F$b(B) - $B$J$i$P!"$3$l$i$O(B$B$^$C$?$/(B$B@_Dj$5$l$^$;$s!#(B

    +

    頭に付く REDIRECT_ に注目してください。

    + +

    少なくとも REDIRECT_URL と + REDIRECT_QUERY_STRING は新しい URL (CGI スクリプトか + CGI インクルードであると仮定されます) に渡されます。 + 他の変数は、エラーや問題が起きる前に存在した場合にだけ存在します。 + もしあなたの設定した ErrorDocument が 外部リダイレクト + (すなわち、http: + のような体系名から始まるすべてのもの。たとえ同じホストを指していても) + ならば、これらはまったく設定されません。

    - $B@_Dj(B + 設定 -

    AllowOverride $B$,E,@Z$K@_Dj$5$l$F$$$l$P!"(B - .htaccess $B%U%!%$%k$G(B ErrorDocument - $B$r;HMQ$9$k$3$H$,$G$-$^$9!#(B

    +

    AllowOverride が適切に設定されていれば、 + .htaccess ファイルで ErrorDocument + を使用することができます。

    -

    $B$3$3$K!"$$$/$D$+$NNc$r5s$2$^$9!#(B

    +

    ここに、いくつかの例を挙げます。

    ErrorDocument 500 /cgi-bin/crash-recover
    @@ -115,60 +115,60 @@ ErrorDocument 401 /Subscription/how_to_subscribe.html
    -

    $B9=J8(B

    +

    構文

    ErrorDocument <3-digit-code> <action> -

    action ($BF0:n(B) $B$O!"(B

    +

    action (動作) は、

      -
    1. $BI=<($5$l$k$Y$-%F%-%9%H!#%F%-%9%H$K$O0zMQId(B (") $B$r$D$1$^$9!#(B - $B0zMQId$N8e$KB3$/$b$N$,2?$G$bI=<($5$l$^$9!#(B - $BCm0U(B : (") $B$OI=<($5$l$^$;$s(B
    2. +
    3. 表示されるべきテキスト。テキストには引用符 (") をつけます。 + 引用符の後に続くものが何でも表示されます。 + 注意 : (") は表示されません
    4. -
    5. $B%j%@%$%l%/%H@h$N30It(B URL
    6. +
    7. リダイレクト先の外部 URL
    8. -
    9. $B%j%@%$%l%/%H@h$N%m!<%+%k(B URL
    10. +
    11. リダイレクト先のローカル URL
    - $B%+%9%?%`%(%i!<%l%9%]%s%9$H%j%@%$%l%/%H(B + カスタムエラーレスポンスとリダイレクト -

    $B%9%/%j%W%H(B/SSI $B$KDI2C$N4D6-JQ?t$,MxMQ2DG=$K$J$k$h$&$K!"(B - $B%j%@%$%l%/%H$5$l$?(B URL $B$KBP$9$k(B Apache $B$NF0:n$,JQ99$5$l$^$7$?!#(B

    +

    スクリプト/SSI に追加の環境変数が利用可能になるように、 + リダイレクトされた URL に対する Apache の動作が変更されました。

    - $B8E$$F0:n(B + 古い動作 -

    $B%j%@%$%l%/%H$5$l$?%9%/%j%W%H$OI8=`$N(B CGI - $B4D6-JQ?t$rMxMQ2DG=$G$7$?!#$7$+$7!"$I$3$+$i%j%@%$%l%/%H(B - $B$5$l$?$+$N>pJs$ODs6!$5$l$F$$$^$;$s$G$7$?!#(B

    +

    リダイレクトされたスクリプトは標準の CGI + 環境変数を利用可能でした。しかし、どこからリダイレクト + されたかの情報は提供されていませんでした。

    - $B?7$7$$F0:n(B - -

    $B%j%@%$%l%/%H$5$l$?@h$N%9%/%j%W%H$,;HMQ2DG=$J$h$&$K!"(B - $B?7$7$$$?$/$5$s$N4D6-JQ?t$,=i4|2=$5$l$^$9!#?7$7$$JQ?t$O!"$=$l$>$l(B - REDIRECT_ $B$G;O$^$j$^$9!#(B - REDIRECT_ $B$G;O$^$k4D6-JQ?t$O%j%@%$%l%/%H$5$l$kA0$KB8:_$7$F$$$?(B - CGI $B4D6-JQ?t$NF,$K(B REDIRECT_ $B$rIU$1$F:n@.$5$l$^$9!#(B - $B$9$J$o$A(B$B!"(BHTTP_USER_AGENT $B$O(B - REDIRECT_HTTP_USER_AGENT $B$K$J$j$^$9!#(B - $B$3$l$i$N?7$7$$JQ?t$K2C$($F!"(BApache $B$O!"(B - $B%9%/%j%W%H$,%j%@%$%l%/%H85$N%H%l!<%9$r=u$1$k$?$a$K(B - REDIRECT_URL $B$H(B REDIRECT_STATUS - $B$rDj5A$7$^$9!#%"%/%;%9%m%0$K$O85$N(B URL $B$H%j%@%$%l%/%H$5$l$?(B URL - $B$NN>J}$,5-O?$5$l$^$9!#(B

    - -

    ErrorDocument $B$,(B CGI $B%9%/%j%W%H$X$N%m!<%+%k%j%@%$%l%/%H$r(B - $B;XDj$7$F$$$k>l9g$O!"$=$l$r5/F0$9$k$3$H$K$J$C$?%(%i!<$N>uBV$r(B - $B%/%i%$%"%s%H$^$G3N"Status:" - $B%X%C%@$r4^$`$Y$-$G$9!#Nc$($P!"(BErrorDocument $BMQ$N(B Perl - $B%9%/%j%W%H$O0J2<$N$h$&$J$b$N$r4^$`$+$b$7$l$^$;$s!#(B + 新しい動作 + +

    リダイレクトされた先のスクリプトが使用可能なように、 + 新しいたくさんの環境変数が初期化されます。新しい変数は、それぞれ + REDIRECT_ で始まります。 + REDIRECT_ で始まる環境変数はリダイレクトされる前に存在していた + CGI 環境変数の頭に REDIRECT_ を付けて作成されます。 + すなわち、HTTP_USER_AGENT は + REDIRECT_HTTP_USER_AGENT になります。 + これらの新しい変数に加えて、Apache は、 + スクリプトがリダイレクト元のトレースを助けるために + REDIRECT_URL と REDIRECT_STATUS + を定義します。アクセスログには元の URL とリダイレクトされた URL + の両方が記録されます。

    + +

    ErrorDocument が CGI スクリプトへのローカルリダイレクトを + 指定している場合は、それを起動することになったエラーの状態を + クライアントまで確実に伝えるために "Status:" + ヘッダを含むべきです。例えば、ErrorDocument 用の Perl + スクリプトは以下のようなものを含むかもしれません。

    @@ -178,9 +178,9 @@ ... -

    $B%9%/%j%W%H$,(B 404 Not Found $B$N$h$&$J(B - $BFCDj$N%(%i!<%3%s%G%#%7%g%s$r07$&$?$a$@$1$K;H$o$l$k>l9g$O!"(B - $BBe$o$j$KFCDj$N%3!<%I$H%(%i!<%F%-%9%H$r;HMQ$9$k$3$H$,$G$-$^$9!#(B

    +

    スクリプトが 404 Not Found のような + 特定のエラーコンディションを扱うためだけに使われる場合は、 + 代わりに特定のコードとエラーテキストを使用することができます。

    diff --git a/docs/manual/developer/modules.xml.ja b/docs/manual/developer/modules.xml.ja index ceeb084307..8e729cc607 100644 --- a/docs/manual/developer/modules.xml.ja +++ b/docs/manual/developer/modules.xml.ja @@ -1,4 +1,4 @@ - + @@ -23,33 +23,33 @@ Developer Documentation -$B%b%8%e!<%k$N(B Apache 1.3 $B$+$i(B Apache 2.0 $B$X$N0\?"(B +モジュールの Apache 1.3 から Apache 2.0 への移植 -

    $B$3$NJ8=q$O(B mod_mmap_static $B%b%8%e!<%k$r(B Apache 2.0 $BMQ$K0\?"$7$?;~$K(B - $B3X$s$@7P83$r$b$H$K=q$$$?!":G=i$N +

    この文書は mod_mmap_static モジュールを Apache 2.0 用に移植した時に + 学んだ経験をもとに書いた、最初の手引き書です。まだまだ完全じゃないし、 + ひょっとすると間違っている部分もあるかもしれませんが、 + 取っ掛りにはなるでしょう。

    -
    $B4JC1$JJQ99E@(B +
    簡単な変更点 -
    $B%/%j!<%s%J%C%W(B $B%k!<%A%s(B -

    $B%/%j!<%s%J%C%W%k!<%A%s$O(B apr_status_t $B7?$G$"$kI,MW$,$"$j$^$9!#(B - $B$=$7$F!"(Bapr_status_t $B7?$NCM$rJV$5$J$/$F$O$J$j$^$;$s!#(B - $B%/%j!<%s%J%C%WCf$N%(%i!<$rDLCN$9$kI,MW$,$J$1$l$P!"JV$jCM$OIaDL!"(B - ARP_SUCCESS $B$G$9!#$?$H$(%(%i!<$rDLCN$7$?$H$7$F$b!"(B - $B$9$Y$F$N%3!<%I$,$=$NDLCN$r%A%'%C%/$7$?$j!"(B - $B%(%i!<$K1~$8$?F0:n$r$9$k$o$1$G$O$J$$$3$H$K5$$r$D$1$F$/$@$5$$!#(B

    +
    クリーンナップ ルーチン +

    クリーンナップルーチンは apr_status_t 型である必要があります。 + そして、apr_status_t 型の値を返さなくてはなりません。 + クリーンナップ中のエラーを通知する必要がなければ、返り値は普通、 + ARP_SUCCESS です。たとえエラーを通知したとしても、 + すべてのコードがその通知をチェックしたり、 + エラーに応じた動作をするわけではないことに気をつけてください。

    -
    $B=i4|2=%k!<%A%s(B +
    初期化ルーチン -

    $B=i4|2=%k!<%A%s$O=hM}A4BN$+$i8+$F$7$C$/$j$/$k$h$&$J0UL#$rI=$9$h$&$K!"(B - $BL>A0$,JQ99$5$l$^$7$?!#$G$9$+$i!"(Bmmap_init $B$+$i(B mmap_post_config - $B$N$h$&$K$A$g$C$HJQ99$5$l$^$7$?!#(B - $BEO$5$l$k0z?t$OBgI}$KJQ99$5$l!" +

    初期化ルーチンは処理全体から見てしっくりくるような意味を表すように、 + 名前が変更されました。ですから、mmap_init から mmap_post_config + のようにちょっと変更されました。 + 渡される引数は大幅に変更され、次のようになりました。

    • apr_pool_t *p
    • @@ -59,11 +59,11 @@
    -
    $B%G!<%?7?(B -

    $B%G!<%?7?$N$[$H$s$I$O(B APR $B$K0\$5$l$^$7$?!#$D$^$j!"(B - $B$$$/$D$+$NL>A0$,A0=R$N$h$&$KJQ99$5$l$F$$$^$9!#(B - $B;\$9$Y$-JQ99E@$N4JC1$J0lMw$r0J2<$K<($7$^$9!#(B

    +
    データ型 +

    データ型のほとんどは APR に移されました。つまり、 + いくつかの名前が前述のように変更されています。 + 施すべき変更点の簡単な一覧を以下に示します。

    • pool becomes apr_pool_t
    • @@ -72,22 +72,22 @@
    -
    $B$b$C$HLq2p$JJQ99E@!D(B +
    もっと厄介な変更点… -
    $B%U%C%/$NEPO?(B -

    $B?7$7$$%"!<%-%F%/%A%c$G$O:n@.$7$?4X?t$r8F$S=P$9$N$K(B - $B0lO"$N%U%C%/$r;HMQ$7$^$9!#$3$N%U%C%/$O!"?7$7$$4X?t(B - static void register_hooks(void) $B$r;H$C$FEPO?$9$k$h$&!"(B - $B%b%8%e!<%k$K=q$-B-$5$J$/$F$O$J$j$^$;$s!#(B - $B$3$N4X?t$O!"$J$K$r$9$Y$-$+0lC6M}2r$7$F$7$^$($P!"(B - $B==J,$K$o$+$j$d$9$$$b$N$G$9!#(B - $B%j%/%(%9%H$N=hM}$N$"$k%9%F!<%8$G8F$S=P$5$J$/$F$O$J$i$J$$(B - $B4X?t$OEPO?$9$kI,MW$,$"$j$^$9!#%O%s%I%i$OEPO?$9$kI,MW$O$"$j$^$;$s!#(B - $B4X?t$rEPO?$G$-$k%U%'!<%:$O$?$/$5$s$"$j$^$9!#(B - $B$=$l$>$l$N%U%'!<%:$G!"4X?t$r8F$S=P$9AjBPE*$J=gHV$O!"(B - $B$+$J$j$NDxEY@)8f$G$-$^$9!#(B

    +
    フックの登録 +

    新しいアーキテクチャでは作成した関数を呼び出すのに + 一連のフックを使用します。このフックは、新しい関数 + static void register_hooks(void) を使って登録するよう、 + モジュールに書き足さなくてはなりません。 + この関数は、なにをすべきか一旦理解してしまえば、 + 十分にわかりやすいものです。 + リクエストの処理のあるステージで呼び出さなくてはならない + 関数は登録する必要があります。ハンドラは登録する必要はありません。 + 関数を登録できるフェーズはたくさんあります。 + それぞれのフェーズで、関数を呼び出す相対的な順番は、 + かなりの程度制御できます。

    -

    $B0J2<$O!"(Bmod_mmap_static $B$KDI2C$7$?%3!<%I$G$9(B:

    +

    以下は、mod_mmap_static に追加したコードです:

     static void register_hooks(void)
    @@ -98,18 +98,18 @@ static void register_hooks(void)
     };
    -

    $B$3$3$G$O8F$S$@$9$Y$-Fs$D$N4X?t$rEPO?$7$F$$$^$9!#0l$D$O(B - post_config $B%9%F!<%8MQ(B ($B$[$H$s$I$9$Y$F$N%b%8%e!<%k(B - $B$O$3$l$,I,MW$G$9(B) $B$G!"$b$&0l$D$O(B translate_name $B%U%'!<%:MQ$G$9!#(B - $B$=$l$>$l$N4X?t$OL>A0$O0c$&$1$l$I$b7A<0$OF1$8$G$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B - $B$=$l$G$O!"7A<0$O$I$N$h$&$K$J$C$F$$$k$G$7$g$&$+(B?

    +

    ここでは呼びだすべき二つの関数を登録しています。一つは + post_config ステージ用 (ほとんどすべてのモジュール + はこれが必要です) で、もう一つは translate_name フェーズ用です。 + それぞれの関数は名前は違うけれども形式は同じであることに注意してください。 + それでは、形式はどのようになっているでしょうか?

    ap_hook_phase_name(function_name, predecessors, successors, position); -

    $B;0$D$N0LCV$,Dj5A$5$l$F$$$^$9!D(B

    +

    三つの位置が定義されています…

    • HOOK_FIRST
    • @@ -117,22 +117,22 @@ static void register_hooks(void)
    • HOOK_LAST
    -

    $B0LCV$rDj5A$9$k$K$O!">e5-$N!V0LCV!W$r;XDj$7!"(B - $B=$>~;R$G$"$k!V@h9T!W$H!V8e9T!W$G - -

    mod_mmap_static $B$N>l9g!"(Bpost_config - $B%9%F!<%8$G$OI,MW$"$j$^$;$s$,!"(B - mmap_static_xlat $B$,(B core $B%b%8%e!<%k$,L>A0$NJQ49$r$B8F$P$l$J$1$l$P$J$j$^$;$s(B$B!#(B - $B$=$3$G(B aszPre $B$r;H$C$F(B HOOK_LAST $B$N=$>~;R$rDj5A$7$F$$$^$9!#(B

    +

    位置を定義するには、上記の「位置」を指定し、 + 修飾子である「先行」と「後行」で手を加えます。 + 「先行」「後行」は、呼ばれるべき関数のリストです。 + 「先行」は関数の実行前に呼ばれるもので、 + 「後行」は実行後に呼ばれるものです。

    + +

    mod_mmap_static の場合、post_config + ステージでは必要ありませんが、 + mmap_static_xlat が core モジュールが名前の変換を実行した後に + 呼ばれなければなりません。 + そこで aszPre を使って HOOK_LAST の修飾子を定義しています。

    -
    $B%b%8%e!<%k$NDj5A(B -

    $B%b%8%e!<%k$NDj5A$r:n@.$9$k:]$KCm0U$7$J$1$l$P$J$i$J$$(B - $B%9%F!<%8$N?t$O7c8:$7$F$$$^$9!#8E$$Dj5A$O +

    モジュールの定義 +

    モジュールの定義を作成する際に注意しなければならない + ステージの数は激減しています。古い定義は次のようになっていました。

     module MODULE_VAR_EXPORT module_name_module =
    @@ -159,7 +159,7 @@ module MODULE_VAR_EXPORT module_name_module =
     };
    -

    $B?7$7$$9=B$BN$O$H$C$F$b%7%s%W%k$G$9!D(B

    +

    新しい構造体はとってもシンプルです…

     module MODULE_VAR_EXPORT module_name_module =
     {
    @@ -174,98 +174,98 @@ module MODULE_VAR_EXPORT module_name_module =
     };
    -

    $B$3$N$&$A$N$$$/$D$+$O8E$$$b$N$+$i?7$7$$$b$N$KD>@\FI$_BX$($i$l$k$b$N$G!"(B - $B$$$/$D$+$O$=$&$G$O$"$j$^$;$s!#$I$&$9$l$P$$$$$N$+$rMWLs$7$F$_$^$9!#(B

    +

    このうちのいくつかは古いものから新しいものに直接読み替えられるもので、 + いくつかはそうではありません。どうすればいいのかを要約してみます。

    -

    $BD>@\FI$_BX$($i$l$k%9%F!<%8(B:

    +

    直接読み替えられるステージ:

    -
    /* $B%G%#%l%/%H%j@_Dj:n@.4X?t(B */
    -
    /* $B%G%#%l%/%H%jKh@_Dj9=B$BN:n@.(B */
    +
    /* ディレクトリ設定作成関数 */
    +
    /* ディレクトリ毎設定構造体作成 */
    -
    /* $B%5!<%P@_Dj:n@.4X?t(B */
    -
    /* $B%5!<%PKh@_Dj9=B$BN:n@.(B */
    +
    /* サーバ設定作成関数 */
    +
    /* サーバ毎設定構造体作成 */
    -
    /* $B%G%#%l%/%H%j@_Dj%^!<%84X?t(B */
    -
    /* $B%G%#%l%/%H%jKh@_Dj9=B$BN%^!<%8(B */
    +
    /* ディレクトリ設定マージ関数 */
    +
    /* ディレクトリ毎設定構造体マージ */
    -
    /* $B%5!<%P@_Dj%^!<%84X?t(B */
    -
    /* $B%5!<%PKh@_Dj9=B$BN:n@.%^!<%8(B */
    +
    /* サーバ設定マージ関数 */
    +
    /* サーバ毎設定構造体作成マージ */
    -
    /* $B%3%^%s%I!&%F!<%V%k(B */
    -
    /* $B%3%^%s%I(B apr_table_t */
    +
    /* コマンド・テーブル */
    +
    /* コマンド apr_table_t */
    -
    /* $B%O%s%I%i(B */
    -
    /* $B%O%s%I%i(B */
    +
    /* ハンドラ */
    +
    /* ハンドラ */
    -

    $B8E$$4X?t$N;D$j$N$b$N$O%U%C%/$H$7$FEPO?$5$l$k$Y$-$G$9!#(B - $B8=;~E@$G +

    古い関数の残りのものはフックとして登録されるべきです。 + 現時点で次のようなフック・ステージが定義されています…

    ap_hook_post_config
    -
    ($B0JA0$N(B _init $B%k!<%A%s$,EPO?$5$l$k$Y$->l=j$G$9(B)
    +
    (以前の _init ルーチンが登録されるべき場所です)
    ap_hook_http_method
    -
    ($B%j%/%(%9%H$+$i(B HTTP $B%a%=%C%I$r +
    (リクエストから HTTP メソッドを取得します (互換用))
    ap_hook_open_logs
    -
    ($BFCDj$N%m%0$N%*!<%W%s(B)
    +
    (特定のログのオープン)
    ap_hook_auth_checker
    -
    ($B%j%=!<%9$,8"8B$rI,MW$H$9$k$+$I$&$+$N3NG'(B)
    +
    (リソースが権限を必要とするかどうかの確認)
    ap_hook_access_checker
    -
    ($B%b%8%e!<%k8GM-$N@)Ls$N3NG'(B)
    +
    (モジュール固有の制約の確認)
    ap_hook_check_user_id
    -
    ($B%f!<%6(B ID $B$H%Q%9%o!<%I$N3NG'(B)
    +
    (ユーザ ID とパスワードの確認)
    ap_hook_default_port
    -
    ($B%5!<%P$N%G%U%)%k%H!&%]!<%H$N +
    (サーバのデフォルト・ポートの取得)
    ap_hook_pre_connection
    -
    ($B=hM}$ND>A0$KI,MW$J$3$H$r8e$K8F$P$l$k(B)
    +
    (処理の直前に必要なことを実行。ただし accept 直後に呼ばれる)
    ap_hook_process_connection
    -
    ($B%W%m%H%3%k$N=hM}(B)
    +
    (プロトコルの処理)
    ap_hook_child_init
    -
    ($B;R%W%m%;%k5/F0D>8e(B)
    +
    (子プロセル起動直後)
    ap_hook_create_request
    (??)
    ap_hook_fixups
    -
    ($B1~EzFbMF$N@8@.$rJQ99$9$k%i%9%H!&%A%c%s%9(B)
    +
    (応答内容の生成を変更するラスト・チャンス)
    ap_hook_handler
    -
    ($B1~EzFbMF$N@8@.(B)
    +
    (応答内容の生成)
    ap_hook_header_parser
    -
    ($B%b%8%e!<%k$K%X%C%@$N>H2q$r$5$;$k!#$[$H$s$I$N%b%8%e!<%k$G$O;H$o$l$^$;$s!#(Bpost_read_request $B$r;H$$$^$9(B)
    +
    (モジュールにヘッダの照会をさせる。ほとんどのモジュールでは使われません。post_read_request を使います)
    ap_hook_insert_filter
    -
    ($B%U%#%k%?!&%A%'%$%s$K%U%#%k%?$rA^F~(B)
    +
    (フィルタ・チェインにフィルタを挿入)
    ap_hook_log_transaction
    -
    ($B%j%/%(%9%H$K$D$$$F$N>pJs$r5-O?$9$k(B)
    +
    (リクエストについての情報を記録する)
    ap_hook_optional_fn_retrieve
    -
    ($B%*%W%7%g%s$H$7$FEPO?$5$l$?4X?t$N +
    (オプションとして登録された関数の取得)
    ap_hook_post_read_request
    -
    ($B%j%/%(%9%H$rFI$_$3$s$@8e!"B>$N%U%'!<%:$NA0$K8F$P$l$k(B)
    +
    (リクエストを読みこんだ後、他のフェーズの前に呼ばれる)
    ap_hook_quick_handler
    -
    $B%j%/%(%9%H$N=hM}$,;O$^$kA0$K8F$P$l$k!#%-%c%C%7%e%b%8%e!<%k$,(B - $B;HMQ$7$F$$$k(B
    +
    リクエストの処理が始まる前に呼ばれる。キャッシュモジュールが + 使用している
    ap_hook_translate_name
    -
    (URI $B$r%U%!%$%kL>$KJQ49$9$k(B)
    +
    (URI をファイル名に変換する)
    ap_hook_type_checker
    -
    ($BJ8=q7?$N7hDj$H@_Dj!#$"$k$$$O$=$NJRJ}(B)
    +
    (文書型の決定と設定。あるいはその片方)
    diff --git a/docs/manual/dns-caveats.xml.ja b/docs/manual/dns-caveats.xml.ja index dad810f53a..9d5d526ab6 100644 --- a/docs/manual/dns-caveats.xml.ja +++ b/docs/manual/dns-caveats.xml.ja @@ -1,4 +1,4 @@ - + @@ -22,19 +22,19 @@ - DNS $B$H(B Apache $B$K$^$D$o$kCm0U;v9`(B + DNS と Apache にまつわる注意事項 -

    $BK\J8=q$NFbMF$Ol9g!"?.Mj@-$NLdBj(B - ($B5/F0$7$J$$$+$b$7$l$^$;$s(B) $B$d%5!<%S%95qH]$dEpMQ%"%?%C%/(B - ($BB>$N%f!<%6$+$i%R%C%H$rEp$`$3$H$r4^$_$^$9(B) - $B$NLdBj$KD>LL$9$k$+$b$7$l$^$;$s!#(B

    +

    本文書の内容は次の一言に尽きます。「Apache が設定ファイルを読み込むときに + DNS を使用する必要がないようにして下さい」。Apache が設定ファイルを + 読み込むときに DNS を使用する必要がある場合、信頼性の問題 + (起動しないかもしれません) やサービス拒否や盗用アタック + (他のユーザからヒットを盗むことを含みます) + の問題に直面するかもしれません。

    - $B4JC1$JNc(B + 簡単な例 <VirtualHost www.abc.dom>
    @@ -43,20 +43,20 @@ </VirtualHost>
    -

    Apache $B$,@5>o$K5!G=$9$k$K$O!"%P!<%A%c%k%[%9%HKh$KI,$:Fs$D$N(B - $B>pJs$,I,MW$K$J$j$^$9!#$=$l$O!"(B +

    Apache が正常に機能するには、バーチャルホスト毎に必ず二つの + 情報が必要になります。それは、 ServerName - $B$H!"$=$N%5!<%P$,1~Ez$9$k$?$a$N(B IP ($B:GDc0l$D(B) $B$G$9!#(B - $B>e5-Nc$G$O(B IP $B%"%I%l%9$r4^$s$G$$$^$;$s$N$G!"(BApache $B$O(B DNS - $B$r;HMQ$7$F(B www.abc.dom $B$r8+$D$1$J$1$l$P$J$j$^$;$s!#(B - $B2?$i$+$NM}M3$G@_Dj%U%!%$%k$rFI$_9~$s$G$$$k$H$-$K(B DNS - $B$,MxMQ$G$-$J$+$C$?>l9g!"(B - $B%P!<%A%c%k%[%9%H$O(B$B@_Dj$5$l$^$;$s(B$B!#(B - $B$=$7$F!"$=$N%P!<%A%c%k%[%9%H$KBP$9$k%R%C%H$K$O1~Ez$,$J$5$l$^$;$s(B - (Apache 1.2 $B0JA0$G$O5/F0$9$i$7$^$;$s(B)$B!#(B

    - -

    www.abc.dom $B$N%"%I%l%9$,(B 192.0.2.1 - $B$@$H$7$^$9!#$G$O!" + と、そのサーバが応答するための IP (最低一つ) です。 + 上記例では IP アドレスを含んでいませんので、Apache は DNS + を使用して www.abc.dom を見つけなければなりません。 + 何らかの理由で設定ファイルを読み込んでいるときに DNS + が利用できなかった場合、 + バーチャルホストは設定されません。 + そして、そのバーチャルホストに対するヒットには応答がなされません + (Apache 1.2 以前では起動すらしません)。

    + +

    www.abc.dom のアドレスが 192.0.2.1 + だとします。では、次の設定について考えてみましょう。

    <VirtualHost 192.0.2.1>
    @@ -65,17 +65,17 @@ </VirtualHost>
    -

    $B8=:_$N%j%j!<%9$G$O(B Apache $B$O(B DNS $B5U0z$-$r;HMQ$7$F(B - $B$3$N%P!<%A%c%k%[%9%H$N(B ServerName - $B$r8+$D$1$^$9!#(B - $B$=$N5U0z$-$,<:GT$7$?>l9g$OItJ,E*$K%P!<%A%c%k%[%9%H$rL58z$K$7$^$9(B - (Apache 1.2 $B$h$jA0$G$O5/F0$9$i$7$^$;$s(B)$B!#(B - $B%P!<%A%c%k%[%9%H$,L>A0%Y!<%9$G$"$l$P40A4$KL58z$K$J$j$^$9$,!"(B - IP $B%Y!<%9$G$"$l$P35$MF0:n$7$^$9!#$7$+$7$J$,$i!"%5!<%PL>$r(B - $B4^$`40A4$J(B URL $B$r@8@.$7$J$1$l$P$J$i$J$$>l9g$O!"@5$7$$(B URL - $B$N@8@.$,$G$-$^$;$s!#(B

    +

    現在のリリースでは Apache は DNS 逆引きを使用して + このバーチャルホストの ServerName + を見つけます。 + その逆引きが失敗した場合は部分的にバーチャルホストを無効にします + (Apache 1.2 より前では起動すらしません)。 + バーチャルホストが名前ベースであれば完全に無効になりますが、 + IP ベースであれば概ね動作します。しかしながら、サーバ名を + 含む完全な URL を生成しなければならない場合は、正しい URL + の生成ができません。

    -

    $Be5-$NLdBj$r2r7h$7$F$$$^$9!#(B

    +

    次の例は上記の問題を解決しています。

    <VirtualHost 192.0.2.1>
    @@ -87,19 +87,19 @@
    - $B%5!<%S%95qH](B + サービス拒否 -

    $B%5!<%S%95qH]$,5/$3$k>l9g!"(B($B>/$J$/$H$b(B) $BFs$D$N%1!<%9$,$"$j$^$9!#(B - Apache 1.2 $B$h$jA0$rl9g!"%P!<%A%c%k%[%9%H$N$?$a$N(B - $B>e5-$NFs$D$N(B DNS $B8!:w$N$&$A0l$D<:GT$9$l$P5/F0$9$i$7$^$;$s!#(B - $B$=$7$F$3$N(B DNS $B8!:w$,<+J,$N@)8f2<$K$9$i$J$$>l9g$b$"$j$($^$9!#(B - $BNc$($P!"(Babc.dom $B$,8\5R$N%5!<%P$N0l$D$G!"(B - DNS $B$O8\5R<+?H$G4IM}$7$F$$$k>l9g!"C1$K(B - www.abc.dom $B%l%3!<%I$r:o=|$9$k$@$1$G!"(B - (1.2 $B$h$jA0$N(B) $B%5!<%P$r5/F0ITG=$K$9$k$3$H$,$G$-$^$9!#(B

    +

    サービス拒否が起こる場合、(少なくとも) 二つのケースがあります。 + Apache 1.2 より前を実行している場合、バーチャルホストのための + 上記の二つの DNS 検索のうち一つ失敗すれば起動すらしません。 + そしてこの DNS 検索が自分の制御下にすらない場合もありえます。 + 例えば、abc.dom が顧客のサーバの一つで、 + DNS は顧客自身で管理している場合、単に + www.abc.dom レコードを削除するだけで、 + (1.2 より前の) サーバを起動不能にすることができます。

    -

    $B$b$&0l$D$N%1!<%9$O!"$h$j5$IU$-$K$/$$$b$N$G$9!#(B - $B +

    もう一つのケースは、より気付きにくいものです。 + 次の設定について考えてみましょう。

    <VirtualHost www.abc.dom>
    @@ -113,119 +113,119 @@ </VirtualHost>
    -

    192.0.2.1 $B$r(B www.abc.dom $B$K!"(B - 192.0.2.2 $B$r(B www.def.dom $B$K3d$jEv$F$F$$$k$H$7$^$9!#(B - $B$^$?!"(Bdef.dom $B$O8\5R<+?H$N(B DNS - $B$N@)8f2<$K$"$k$H$7$^$9!#$3$N@_Dj$G!"(Babc.dom - $B$K8~$1$i$l$?%H%i%U%#%C%/A4$F$rC%$&$3$H$,$G$-$k0LCV$K(B - def.dom $B$r@_CV$G$-$F$$$^$9!#8e$OC1$K(B - www.def.dom $B$,(B 192.0.2.1 $B$r;2>H$9$k$h$&$K(B - $B@_Dj$9$k$@$1$G$9!#(BDNS $B$O8\5RB&$N(B DNS $B$G%3%s%H%m!<%k$5$l$F$$$k$N$G!"(B - www.def.dom $B%l%3!<%I$,9%$-$J>l=j$r;X$9$h$&$K(B - $B@_Dj$G$-$F$7$^$&$N$r;_$a$5$;$k$3$H$,$G$-$^$;$s!#(B

    - -

    192.0.2.1 $B$KBP$9$k%j%/%(%9%H(B - (http://www.abc.dom/whatever $B7A<0$N(B URL - $B$rF~NO$7$?%f!<%6$+$i$N$b$NA4$F$r4^$_$^$9(B) - $B$O!"(Bdef.dom $B%P!<%A%c%k%[%9%H$G1~Ez$5$l$^$9!#(B - $B$3$N$h$&$J$3$H$,2?8N5/$3$k$+$b$C$HNI$/CN$k$?$a$K$O!"(B - $B1~Ez$NI,MW$J%P!<%A%c%k%[%9%H$X$N%j%/%(%9%H$KBP$7$F!"(B - Apache $B$,$I$N$h$&$K@09g@-$r3NJ]$9$k$+$K$D$$$F!"(B - $B?<$$5DO@$,I,MW$K$J$j$^$9!#$*$*$6$C$Q$J@bL@$O(B$B$3$A$i(B$B$K5-=R$5$l$F$$$^$9!#(B

    +

    192.0.2.1 を www.abc.dom に、 + 192.0.2.2 を www.def.dom に割り当てているとします。 + また、def.dom は顧客自身の DNS + の制御下にあるとします。この設定で、abc.dom + に向けられたトラフィック全てを奪うことができる位置に + def.dom を設置できています。後は単に + www.def.dom が 192.0.2.1 を参照するように + 設定するだけです。DNS は顧客側の DNS でコントロールされているので、 + www.def.dom レコードが好きな場所を指すように + 設定できてしまうのを止めさせることができません。

    + +

    192.0.2.1 に対するリクエスト + (http://www.abc.dom/whatever 形式の URL + を入力したユーザからのもの全てを含みます) + は、def.dom バーチャルホストで応答されます。 + このようなことが何故起こるかもっと良く知るためには、 + 応答の必要なバーチャルホストへのリクエストに対して、 + Apache がどのように整合性を確保するかについて、 + 深い議論が必要になります。おおざっぱな説明はこちらに記述されています。

    - $B!V<g%5!<%P!W%"%I%l%9(B - -

    Apache 1.1 $B$G$N(B $BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$N%5%]!<%H(B $BDI2C$N:]$K!"(B - Apache $B$O(B httpd $B$NServerName $B$r;HMQ$9$k$+!"(B - C $B8@8l$N4X?t(B gethostname ($B%3%^%s%I%W%m%s%W%H$G(B - hostname $B$H%?%$%W$7$?$H$-$HF1$8$b$N$rJV$7$^$9(B) - $B$r8F$S=P$9$+$r$7$^$9!#(B - $B$=$N8e!"F@$i$l$?%"%I%l%9$G(B DNS $B8!:w$r9T$J$$$^$9!#(B - $B8=:_$N$H$3$m!"$3$N(B DNS $B8!:w$r2sHr$9$kJ}K!$O$"$j$^$;$s!#(B

    - -

    DNS $B%5!<%P$,%@%&%s$7$F!"$3$N8!:w$,$G$-$J$$;vBV$,5/$3$k$3$H$r(B - $B62$l$F$$$k$N$G$"$l$P!"(B/etc/hosts - $B$K%[%9%HL>$r5-=R$7$F$*$/$3$H$,$G$-$^$9(B - ($B%^%7%s$,@5>o$K5/F0$9$k$h$&$K4{$K@_Dj$5$l$F$$$k$+$b$7$l$^$;$s(B)$B!#(B - $B$=$N>l9g!"(BDNS $B;2>H$,<:GT$7$?>l9g$K%^%7%s$,(B /etc/hosts - $B$r;HMQ$9$k$h$&$K@_Dj$7$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#(B - $B$=$NJ}K!$O!"$I$N(B OS $B$r;HMQ$7$F$$$k$+$K0MB8$7$^$9$,!"(B - /etc/resolv.conf $B$+(B /etc/nsswitch.conf - $B$rJT=8$9$k$3$H$G@_Dj$G$-$^$9!#(B

    - -

    $B$b$7B>$NM}M3$G(B DNS $B$rMxMQ$9$kI,MW$,$J$$>l9g$O!"(B - HOSTRESORDER $B4D6-JQ?t$r!V(B local - $B!W$K@_Dj$9$k$3$H$G$=$N$h$&$K$G$-$^$9!#0J>e$3$l$i$N;vJA$O!"$I$s$J(B - OS $B!"%l%>%k%P%i%$%V%i%j$r;HMQ$7$F$$$k$+$K0MB8$7$^$9!#$^$?!"(B - mod_env $B$r;HMQ$7$F4D6-JQ?t$r@)8f$7$J$$8B$j!"(B - CGI $B$K$b1F6A$rM?$($^$9!#(Bman $B%Z!<%8$d;HMQ$7$F$$$k(B OS - $B$N(B FAQ $B$GD4$Y$k$HNI$$$G$7$g$&!#(B

    + 「主サーバ」アドレス + +

    Apache 1.1 での 名前ベースのバーチャルホストのサポート 追加の際に、 + Apache は httpd の実行されているホストの IP + アドレスを知る必要が出てきました。このアドレスを得るために、 + (もしあれば) グローバルな + ServerName を使用するか、 + C 言語の関数 gethostname (コマンドプロンプトで + hostname とタイプしたときと同じものを返します) + を呼び出すかをします。 + その後、得られたアドレスで DNS 検索を行ないます。 + 現在のところ、この DNS 検索を回避する方法はありません。

    + +

    DNS サーバがダウンして、この検索ができない事態が起こることを + 恐れているのであれば、/etc/hosts + にホスト名を記述しておくことができます + (マシンが正常に起動するように既に設定されているかもしれません)。 + その場合、DNS 参照が失敗した場合にマシンが /etc/hosts + を使用するように設定していることを確認してください。 + その方法は、どの OS を使用しているかに依存しますが、 + /etc/resolv.conf か /etc/nsswitch.conf + を編集することで設定できます。

    + +

    もし他の理由で DNS を利用する必要がない場合は、 + HOSTRESORDER 環境変数を「 local + 」に設定することでそのようにできます。以上これらの事柄は、どんな + OS 、レゾルバライブラリを使用しているかに依存します。また、 + mod_env を使用して環境変数を制御しない限り、 + CGI にも影響を与えます。man ページや使用している OS + の FAQ で調べると良いでしょう。

    - $B0J>e$NLdBj$r2r7h$9$kJ}K!(B + 以上の問題を解決する方法
    • VirtualHost - $B$G(B IP $B%"%I%l%9$r;HMQ$9$k!#(B + で IP アドレスを使用する。
    • Listen - $B$G(B IP $B%"%I%l%9$r;HMQ$9$k!#(B + で IP アドレスを使用する。
    • - $BA4$F$N%P!<%A%c%k%[%9%H$,L@<(E*$K(B + 全てのバーチャルホストが明示的に ServerName - $B$r;}$D$h$&$K$9$k!#(B + を持つようにする。
    • -
    • $B2?$b1~Ez$7$J$$(B +
    • 何も応答しない <VirtualHost _default_:*> - $B%5!<%P$r:n$k!#(B
    • + サーバを作る。
    - $BIUO?(B: $B>-MhE*$JJ}8~@-(B - -

    DNS $B$K4X$7$F!"8=>u$OA4$/59$7$/$"$j$^$;$s!#(BApache 1.2 $B$G!"(B - DNS $B$N%$%Y%s%H$,<:GT$7$F$b>/$J$/$H$b5/F0%W%m%;%9$,B3$/$h$&$K$7$^$7$?$,!"(B - $B$3$l$,:G9b$N2r7hJ}K!$G$O$J$$$G$7$g$&!#%"%I%l%9$N:F3d$jEv$F$,I,MWIT2DHr(B - $B$H$J$C$F$$$k:#F|$N%$%s%?!<%M%C%H$K$*$$$F$O!"(B - $B@_Dj%U%!%$%k$NCf$GL@<(E*$J(B IP $B%"%I%l%9$rMW5a$9$k;EMM$O!"(B - $BA4$/59$7$/$"$j$^$;$s!#(B

    - -

    $BEpMQ$N%5!<%S%9%"%?%C%/$K4X$7$F9T$J$&$Y$-;v$O!"(B - DNS $B=g0z$-$r9T$J$C$FF@$i$l$?%"%I%l%9$KBP$9$k(B DNS - $B5U0z$-$r9T$J$C$F!"Fs$D$NL>A0$rHf3S$9$k$3$H$G$9!#(B - $B$3$NFs$D$,0lCW$7$J$1$l$P%P!<%A%c%k%[%9%H$OL58z$K$J$k$h$&$K$7$^$9!#(B - $B$3$&$9$k$?$a$K$O5U0z$-(B DNS $B$,E,@Z$K@_Dj$5$l$F$$$kI,MW$,$"$j$^$9(B - (FTP $B%5!<%P$d(B TCP $B%i%C%Q!<$N$*$+$2$G!VFs=E5U0z$-!W(BDNS $B$O0lHLE*$K(B - $B$J$C$F$$$^$9$N$G!"4IM} - -

    IP $B%"%I%l%9$,;HMQ$5$l$F$$$J$/$F(B DNS $B$,<:GT$7$?>l9g$O!"(B - $B$I$&$7$F$b%P!<%A%c%k%[%9%H%&%'%V%5!<%P$r?.Mj@-$r3NJ]$7$F(B - $B5/F0$5$;$k$3$H$OIT2DG=$N$h$&$G$9!#(B - $B@_Dj$N0lIt$rL58z$K$9$k$H$$$&$h$&$JItJ,E*$J2r7h$G$O!"(B - $B%5!<%P$,2?$r$9$k$h$&$K$9$k$+$K$b$h$j$^$9$,!"(B - $B$=$N%5!<%P$,5/F0$7$J$$$h$j3Nu67$K$J$k$G$7$g$&!#(B

    - -

    HTTP/1.1 $B$,3+H/$5$l!"%V%i%&%6$d%W%m%-%7$,(B Host - $B%X%C%@$rH/9T$9$k$h$&$K$J$C$?$N$G!"(BIP $B%Y!<%9$N%P!<%A%c%k%[%9%H$r(B - $BA4$/;HMQ$7$J$/$F$b:Q$`$h$&$K$J$k$+$b$7$l$^$;$s!#(B - $B$3$N>l9g!"%&%'%V%5!<%P$O@_DjCf$K(B DNS $B;2>H$r$7$J$/$F$b:Q$_$^$9!#(B - $B$7$+$7(B 1997 $BG/(B 3 $B7n;~E@$N>u67$G$O!"(B - $B>&MQ%l%Y%k$N%&%'%V%5!<%P$G;HMQ$G$-$k$[$I$K$O!"(B - $B$3$l$i$N5!G=$O9-$/3+H/$,?J$s$G$$$^$;$s!#(B

    + 付録: 将来的な方向性 + +

    DNS に関して、現状は全く宜しくありません。Apache 1.2 で、 + DNS のイベントが失敗しても少なくとも起動プロセスが続くようにしましたが、 + これが最高の解決方法ではないでしょう。アドレスの再割り当てが必要不可避 + となっている今日のインターネットにおいては、 + 設定ファイルの中で明示的な IP アドレスを要求する仕様は、 + 全く宜しくありません。

    + +

    盗用のサービスアタックに関して行なうべき事は、 + DNS 順引きを行なって得られたアドレスに対する DNS + 逆引きを行なって、二つの名前を比較することです。 + この二つが一致しなければバーチャルホストは無効になるようにします。 + こうするためには逆引き DNS が適切に設定されている必要があります + (FTP サーバや TCP ラッパーのおかげで「二重逆引き」DNS は一般的に + なっていますので、管理者にはお馴染みものでしょう)。

    + +

    IP アドレスが使用されていなくて DNS が失敗した場合は、 + どうしてもバーチャルホストウェブサーバを信頼性を確保して + 起動させることは不可能のようです。 + 設定の一部を無効にするというような部分的な解決では、 + サーバが何をするようにするかにもよりますが、 + そのサーバが起動しないより確実に悪い状況になるでしょう。

    + +

    HTTP/1.1 が開発され、ブラウザやプロキシが Host + ヘッダを発行するようになったので、IP ベースのバーチャルホストを + 全く使用しなくても済むようになるかもしれません。 + この場合、ウェブサーバは設定中に DNS 参照をしなくても済みます。 + しかし 1997 年 3 月時点の状況では、 + 商用レベルのウェブサーバで使用できるほどには、 + これらの機能は広く開発が進んでいません。

    diff --git a/docs/manual/dso.xml.ja b/docs/manual/dso.xml.ja index e4271c3ee4..32bd4ef751 100644 --- a/docs/manual/dso.xml.ja +++ b/docs/manual/dso.xml.ja @@ -1,4 +1,4 @@ - + @@ -22,25 +22,25 @@ - $BF0E*6&M-%*%V%8%'%/%H(B (DSO) $B%5%]!<%H(B + 動的共有オブジェクト (DSO) サポート -

    Apache HTTP $B%5!<%P$O%b%8%e!<%k2=$5$l$?%W%m%0%i%`$G!"(B - $B4IM}httpd $B%P%$%J%j$K(B - $B@EE*$KAH$_9~$`$3$H$,$G$-$^$9!#$b$7$/$O!"(Bhttpd $B%P%$%J%j$H$O(B - $BJL$KB8:_$9$kF0E*6&M-%*%V%8%'%/%H(B ($BLuCm(B: Dynamic Shared Object) - (DSO) $B$H$7$F%3%s%Q%$%k$9$k$3$H$b(B - $B$G$-$^$9!#(BDSO $B%b%8%e!<%k$O%5!<%P$,%S%k%I$5$l$k$H$-$K%3%s%Q%$%k$7$?$j!"(B - Apache $B3HD%%D!<%k(B (apxs) $B$r(B - $B;H$C$F8e$G%3%s%Q%$%k$7$FDI2C$7$?$j$G$-$^$9!#(B

    - -

    $B$3$NJ8=q$O(B DSO $B%b%8%e!<%k$N;H$$J}$H!";EAH$_$K$D$$$F(B - $B@bL@$7$^$9!#(B

    +

    Apache HTTP サーバはモジュール化されたプログラムで、 + 管理者がモジュールを選択することでサーバに組み込む機能を選ぶことができます。 + モジュールはサーバがビルドされるときに httpd バイナリに + 静的に組み込むことができます。もしくは、httpd バイナリとは + 別に存在する動的共有オブジェクト (訳注: Dynamic Shared Object) + (DSO) としてコンパイルすることも + できます。DSO モジュールはサーバがビルドされるときにコンパイルしたり、 + Apache 拡張ツール (apxs) を + 使って後でコンパイルして追加したりできます。

    + +

    この文書は DSO モジュールの使い方と、仕組みについて + 説明します。

    -
    $B<BAu(B +
    実装 @@ -51,44 +51,44 @@ -

    $B8D!9$N(B Apache $B%b%8%e!<%k$r%m!<%I$9$k$?$a$N(B DSO $B%5%]!<%H$O(B - mod_so.c $B$H$$$&%b%8%e!<%k$N5!G=$K4p$E$$$F$$$^$9!#(B - $B$3$N%b%8%e!<%k(B $B$O(B Apache $B$N%3%"$K@EE*$KAH$_9~$^$l$F$$$kI,MW$,$"$j$^$9!#(B - $B$=$l$O(B core.c $B0J30$G$O(B DSO $B$K$G$-$J$$M#0l$N(B - $B%b%8%e!<%k$G$9!#;ve!"B>$N$9$Y$F$N(B Apache $B$N%b%8%e!<%k$O!"(B - $B%$%s%9%H!<%k$NJ8=q(B$B$G@bL@$5$l$F$$$k$h$&$K!"(B - configure $B$N(B - --enable-module=shared $B%*%W%7%g%s$G$=$l$>$l$r(B - DSO $B%S%k%I$K$9$k$3$H$K$h$j!"(BDSO $B%b%8%e!<%k$K$9$k$3$H$,$G$-$^$9!#(B - mod_foo.so $B$N$h$&$J(B DSO $B$K%b%8%e!<%k$,%3%s%Q%$%k$5$l$l$P!"(B - httpd.conf $B%U%!%$%kCf$G(B mod_so $B$N(B +

    個々の Apache モジュールをロードするための DSO サポートは + mod_so.c というモジュールの機能に基づいています。 + このモジュール は Apache のコアに静的に組み込まれている必要があります。 + それは core.c 以外では DSO にできない唯一の + モジュールです。事実上、他のすべての Apache のモジュールは、 + インストールの文書で説明されているように、 + configure の + --enable-module=shared オプションでそれぞれを + DSO ビルドにすることにより、DSO モジュールにすることができます。 + mod_foo.so のような DSO にモジュールがコンパイルされれば、 + httpd.conf ファイル中で mod_so の LoadModule - $B%G%#%l%/%F%#%V$r;H$&$3$H$G%5!<%P$N5/F0$d:F5/F0;~$K$3$N%b%8%e!<%k$r(B - $B%m!<%I$9$k$h$&$K$G$-$^$9!#(B

    - -

    Apache $B%b%8%e!<%kMQ$N(B ($BFC$K%5!<%I%Q!<%F%#%b%8%e!<%k$N(B) DSO $B%U%!%$%k$N(B - $B:n@.$r4JC1$K$9$k$?$a$K!"(Bapxs - (APache eXtenSion) $B$H$$$&?7$7$$%5%]!<%H%W%m%0%i%`$,$"$j$^$9!#(B - Apache $B$N%=!<%9%D%j!<$N(B$B30$G(B DSO $B%b%8%e!<%k$r%S%k%I$9$k$?$a$K(B - $B;H$&$3$H$,$G$-$^$9!#H/A[$OC1=c$G$9(B: Apache $B$N%$%s%9%H!<%k;~$N(B - configure$B!"(Bmake install $B$N$H$-$K(B Apache $B$N(B - C $B%X%C%@$r%$%s%9%H!<%k$7!"(BDSO $B%S%k%IMQ$N%W%i%C%H%U%)!<%`0MB8$N(B - $B%3%s%Q%$%i$H%j%s%+$N%U%i%0$r(B apxs $B%W%m%0%i%`$KDI2C$7$^$9!#(B - $B$3$l$K$h$j!"%f!<%6$,(B Apache $B$NG[I[%=!<%9%D%j!<$J$7$G!"$5$i$K(B - DSO $B%5%]!<%H$N$?$a$N%W%i%C%H%U%)!<%`0MB8$N%3%s%Q%$%i$d%j%s%+$N(B - $B%U%i%0$r$$$8$k$3$H$J$/(B Apache $B$N%b%8%e!<%k$N%=!<%9$r%3%s%Q%$%k(B - $B$G$-$k$h$&$K$J$j$^$9!#(B

    + ディレクティブを使うことでサーバの起動や再起動時にこのモジュールを + ロードするようにできます。

    + +

    Apache モジュール用の (特にサードパーティモジュールの) DSO ファイルの + 作成を簡単にするために、apxs + (APache eXtenSion) という新しいサポートプログラムがあります。 + Apache のソースツリーの外で DSO モジュールをビルドするために + 使うことができます。発想は単純です: Apache のインストール時の + configure、make install のときに Apache の + C ヘッダをインストールし、DSO ビルド用のプラットフォーム依存の + コンパイラとリンカのフラグを apxs プログラムに追加します。 + これにより、ユーザが Apache の配布ソースツリーなしで、さらに + DSO サポートのためのプラットフォーム依存のコンパイラやリンカの + フラグをいじることなく Apache のモジュールのソースをコンパイル + できるようになります。

    -
    $B;HMQK!$N35MW(B +
    使用法の概要 -

    Apache 2.2 $B$N(B DSO $B5!G=$N35N,$rCN$k$3$H$,$G$-$k$?$a$N!"(B - $BC;$/4J7i$J35MW$G$9(B:

    +

    Apache 2.2 の DSO 機能の概略を知ることができるための、 + 短く簡潔な概要です:

    1. - $BG[I[$5$l$F$$$k(B Apache $B%b%8%e!<%k!"2>$K(B mod_foo.c - $B$H$7$F!"$=$l$r(B DSO mod_foo.so $B$K%S%k%I!"%$%s%9%H!<%k(B: + 配布されている Apache モジュール、仮に mod_foo.c + として、それを DSO mod_foo.so にビルド、インストール: $ ./configure --prefix=/path/to/install --enable-foo=shared
      @@ -97,8 +97,8 @@ $ make install
    2. - $B%5!<%I%Q!<%F%#(B Apache $B%b%8%e!<%k!"2>$K(B mod_foo.c - $B$H$7$F!"$=$l$r(B DSO mod_foo.so $B$K%S%k%I!"%$%s%9%H!<%k(B: + サードパーティ Apache モジュール、仮に mod_foo.c + として、それを DSO mod_foo.so にビルド、インストール: $ ./configure --add-module=module_type:/path/to/3rdparty/mod_foo.c \
      @@ -110,8 +110,8 @@ $ make install
    3. - $B6&M-%b%8%e!<%k$N(B $B8e!9$N%$%s%9%H!<%k(B $B$N$?$a$K(B - Apache $B$r@_Dj(B: + 共有モジュールの 後々のインストール のために + Apache を設定: $ ./configure --enable-so
      @@ -120,9 +120,9 @@ $ make install
    4. - $B%5!<%I%Q!<%F%#(B Apache $B%b%8%e!<%k!"2>$K(B mod_foo.c - $B$H$7$F!"$=$l$r(B apxs $B$r;H$C$F(B - Apache $B%=!<%9%D%j!<$N(B$B30$G(B DSO $B$K%S%k%I!"%$%s%9%H!<%k(B: + サードパーティ Apache モジュール、仮に mod_foo.c + として、それを apxs を使って + Apache ソースツリーの外で DSO にビルド、インストール: $ cd /path/to/3rdparty
      @@ -132,161 +132,161 @@ $ apxs -i -a -n foo mod_foo.la
    -

    $B$I$N>l9g$K$*$$$F$b!"6&M-%b%8%e!<%k$r%3%s%Q%$%k$7$?8e$G!"(B - httpd.conf $B$G(B +

    どの場合においても、共有モジュールをコンパイルした後で、 + httpd.conf で LoadModule - $B%G%#%l%/%F%#%V$r;H$C$F(B Apache $B$,%b%8%e!<%k$r;HMQ$9$k$h$&$K(B - $B$7$J$1$l$P$J$j$^$;$s!#(B

    + ディレクティブを使って Apache がモジュールを使用するように + しなければなりません。

    -
    $BGX7J(B - -

    $B:G6a$N(B Unix $B7O$N(B OS $B$K$O(B $BF0E*6&M-%*%V%8%'%/%H(B (DSO) - $B$NF0E*%j%s%/(B/$B%m!<%I$H$$$&5$$N$-$$$?5!9=$,(B - $BB8:_$7$^$9!#$3$l$O!" - -

    $B$3$N%m!<%I$OFs$D$NJ}K!$G9T$J$&$3$H$,$G$-$^$9(B: $Bld.so $B$H$$$&%7%9%F%`%W%m%0%i%`(B - $B$K$h$j<+F0E*$K9T$J$o$l$kJ}K!$H!"dlopen()/dlsym() $B$K$h$k(B Unix $B%m!<%@$X$N(B - $B%W%m%0%i%`%7%9%F%`$N%$%s%?%U%'!<%9$r;H$C$F - -

    $B:G=i$NJ}K!$G$O(B DSO $B$OIaDL$O(B$B6&M-%i%$%V%i%j(B$B$d(B DSO - $B%i%$%V%i%j(B $B$H8F$P$l$F$$$F!"(BDSO $B$NL>A0$O(B - libfoo.so $B$d(B libfoo.so.1.2 $B$N$h$&$K$J$C$F$$$^$9!#(B - $B$3$l$i$O%7%9%F%`%G%#%l%/%H%j(B ($BDL>o(B /usr/lib) $B$KB8:_$7!"(B - $B-lfoo $B$r%j%s%+$K(B - $B;XDj$9$k$3$H$G3NN)$5$l$^$9!#$3$l$K$h$j%i%$%V%i%j$X$N;2>H$,/usr/lib $B$d!"(B - $B%j%s%+$N(B -R $B$N$h$&$J%*%W%7%g%s$K$h$j%O!<%I%3!<%I$5$l$?%Q%9!"(B - $B4D6-JQ?t(B LD_LIBRARY_PATH $B$K$h$j@_Dj$5$l$?%Q%9!"$NCf$+$i(B - libfoo.so $B$N>l=j$r8+$D$1$k$3$H$,$G$-$^$9!#$=$l$+$i!"(B - $B - -

    $BIaDL$OH$5$l$^$;$s(B - (DSO $B$O0lHLE*$J%3!<%I$K$h$k:FMxMQ2DG=$J%i%$%V%i%j$G$9$N$G(B)$B!#(B - $B$G$9$+$i!"$5$i$J$k%7%s%\%k$N2r7h$OI,MW$"$j$^$;$s!#(B - $B%7%s%\%k$O(B Unix $B%m!<%@$K$h$j40A4$J2r7h$,9T$J$o$l$^$9$N$G!"ld.so $B$r5/F0$9$k%3!<%I$,4^$^$l$F$$$^$9(B)$B!#$h$/;H$o$l$k(B - $B%i%$%V%i%j$NF0E*%m!<%I$NMxE@$OL@$i$+$G$9!#%i%$%V%i%j$N%3!<%I$O(B - $B%7%9%F%`%i%$%V%i%j$K(B libc.so $B$N$h$&$K$7$F0lEYJ]B8$9$k$@$1$G$h$/!"(B - $B%W%m%0%i%`$N$?$a$KI,MW$J%G%#%9%/$NNN0h$r@aLs$9$k$3$H$,$G$-$^$9!#(B

    - -

    $BFs$D$a$NJ}K!$G$O(B DSO $B$OIaDL$O(B$B6&M-%*%V%8%'%/%H(B$B$d(B - DSO $B%U%!%$%k(B$B$H8F$P$l$F$$$F!"G$0U$N3HD%;R$rIU$1$k$3$H$,$G$-$^$9(B - ($B$?$@$7!"I8=`E*$JL>A0$O(B foo.so $B$G$9(B)$B!#(B - $B$3$l$i$N%U%!%$%k$ODL>o$O%W%m%0%i%`@lMQ$N%G%#%l%/%H%j$KCV$+$l!"(B - $B$3$l$i$r;H$&dlopen() $B$r;H$C$F(B - $Blibc.so $B$N$9$Y$F$N%7%s%\%k(B) $B$G<+F0E*$K2r7h$7$^$9!#(B - $B$3$&$9$k$3$H$G!"(BDSO $B$O:G=i$+$i@EE*$K%j%s%/$5$l$F$$$?$+$N$h$&$K!"(B - $B - -

    $B:G8e$K!"(BDSO $B$N(B API $B$rMxE@$r@8$+$9$?$a$K!"%W%m%0%i%`$O(B - $B8e$G%G%#%9%Q%C%A%F!<%V%k(B$B$J$I(B$B$G%7%s%\%k$r;H$&$3$H$,$G$-$k$h$&$K!"(B - dlsym() $B$r;H$C$F$$$/$D$+$N%7%s%\%k$r2r7h$7$^$9!#(B - $B$9$J$o$A(B: $BCHq$7$J$$(B) - $B$3$H$G$9!#I,MW$J$i$P!"4pK\%W%m%0%i%`$N5!G=$r3HD%$9$k$?$a$K(B - $B$3$l$i$NItJ,$rF0E*$K%m!<%I$9$k$3$H$,$G$-$^$9!#(B

    - -

    $B$3$N(B DSO $B5!9=$O4JC1$J$h$&$K8+$($^$9$,!">/$J$/$H$b0l$DFq$7$$E@$,(B - $B$"$j$^$9(B: $B%W%m%0%i%`$r3HD%$9$k$?$a$K(B DSO $B$r;H$C$F$$$k$H$-$K!"(B - DSO $B$, - -

    $B6&M-%i%$%V%i%j$N%"%W%m!<%A$,IaDL$NJ}K!$G$9!#(BDSO $B5!9=$O$=$N$?$a$K(B - $B@_7W$5$l$?$b$N$G$9$+$i!#$7$?$,$C$F!"$=$NJ}K!$O%*%Z%l!<%F%#%s%0%7%9%F%`$,(B - $BDs6!$9$k$[$H$s$I$9$Y$F$N - -

    1998 $BG/$N;~E@$G!"/$7$@$1$G$7$?(B: Perl 5 (XS $B5!9=$H(B DnaLoader $B%b%8%e!<%k(B - $B$K$h$k$b$N(B)$B!"(BNetscape $B%5!<%P(B$B$J$I(B$B$G$9!#(BApache $B$O$9$G$K(B - $B%b%8%e!<%k$N35G0$r;H$C$F5!G=3HD%$r$7$F$$$F!"FbItE*$K%G%#%9%Q%C%A%j%9%H$K(B - $B4p$E$$$?30It%b%8%e!<%k$N(B Apache $B%3%"5!G=$X$N%j%s%/$r9T$J$C$F$$$^$7$?$N$G!"(B - $B%P!<%8%g%s(B 1.3 $B$+$i!"(BApache $B$b(B DSO $B5!9=$r;H$&Cg4V$K$J$j$^$7$?!#(B - Apache $B$O +

    背景 + +

    最近の Unix 系の OS には 動的共有オブジェクト (DSO) + の動的リンク/ロードという気のきいた機構が + 存在します。これは、実行時にプログラムのアドレス空間に + ロードできるような特別な形式でプログラムをビルドすることを + 可能にします。

    + +

    このロードは二つの方法で行なうことができます: 実行プログラムが + 起動されたときに ld.so というシステムプログラム + により自動的に行なわれる方法と、実行プログラム中から、システムコール + dlopen()/dlsym() による Unix ローダへの + プログラムシステムのインタフェースを使って手動で行なう方法とが + あります。

    + +

    最初の方法では DSO は普通は共有ライブラリや DSO + ライブラリ と呼ばれていて、DSO の名前は + libfoo.so や libfoo.so.1.2 のようになっています。 + これらはシステムディレクトリ (通常 /usr/lib) に存在し、 + 実行プログラムへのリンクはビルド時に -lfoo をリンカに + 指定することで確立されます。これによりライブラリへの参照が実行プログラムの + ファイルに書き込まれて、起動時に Unix のローダが /usr/lib や、 + リンカの -R のようなオプションによりハードコードされたパス、 + 環境変数 LD_LIBRARY_PATH により設定されたパス、の中から + libfoo.so の場所を見つけることができます。それから、 + 実行プログラム中の (まだ未解決の) シンボルを DSO にあるシンボルで + 解決します。

    + +

    普通は実行プログラム中のシンボルは DSO からは参照されません + (DSO は一般的なコードによる再利用可能なライブラリですので)。 + ですから、さらなるシンボルの解決は必要ありません。 + シンボルは Unix ローダにより完全な解決が行なわれますので、実行ファイル自身は + 何もする必要がありません。(実際のところ、静的でない方法でリンクされている + すべての実行プログラムに組み込まれている開始用のコードの一部に + ld.so を起動するコードが含まれています)。よく使われる + ライブラリの動的ロードの利点は明らかです。ライブラリのコードは + システムライブラリに libc.so のようにして一度保存するだけでよく、 + プログラムのために必要なディスクの領域を節約することができます。

    + +

    二つめの方法では DSO は普通は共有オブジェクトや + DSO ファイルと呼ばれていて、任意の拡張子を付けることができます + (ただし、標準的な名前は foo.so です)。 + これらのファイルは通常はプログラム専用のディレクトリに置かれ、 + これらを使う実行プログラムへのリンクは自動的にはされません。 + ですので、実行プログラムは dlopen() を使って + 実行時に手動で DSO をプログラムのアドレス空間にロードする必要があります。 + この時点では実行プログラムに対して DSO のシンボルの解決は行なわれません。 + しかし、その代わりに Unix のローダが DSO の (まだ未解決の) シンボルを + 実行プログラムによりエクスポートされたシンボルと既にロードされた + DSO ライブラリによりエクスポートされたシンボル (特に、どこにでもある + libc.so のすべてのシンボル) で自動的に解決します。 + こうすることで、DSO は最初から静的にリンクされていたかのように、 + 実行プログラムのシンボルを知ることができます。

    + +

    最後に、DSO の API を利点を生かすために、プログラムは + 後でディスパッチテーブルなどでシンボルを使うことができるように、 + dlsym() を使っていくつかのシンボルを解決します。 + すなわち: 実行プログラムは必要なすべてのシンボルを手動で解決しなければ + なりません。この機構の利点はプログラムのオプショナルな部分は + 必要になるまでロードする必要がない (だからメモリも消費しない) + ことです。必要ならば、基本プログラムの機能を拡張するために + これらの部分を動的にロードすることができます。

    + +

    この DSO 機構は簡単なように見えますが、少なくとも一つ難しい点が + あります: プログラムを拡張するために DSO を使っているときに、 + DSO が実行プログラムからシンボルを解決する点です (二番目の方法)。 + これはなぜでしょうか。それは、DSO のシンボルを実行プログラムの + シンボルから「逆解決」するというのはライブラリの設計 + (ライブラリはそれを使用するプログラムのことは何も + 知らない) に反していて、この機能はすべてのプラットフォームに + あるわけではなく、標準化もされていないからです。 + 実際には実行プログラムのグローバルなシンボルは再エクスポートされることは + あまりなく、DSO から使うことができません。リンカにグローバルシンボルすべてを + エクスポートするようにさせる方法を見つけることが、実行時にプログラムを + 拡張するために DSO を使うときの一番の問題です。

    + +

    共有ライブラリのアプローチが普通の方法です。DSO 機構はそのために + 設計されたものですから。したがって、その方法はオペレーティングシステムが + 提供するほとんどすべての種類のライブラリで使われています。 + 一方、プログラムの拡張のために共有オブジェクトを使用する、という方は + あまり使われていません。

    + +

    1998 年の時点で、実行時に実際に機能拡張のために DSO 機構を使っている + ソフトウェアパッケージは少しだけでした: Perl 5 (XS 機構と DnaLoader モジュール + によるもの)、Netscape サーバなどです。Apache はすでに + モジュールの概念を使って機能拡張をしていて、内部的にディスパッチリストに + 基づいた外部モジュールの Apache コア機能へのリンクを行なっていましたので、 + バージョン 1.3 から、Apache も DSO 機構を使う仲間になりました。 + Apache は実行時に DSO を使ってモジュールをロードするようにすでに + 運命付けられていたのです。

    -
    $BMxE@$H7gE@(B +
    利点と欠点 -

    $B>e5-$N(B DSO $B$K4p$E$$$?5!G=$O0J2<$NMxE@$,$"$j$^$9(B:

    +

    上記の DSO に基づいた機能は以下の利点があります:

      -
    • $Bconfigure $B$N%*%W%7%g%s$r;H$&Be$o$j$K(B - $Bhttpd.conf $B$N@_DjMQ%3%^%s%I(B +
    • 実際のサーバプロセスを組み立てるために、 + ビルド時に configure のオプションを使う代わりに + 実行時に httpd.conf の設定用コマンド LoadModule - $B$r;H$&$3$H$,$G$-$^$9$N$G!"%5!<%P%Q%C%1!<%8$N=@Fp@-$,9b$^$j$^$7$?!#(B - $B$?$H$($P!"0l$D$N(B Apache $B$N%$%s%9%H!<%k$+$i(B - $B0c$&9=@.$N%5!<%P(B ($BI8=`HG$H(B SSL $BHG!":G>.9=@.$H3HD%HG(B [mod_perl, PHP3] - $B$J$I(B) $B$r - -
    • $B%$%s%9%H!<%k$N8e$G$"$C$F$b!"%5!<%P$N%Q%C%1!<%8$r%5!<%I%Q!<%F%#(B - $B%b%8%e!<%k$G4JC1$K3HD%$G$-$k$h$&$K$J$j$^$7$?!#$3$l$O!"(BApache $B%3%"(B - $B%Q%C%1!<%8$H!"(BPHP3, mod_perl, mod_fastcgi $B$J$I(B $B$NDI2C$N(B - $B%Q%C%1!<%8$r:n@.$G$-$k$N$G!">/$J$/$H$b%Y%s%@$N%Q%C%1!<%84IM} - -
    • Apache $B%b%8%e!<%k$N3+H/$,4JC1$K$J$j$^$9!#(B - $B$3$l$O(B DSO $B$H(B apxs $B$NAH$_9g$o$;$K$h$j!"(BApache $B%=!<%9%D%j!<$N(B - $B30$G:n6H$G$-!"3+H/Cf$N%b%8%e!<%k$N?7$7$$%P!<%8%g%s$r(B - $Bapxs -i $B$H(B - apachectl restart $B$r9T$J$&$@$1$GNI$/$J$k$+$i$G$9!#(B
    • + を使うことができますので、サーバパッケージの柔軟性が高まりました。 + たとえば、一つの Apache のインストールから + 違う構成のサーバ (標準版と SSL 版、最小構成と拡張版 [mod_perl, PHP3] + など) を実行することができます。 + +
    • インストールの後であっても、サーバのパッケージをサードパーティ + モジュールで簡単に拡張できるようになりました。これは、Apache コア + パッケージと、PHP3, mod_perl, mod_fastcgi など の追加の + パッケージを作成できるので、少なくともベンダのパッケージ管理者にとって + 大きな利点があります。
    • + +
    • Apache モジュールの開発が簡単になります。 + これは DSO と apxs の組み合わせにより、Apache ソースツリーの + 外で作業でき、開発中のモジュールの新しいバージョンを + 実行中の Apache サーバに組み込むために apxs -i と + apachectl restart を行なうだけで良くなるからです。
    -

    DSO $B$K$O0J2<$N7gE@$,$"$j$^$9(B:

    +

    DSO には以下の欠点があります:

      -
    • $B$9$Y$F$N%*%Z%l!<%F%#%s%0%7%9%F%`$,%W%m%0%i%`$N%"%I%l%96u4V$K(B - $B%3!<%I$rF0E*%m!<%I$9$k$3$H$r%5%]!<%H$7$F$$$k$o$G$O$J$$$N$G!"(B - $B%W%i%C%H%U%)!<%`$K$h$C$F$O(B DSO $B5!9=$O;H$($^$;$s!#(B
    • - -
    • Unix $B$N%m!<%@$,%7%s%\%k$N2r7h$r$9$kI,MW$,$G$-$?$N$G!"(B - $B$=$N%*!<%P%X%C%I$K$h$j%5!<%P$N5/F0;~4V$,Ls(B 20% $BCY$/$J$C$F$$$^$9!#(B
    • - -
    • $B0LCVHs0MB8%3!<%I(B (PIC) ($BLuCm(B position independent code) $B$O(B - $BAjBP%"%I%l%9$N$?$a$KJ#;($J%"%;%s%V%i$N%H%j%C%/$,I,MW$J$3$H$,$"$j!"(B - $B$=$l$OI,$:$7$b@dBP%"%I%l%9$HF1$8$/$i$$$NB.EY$,$G$k$o$1$G$O$"$j$^$;$s$N$G!"(B - $B%W%i%C%H%U%)!<%`$K$h$C$F$O%5!<%P$N - -
    • DSO $B%b%8%e!<%k$O$9$Y$F$N%W%i%C%H%U%)!<%`$GB>$N(B DSO $B$K4p$E$$$?(B - $B%i%$%V%i%j$KBP$7$F%j%s%/$G$-$k(B (ld -lfoo) - $B$H$$$&$o$1$G$O$"$j$^$;$s$N$G(B ($B$?$H$($P!"(Ba.out $B$N%W%i%C%H%U%)!<%`$G$O(B - $B$3$N5!G=$O$"$j$^$;$s$,!"(BELF $B$N%W%i%C%H%U%)!<%`$K$O$"$j$^$9(B)$B!"(B - $B$9$Y$F$Nlibc) $B$H(B - Apache $B%3%"$,;H$C$F$$$kB>$N$9$Y$F$N@EE*$J%i%$%V%i%j$HF0E*%i%$%V%i%j$N(B - $B%7%s%\%k!"(BPIC $B$K$h$k@EE*$J%i%$%V%i%j(B (libfoo.a) $B$N(B - $B%7%s%\%k$N$_$K@)8B$5$l$^$9!#$=$NB>$N%3!<%I$r;H$&J}K!$O!"(B - Apache $B%3%"<+?H$,$9$G$K$=$N%3!<%I$X$N;2>H$,$"$k$h$&$K$9$k$+!"(B - dlopen () $B$r;H$C$F%3!<%I$r<+J,<+?H$G%m!<%I$9$k$+$N(B - $B$I$A$i$+$7$+$"$j$^$;$s!#(B
    • +
    • すべてのオペレーティングシステムがプログラムのアドレス空間に + コードを動的ロードすることをサポートしているわではないので、 + プラットフォームによっては DSO 機構は使えません。
    • + +
    • Unix のローダがシンボルの解決をする必要ができたので、 + そのオーバヘッドによりサーバの起動時間が約 20% 遅くなっています。
    • + +
    • 位置非依存コード (PIC) (訳注 position independent code) は + 相対アドレスのために複雑なアセンブラのトリックが必要なことがあり、 + それは必ずしも絶対アドレスと同じくらいの速度がでるわけではありませんので、 + プラットフォームによってはサーバの実行速度が約 5% 遅くなります。
    • + +
    • DSO モジュールはすべてのプラットフォームで他の DSO に基づいた + ライブラリに対してリンクできる (ld -lfoo) + というわけではありませんので (たとえば、a.out のプラットフォームでは + この機能はありませんが、ELF のプラットフォームにはあります)、 + すべての種類のモジュールに DSO 機構を使えるわけではありません。 + 言い換えると、DSO ファイルとしてコンパイルされたモジュールの + 使えるシンボルは、 + Apache のコアのシンボル、C ライブラリ (libc) と + Apache コアが使っている他のすべての静的なライブラリと動的ライブラリの + シンボル、PIC による静的なライブラリ (libfoo.a) の + シンボルのみに制限されます。その他のコードを使う方法は、 + Apache コア自身がすでにそのコードへの参照があるようにするか、 + dlopen () を使ってコードを自分自身でロードするかの + どちらかしかありません。
    diff --git a/docs/manual/env.xml.ja b/docs/manual/env.xml.ja index 29429b3cf9..e9347b8fea 100644 --- a/docs/manual/env.xml.ja +++ b/docs/manual/env.xml.ja @@ -1,4 +1,4 @@ - + @@ -22,28 +22,28 @@ - Apache $B$N4D6-JQ?t(B + Apache の環境変数 -

    Apache HTTP $B%5!<%P$O(B$B4D6-JQ?t(B$B$H8F$P$l$k!"L>A0$N$D$$$?(B - $BJQ?t$K>pJs$r5-21$9$k;EAH$_$rDs6!$7$F$$$^$9!#$3$N>pJs$O%m%0<}=8$d(B - $B%"%/%;%9@)8f$J$I$N$$$m$$$m$JA`:n$r@)8f$9$k$?$a$K;H$&$3$H$,$G$-$^$9!#(B - $B$3$l$i$NJQ?t$O(B CGI $B%9%/%j%W%H$J$I$N30It%W%m%0%i%`$HDL?.$9$k$?$a$K$b(B - $B;H$o$l$^$9!#$3$NJ8=q$O$=$l$i$NJQ?t$NA`:nJ}K!$H;HMQJ}K!$r$$$/$D$+(B - $B>R2p$7$^$9!#(B

    - -

    $B$3$l$i$NJQ?t$O(B$B4D6-JQ?t(B$B$H8F$P$l$F$$$^$9$,!"%*%Z%l!<%F%#%s%0(B - $B%7%9%F%`$K$h$C$F@)8f$5$l$F$$$k4D6-JQ?t$HF1$8$G$O$"$j$^$;$s!#(B - $Bl9g$O!"(B - $B%*%Z%l!<%F%#%s%0%7%9%F%`$N%7%'%k$,Ds6!$7$F$$$kI8=`$N4D6-JQ?t$N(B - $BA`:nJ}K!$r;H$o$J$1$l$P$J$j$^$;$s!#(B

    +

    Apache HTTP サーバは環境変数と呼ばれる、名前のついた + 変数に情報を記憶する仕組みを提供しています。この情報はログ収集や + アクセス制御などのいろいろな操作を制御するために使うことができます。 + これらの変数は CGI スクリプトなどの外部プログラムと通信するためにも + 使われます。この文書はそれらの変数の操作方法と使用方法をいくつか + 紹介します。

    + +

    これらの変数は環境変数と呼ばれていますが、オペレーティング + システムによって制御されている環境変数と同じではありません。 + 実際は、これらの変数は Apache の内部構造の中に記憶され、操作されています。 + それらは、CGI や SSI スクリプトに渡されたときだけ、実際の + オペレーティングシステムの環境変数になります。サーバ自身が + 実行されているオペレーティングシステムの環境を操作したい場合は、 + オペレーティングシステムのシェルが提供している標準の環境変数の + 操作方法を使わなければなりません。

    - $B4D6-JQ?t$N@_Dj(B + 環境変数の設定 mod_env @@ -64,71 +64,71 @@
    - $B4pK\E*$J4D6-$NA`:n(B + 基本的な環境の操作 -

    Apache $B$K$*$$$F4D6-JQ?t$r@_Dj$9$k0lHV4pK\E*$JJ}K!$O!"(B - $BL5>r7o$K4D6-JQ?t$r@_Dj$9$k(B SetEnv $B%G%#%l%/%F%#%V$r;HMQ$9$k$3$H$G$9!#(B +

    Apache において環境変数を設定する一番基本的な方法は、 + 無条件に環境変数を設定する SetEnv ディレクティブを使用することです。 PassEnv - $B%G%#%l%/%F%#%V$K$h$j!"(BApache $B$,5/F0$5$l$?%7%'%k$N(B - $B4D6-JQ?t$rEO$9$3$H$b$G$-$^$9!#(B

    + ディレクティブにより、Apache が起動されたシェルの + 環境変数を渡すこともできます。

    - $B%j%/%(%9%HKh$K>r7o$K4p$E$$$F@_Dj$9$k(B - -

    $B$h$j=@Fp@-$r9b$a$k$?$a$K!"(Bmod_setenvif - $B$GDs6!$5$l$F$$$k%G%#%l%/%F%#%V$r;HMQ$9$k$3$H$G!"%j%/%(%9%H$N(B - $BFC@-$K4p$E$$$F4D6-JQ?t$r@_Dj$9$k$3$H$,$G$-$^$9!#Nc$($P!"FCDj$N%V%i%&%6(B - (User-Agent) $B$N%j%/%(%9%H$dFCDj$N(B Referer [$B0U?^E*$JDV$j$G$9(B] - ($BLuCm(B: $B@5$7$$DV$j$O(B referrer $B$G$9$,!"(BHTTP $B$N;EMM$G$O(B Referer - $B$H$J$C$F$$$^$9(B) $B%X%C%@$,8+$D$+$C$?$H$-$N$_JQ?t$r@_Dj$9$k$3$H$,$G$-$^$9!#(B - mod_rewrite $B$N(B RewriteRule - $B%G%#%l%/%F%#%V$K$*$$$F4D6-JQ?t$r@_Dj$9$k(B [E=...] - $B%*%W%7%g%s$r;HMQ$9$k$3$H$G!"(B - $B$h$j=@Fp$J@_Dj$r9T$J$&$3$H$,$G$-$^$9!#(B

    + リクエスト毎に条件に基づいて設定する + +

    より柔軟性を高めるために、mod_setenvif + で提供されているディレクティブを使用することで、リクエストの + 特性に基づいて環境変数を設定することができます。例えば、特定のブラウザ + (User-Agent) のリクエストや特定の Referer [意図的な綴りです] + (訳注: 正しい綴りは referrer ですが、HTTP の仕様では Referer + となっています) ヘッダが見つかったときのみ変数を設定することができます。 + mod_rewrite の RewriteRule + ディレクティブにおいて環境変数を設定する [E=...] + オプションを使用することで、 + より柔軟な設定を行なうことができます。

    - $B0l0U$J<1JL;R(B + 一意な識別子 -

    mod_unique_id $B$O!"Hs>o$K8B$i$l$?>r7o$N2<$G(B - $B!V$9$Y$F!W$N%j%/%(%9%H$K$D$$$F!"0l0U$G$"$k$3$H$,J]>Z$5$l$F$$$kCM$r4D6-JQ?t(B - UNIQUE_ID $B$K@_Dj$7$^$9!#(B

    +

    mod_unique_id は、非常に限られた条件の下で + 「すべて」のリクエストについて、一意であることが保証されている値を環境変数 + UNIQUE_ID に設定します。

    - $BI8=`(B CGI $BJQ?t(B + 標準 CGI 変数 -

    Apache $B$N@_Dj%U%!%$%k$G@_Dj$5$l$?4D6-JQ?t$H%7%'%k$+$iEO$5$l$k(B - $B4D6-JQ?t$K2C$($F!"(BCGI $B%9%/%j%W%H$H(B SSI $B%Z!<%8$K$O(B CGI $B$N;EMM(B$B$GMW5a$5$l$F$$$k!"(B - $B%j%/%(%9%H$N%a%?>pJs$r;}$C$?4D6-JQ?t$NAH$,Ds6!$5$l$^$9!#(B

    +

    Apache の設定ファイルで設定された環境変数とシェルから渡される + 環境変数に加えて、CGI スクリプトと SSI ページには CGI の仕様で要求されている、 + リクエストのメタ情報を持った環境変数の組が提供されます。

    - $B$$$/$D$+$NCm0U(B + いくつかの注意
      -
    • $B4D6-$rA`:n$9$k%G%#%l%/%F%#%V$r;H$C$FI8=`(B CGI - $BJQ?t$r>e=q$-$7$?$jJQ99$7$?$j$9$k$3$H$O$G$-$^$;$s!#(B
    • - -
    • CGI $B%9%/%j%W%H$r5/F0$9$k$?$a$K(B suexec - $B$,;HMQ$5$l$F$$$k>l9g!"(BCGI $B%9%/%j%W%H$,5/F0$9$k$?$a$K!"4D6-JQ?t$O(B$B0BA4(B$B$J4D6-JQ?t$NAH$K@0M}$5$l$^$9!#(B - $B$3$N0BA4$J4D6-JQ?t$N=89g$O!"%3%s%Q%$%k;~$K(B suexec.c - $B$GDj5A$5$l$^$9!#(B
    • - -
    • $B0\?"@-$N$?$a$K!"4D6-JQ?t$NL>A0$O%"%k%U%!%Y%C%H!"(B - $B?t;z$H%"%s%@!<%9%3%"(B ($BLuCm(B: '_') $B$@$1$+$i@.$j$^$9!#(B - $B$5$i$K!":G=i$NJ8;z$O?t;z$G$"$C$F$O$$$1$^$;$s!#(B - $B$3$N@)8B$K9g$o$J$$J8;z$O(B CGI $B%9%/%j%W%H$H(B SSI - $B%Z!<%8$KEO$5$l$k$H$-$K%"%s%@!<%9%3%"$KCV49$5$l$^$9!#(B
    • +
    • 環境を操作するディレクティブを使って標準 CGI + 変数を上書きしたり変更したりすることはできません。
    • + +
    • CGI スクリプトを起動するために suexec + が使用されている場合、CGI スクリプトが起動するために、環境変数は安全な環境変数の組に整理されます。 + この安全な環境変数の集合は、コンパイル時に suexec.c + で定義されます。
    • + +
    • 移植性のために、環境変数の名前はアルファベット、 + 数字とアンダースコア (訳注: '_') だけから成ります。 + さらに、最初の文字は数字であってはいけません。 + この制限に合わない文字は CGI スクリプトと SSI + ページに渡されるときにアンダースコアに置換されます。
    - $B4D6-JQ?t$N;HMQ(B + 環境変数の使用 @@ -153,168 +153,168 @@
    - CGI $B%9%/%j%W%H(B + CGI スクリプト -

    $B4D6-JQ?t$NpJs$rEA$($k$3$H$G$9!#(B - $B>e$G@bL@$5$l$F$$$k$h$&$K!"(BCGI $B%9%/%j%W%H$KEO$5$l$k4D6-JQ?t$O(B Apache - $B$N@_Dj$K$h$j@_Dj$5$l$kJQ?t$K2C$($F!"%j%/%(%9%H$NI8=`$N%a%?>pJs$r4^$s$G$$$^$9!#(B - $B>\:Y$O(B CGI $B%A%e!<%H%j%"%k(B - $B$r;2>H$7$F$/$@$5$$!#(B

    +

    環境変数の主な利用法の一つは、CGI スクリプトに情報を伝えることです。 + 上で説明されているように、CGI スクリプトに渡される環境変数は Apache + の設定により設定される変数に加えて、リクエストの標準のメタ情報を含んでいます。 + 詳細は CGI チュートリアル + を参照してください。

    - SSI $B%Z!<%8(B + SSI ページ -

    mod_include $B$N(B INCLUDES $B%U%#%k%?$G=hM}$5$l$k(B - server-parsed (SSI) $B%I%-%e%a%s%H$G$O!"(Becho - $BMWAG$r;HMQ$9$k$H4D6-JQ?t$,=PNO$5$l$^$9!#(B - $B$^$?!"%Z!<%8$N$"$kItJ,$,%j%/%(%9%H$N@-\:Y$O(B - SSI $B%A%e!<%H%j%"%k(B $B$r;2>H$7$F$/$@$5$$!#(B

    +

    mod_include の INCLUDES フィルタで処理される + server-parsed (SSI) ドキュメントでは、echo + 要素を使用すると環境変数が出力されます。 + また、ページのある部分がリクエストの性質に応じて変更されるように、 + 環境変数をフロー制御要素で使うことができます。詳細は + SSI チュートリアル を参照してください。

    - $B%"%/%;%9@)8f(B + アクセス制御 -

    allow from env= $B%G%#%l%/%F%#%V$H(B deny from env= - $B%G%#%l%/%F%#%V$r;HMQ$7$F!"%5!<%P$X$N%"%/%;%9$r4D6-JQ?t$NCM$G@)8f$9$k$3$H$,$G$-$^$9!#(B +

    allow from env= ディレクティブと deny from env= + ディレクティブを使用して、サーバへのアクセスを環境変数の値で制御することができます。 SetEnvIf - $B%G%#%l%/%F%#%V$HAH$_9g$o$;$k$3$H$G!"%/%i%$%"%s%H$NFC@-$K4p$E$$$F(B - $B%5!<%P$X$N%"%/%;%9@)8f$r=@Fp$K9T$J$&$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B - $B$?$H$($P!"$3$l$i$N%G%#%l%/%F%#%V$r;HMQ$7$F!"FCDj$N%V%i%&%6(B (User-Agent) - $B$+$i$N%"%/%;%9$r5qH]$9$k$3$H$,$G$-$^$9!#(B

    + ディレクティブと組み合わせることで、クライアントの特性に基づいて + サーバへのアクセス制御を柔軟に行なうことができるようになります。 + たとえば、これらのディレクティブを使用して、特定のブラウザ (User-Agent) + からのアクセスを拒否することができます。

    - $B>r7oIU$-%m%05-O?(B + 条件付きログ記録

    LogFormat - $B%G%#%l%/%F%#%V$N%*%W%7%g%s(B %e - $B$r;HMQ$9$k$3$H$G!"4D6-JQ?t$r%"%/%;%9%m%0$K5-O?$9$k$3$H$,$G$-$^$9!#$5$i$K!"(B + ディレクティブのオプション %e + を使用することで、環境変数をアクセスログに記録することができます。さらに、 CustomLog - $B%G%#%l%/%F%#%V$N>r7oJ,4t<0$r;HMQ$9$k$3$H$G!"(B - $B4D6-JQ?t$NCM$K$h$C$F%j%/%(%9%H$r%m%0$K5-O?$9$k$+$I$&$+$r7h$a$k$3$H$,$G$-$^$9!#(B + ディレクティブの条件分岐式を使用することで、 + 環境変数の値によってリクエストをログに記録するかどうかを決めることができます。 SetEnvIf - $B%G%#%l%/%F%#%V$HAH$_9g$o$;$k$3$H$G!"(B - $B$I$N%j%/%(%9%H$r%m%0$K5-O?$9$k$+$r=@Fp$K@)8f$9$k$3$H$,2DG=$K$J$j$^$9!#$?$H$($P!"(B - gif $B$G=*$o$k%U%!%$%kL>$X$N%j%/%(%9%H$O%m%0$K5-O?$7$J$$!"(B - $B0c$&%5%V%M%C%H$N%/%i%$%"%s%H$+$i$N%j%/%(%9%H$@$1$r%m%0$K5-O?$9$k!"(B - $B$H$$$&A*Br$,2DG=$G$9!#(B

    + ディレクティブと組み合わせることで、 + どのリクエストをログに記録するかを柔軟に制御することが可能になります。たとえば、 + gif で終わるファイル名へのリクエストはログに記録しない、 + 違うサブネットのクライアントからのリクエストだけをログに記録する、 + という選択が可能です。

    - $B>r7oIU$-1~Ez%X%C%@(B + 条件付き応答ヘッダ

    Header - $B%G%#%l%/%F%#%V$O4D6-JQ?t$NB8:_$dIT:_$K$h$C$F%/%i%$%"%s%H$X$N1~Ez$KFCDj$N(B - HTTP $B%X%C%@$rIU$1$k$+$I$&$+$r7h$a$k$3$H$,$G$-$^$9!#(B - $B$3$l$K$h$j!"$?$H$($P!"%/%i%$%"%s%H$+$i$N%j%/%(%9%H(B - $B$K$"$k%X%C%@$,$"$k>l9g$K$N$_FCDj$N1~Ez%X%C%@$rAw$k!"$H$$$&$h$&$J$3$H$,(B - $B$G$-$^$9!#(B

    + ディレクティブは環境変数の存在や不在によってクライアントへの応答に特定の + HTTP ヘッダを付けるかどうかを決めることができます。 + これにより、たとえば、クライアントからのリクエスト + にあるヘッダがある場合にのみ特定の応答ヘッダを送る、というようなことが + できます。

    - $B30It%U%#%k%?$NE,MQ(B + 外部フィルタの適用

    ExtFilterDefine - $B%G%#%l%/%F%#%V$r;HMQ$7$F(B - mod_ext_filter $B$G@_Dj$5$l$k30It%U%#%k%?$O!"(B - disableenv= $B$H(B enableenv= - $B%*%W%7%g%s$r;H$C$F!"4D6-JQ?t$K$h$k>r7oIU$-E,MQ$,$G$-$^$9!#(B

    + ディレクティブを使用して + mod_ext_filter で設定される外部フィルタは、 + disableenv= と enableenv= + オプションを使って、環境変数による条件付き適用ができます。

    - URL $B$N=q$-49$((B + URL の書き換え

    RewriteCond - $B%G%#%l%/%F%#%V$G(B$BI>2AJ8;zNs(B$B$H$7$F(B - %{ENV:...} $B<0$r;XDj$9$k$3$H$G!"(Bmod_rewrite - $B$N=q$-49$(%(%s%8%s$,4D6-JQ?t$K4p$$$F>r7oJ,4t$r9T$J$&$3$H$,$G$-$^$9!#(B - mod_rewrite $B$,;HMQ2DG=$JJQ?t$G(B ENV: $B$,A0$K$D$$$F$$$J$$JQ?t$O!"(B - $B$N%b%8%e!<%k$+$i$O;HMQ$G$-$J$$(B mod_rewrite $BMQ$NFCJL$JJQ?t$G$9!#(B + ディレクティブで評価文字列として + %{ENV:...} 式を指定することで、mod_rewrite + の書き換えエンジンが環境変数に基いて条件分岐を行なうことができます。 + mod_rewrite が使用可能な変数で ENV: が前についていない変数は、 + 実際は環境変数ではないということに注意してください。 + それらは他のモジュールからは使用できない mod_rewrite 用の特別な変数です。

    - $BFCJL$JL\E*$N4D6-JQ?t(B + 特別な目的の環境変数 -

    $B8_49@-$NLdBj$r2r7h$9$k$?$a$K!"FCDj$N%/%i%$%"%s%H$HDL?.$7$F$$$k$H$-$O(B - Apache $B$NF0:n$rJQ99$G$-$k5!9=$,F3F~$5$l$^$7$?!#$G$-$k$@$1=@Fp$K$9$k$?$a$K!"(B - $B$3$l$i$N5!9=$O4D6-JQ?t$rDj5A$9$k$3$H$G8F$S=P$5$l$^$9!#IaDL$O!"(B +

    互換性の問題を解決するために、特定のクライアントと通信しているときは + Apache の動作を変更できる機構が導入されました。できるだけ柔軟にするために、 + これらの機構は環境変数を定義することで呼び出されます。普通は、 BrowserMatch - $B%G%#%l%/%F%#%V$r;H$$$^$9$,!"$?$H$($P(B SetEnv $B%G%#%l%/%F%#%V$d(B PassEnv $B%G%#%l%/%F%#%V$b;HMQ$9$k$3$H$,$G$-$^$9!#(B

    + ディレクティブを使いますが、たとえば SetEnv ディレクティブや PassEnv ディレクティブも使用することができます。

    downgrade-1.0 -

    $B$3$l$r;XDj$9$k$3$H$G!"%j%/%(%9%H$,(B HTTP/1.0 - $B$h$j?7$7$$%W%m%H%3%k$N>l9g$G$b!"(BHTTP/1.0 $B$H$7$F07$o$l$^$9!#(B

    +

    これを指定することで、リクエストが HTTP/1.0 + より新しいプロトコルの場合でも、HTTP/1.0 として扱われます。

    force-gzip -

    DEFLATE $B%U%#%k%?$,;HMQ$9$k$h$&$K@_Dj$5$l$F$$$k$H$-$K!"(B - $B$3$N4D6-JQ?t$O%V%i%&%6$N(B accept-encoding $B$N@_Dj$rL5;k$7$F>o$K(B - $B05=L$5$l$?=PNO$rAw$k$h$&$K$7$^$9!#(B

    +

    DEFLATE フィルタが使用するように設定されているときに、 + この環境変数はブラウザの accept-encoding の設定を無視して常に + 圧縮された出力を送るようにします。

    force-no-vary -

    $B1~Ez%X%C%@$,%/%i%$%"%s%H$KAw$i$l$kA0$K(B Vary - $B%U%#!<%k%I$rforce-response-1.0 - $B$,@_Dj$5$l$?$3$H$K$J$j$^$9!#(B

    +

    応答ヘッダがクライアントに送られる前に Vary + フィールドを取り除きます。 + クライアントの中にはこのフィールドを正しく解釈しないものがあります。 + この変数を設定することでその問題を回避することができます。 + この変数を設定すると、force-response-1.0 + が設定されたことになります。

    force-response-1.0 -

    $B$3$l$,@_Dj$5$l$F$$$k$H!"(BHTTP/1.0 $B%j%/%(%9%H$rH/9T$9$k%/%i%$%"%s%H$KBP$7$F$O(B - $B>o$K(B HTTP/1.0 $B$G1~Ez$9$k$h$&$K$J$j$^$9!#$3$N5!G=$O!"(B - $B85!9$O(B AOL $B$N%W%m%-%7$NLdBj$N$?$a$K +

    これが設定されていると、HTTP/1.0 リクエストを発行するクライアントに対しては + 常に HTTP/1.0 で応答するようになります。この機能は、 + 元々は AOL のプロキシの問題のために実装されました。HTTP/1.0 クライアントの中には、 + HTTP/1.1 の応答を返されると正しく動作しないものがあるかもしれません。 + この機能を使用することで、そのようなクライアントとの間の互換性問題を解決できます。

    gzip-only-text/html -

    $B$3$l$,(B 1 $B$K@_Dj$5$l$k$H!"$3$NJQ?t$O(B text/html - $B0J30$N%3%s%F%s%H%?%$%W$KBP$9$k!"(Bmod_deflate - $BDs6!$N(B DEFLATE $B=PNO%U%#%k%?$rL58z$K$7$^$9!#(B - $B$^$?!"@EE*$K!"4{$K05=L$5$l$?%U%!%$%k$r;HMQ$7$?$$>l9g!"(B - (gzip $B$@$1$G$J$/!"(B"identity" $B$H0[$J$kA4$F$N%(%s%3!<%I$KBP$7$F(B) - mod_negotiation $B$bJQ?t$rI>2A$7$^$9!#(B

    +

    これが 1 に設定されると、この変数は text/html + 以外のコンテントタイプに対する、mod_deflate + 提供の DEFLATE 出力フィルタを無効にします。 + また、静的に、既に圧縮されたファイルを使用したい場合、 + (gzip だけでなく、"identity" と異なる全てのエンコードに対して) + mod_negotiation も変数を評価します。

    no-gzip -

    $B%;%C%H$5$l$k$H!"(Bmod_deflate $B$N(B - DEFLATE $B%U%#%k%?$,%*%U$K$J$j$^$9!#(B - $B$=$7$F(B mod_negotiation - $B$O%(%s%3!<%I$5$l$?%j%=!<%9$rAw$i$J$$$h$&$K$7$^$9!#(B

    +

    セットされると、mod_deflate の + DEFLATE フィルタがオフになります。 + そして mod_negotiation + はエンコードされたリソースを送らないようにします。

    nokeepalive -

    $B$3$l$,@_Dj$5$l$F$$$k>l9g$O!"(BKeepAlive $B$r;HMQ$7$J$$$h$&$K$7$^$9!#(B

    +

    これが設定されている場合は、KeepAlive を使用しないようにします。

    prefer-language -

    mod_negotiation $B$N5sF0$K1F6A$rM?$($^$9!#(B - (en, ja, x-klingon$B$H$$$C$?(B) - $B8@8l%?%0$,3JG<$5$l$F$$$l$P!"$=$N8@8l$N(B variant $B$rAw?.$7$h$&$H$7$^$9!#(B - $B$=$N$h$&$J(B variant $B$,$J$$>l9g$O!"(B - $BDL>o$N(B$B%M%4%7%(!<%7%g%s(B$B=hM}$,(B - $BE,MQ$5$l$^$9!#(B

    +

    mod_negotiation の挙動に影響を与えます。 + (en, ja, x-klingonといった) + 言語タグが格納されていれば、その言語の variant を送信しようとします。 + そのような variant がない場合は、 + 通常のネゴシエーション処理が + 適用されます。

    @@ -322,57 +322,57 @@
    redirect-carefully -

    $B$3$l$O%/%i%$%"%s%H$X$N%j%@%$%l%/%H$NAw?.$r%5!<%P$,$h$jCm0U?<$/(B - $B9T$J$&$h$&$K$7$^$9!#(B - $B$3$l$ODL>o!"%j%@%$%l%/%H$K:]$7$F%/%i%$%"%s%H$K(B - $BLdBj$,$"$k$3$H$,J,$+$C$F$$$k>l9g$K;H$o$l$^$9!#$3$N5!G=$O85!9$O(B - $B%^%$%/%m%=%U%H$N%&%'%V%U%)%k%@$N%=%U%H$,(B DAV - $B%a%=%C%I$K$h$k%G%#%l%/%H%j$N%j%=!<%9$X$N%j%@%$%l%/%H$N07$$$K(B - $BLdBj$,$j!"$=$l$r2sHr$9$k$?$a$K +

    これはクライアントへのリダイレクトの送信をサーバがより注意深く + 行なうようにします。 + これは通常、リダイレクトに際してクライアントに + 問題があることが分かっている場合に使われます。この機能は元々は + マイクロソフトのウェブフォルダのソフトが DAV + メソッドによるディレクトリのリソースへのリダイレクトの扱いに + 問題がり、それを回避するために実装されました。

    suppress-error-charset -

    Apache 2.2 $B0J9_$GMxMQ2DG=(B

    - -

    $B%/%i%$%"%s%H$N%j%/%(%9%H$KBP$9$k1~Ez$H$7$F%j%@%$%l%/%H$rAw?.$9$k:]!"(B - $B%l%9%]%s%9$K$O%j%@%$%l%/%H$,<+F0E*$K9T$J$($J$$(B ($B9T$J$o$l$J$$(B) - $B>l9g$KI=<($9$k%F%-%9%H$,4^$^$l$^$9!#(B - $BDL>o!"$3$N%F%-%9%H$K9gCW$7$?%-%c%i%/%?%;%C%H!"(BISO-8859-1 - $B$G%i%Y%kIU$1$r$7$^$9!#(B

    -

    $B$7$+$7!"%j%@%$%l%/%H@h$,JL$NJ8;z%;%C%H$r;H$C$F$$$k>l9g!"(B - $B$"$kLdBj$N$"$k%V%i%&%6$N%P!<%8%g%s$G$O!"(B - $B%j%@%$%l%/%H@h$N -

    $B$3$N4D6-JQ?t$r@_Dj$9$k$3$H$G!"%j%@%$%l%/%7%g%s%F%-%9%H$KBP$9$k(B - $B%-%c%i%/%?%;%C%H$N;XDj$r=|5n$7$^$9$N$G!"$=$l$iLdBj$N$"$k%V%i%&%6$G$b(B - $B%j%@%$%l%/%H@h$NJ8;z%;%C%H$r@5$7$/;H$&$h$&$K$G$-$^$9!#(B

    +

    Apache 2.2 以降で利用可能

    + +

    クライアントのリクエストに対する応答としてリダイレクトを送信する際、 + レスポンスにはリダイレクトが自動的に行なえない (行なわれない) + 場合に表示するテキストが含まれます。 + 通常、このテキストに合致したキャラクタセット、ISO-8859-1 + でラベル付けをします。

    +

    しかし、リダイレクト先が別の文字セットを使っている場合、 + ある問題のあるブラウザのバージョンでは、 + リダイレクト先の実際の文字セットの代わりに、 + リダイレクト元の文字セットを使ってしまうことがあります。 + その結果、例えば変な描画が行なわれたりして、読めなくなったりします。

    +

    この環境変数を設定することで、リダイレクションテキストに対する + キャラクタセットの指定を除去しますので、それら問題のあるブラウザでも + リダイレクト先の文字セットを正しく使うようにできます。

    force-proxy-request-1.0, proxy-nokeepalive, proxy-sendchunked, proxy-sendcl -

    $B$3$l$i$N;X<(;R$O(B mod_proxy $B$N5sF0$rJQ99$7$^$9!#(B - $B>\:Y$O(B mod_proxy $B$N%I%-%e%a%s%H$r$4;2>H$/$@$5$$!#(B

    +

    これらの指示子は mod_proxy の挙動を変更します。 + 詳細は mod_proxy のドキュメントをご参照ください。

    - $BNc(B + 例
    - $B$*$+$7$J5sF0$r$9$k%/%i%$%"%s%H$KBP$7$F%W%m%H%3%k$NF0:n$rJQ99$9$k(B - -

    $B%/%i%$%"%s%H$K4X$9$k4{CN$NLdBj$KBP=h$9$k$?$a$K!"0J2<$N9T$r(B - httpd.conf $B$KF~$l$k$3$H$r?d>)$7$F$$$^$9!#(B

    -

    $B8E$$%P!<%8%g%s$N(B Apache $B$G$O!"%/%i%$%"%s%H$NLdBj$KBP1~$9$k$?$a$K(B - httpd.conf $B$K)$5$l$F$$$^$7$?$,!"(B - $B:#$H$J$C$F$O!"LdBj$H$7$F$$$?%/%i%$%"%s%H$O + おかしな挙動をするクライアントに対してプロトコルの動作を変更する + +

    クライアントに関する既知の問題に対処するために、以下の行を + httpd.conf に入れることを推奨しています。

    +

    古いバージョンの Apache では、クライアントの問題に対応するために + httpd.conf に次の行を加えるよう推奨されていましたが、 + 今となっては、問題としていたクライアントは実際には見かけることは + なくなってきたので、この設定はもはや必要ないかもしれません。

     #
     # The following directives modify normal HTTP response behavior.
    @@ -396,11 +396,11 @@ BrowserMatch "JDK/1\.0" force-response-1.0
    - $B2hA|$X$N%j%/%(%9%H$r%"%/%;%9%m%0$K5-O?$7$J$$(B + 画像へのリクエストをアクセスログに記録しない -

    $B$3$NNc$G$O!"2hA|$X$N%j%/%(%9%H$,%"%/%;%9%m%0$K8=$l$J$$$h$&$K$7$^$9!#(B - $B$3$l$rJQ99$9$k$3$H$G!"FCDj$N%G%#%l%/%H%j$N%m%0<}=8$r$d$a$?$j!"(B - $BFCDj$N%[%9%H$+$i$N%j%/%(%9%H$N%m%0<}=8$r$d$a$?$j$9$k$3$H$,4JC1$K$G$-$^$9!#(B +

    この例では、画像へのリクエストがアクセスログに現れないようにします。 + これを変更することで、特定のディレクトリのログ収集をやめたり、 + 特定のホストからのリクエストのログ収集をやめたりすることが簡単にできます。

     SetEnvIf Request_URI \.gif image-request
    @@ -410,13 +410,13 @@ CustomLog logs/access_log common env=!image-request
    - $B!V2hA|$NEpMQ!W$rKI$0(B + 「画像の盗用」を防ぐ -

    $B$3$NNc$O!"JL$N%5!<%P$K$$$k?M$,!"$"$J$?$N%5!<%P$K$"$k2hA|$r(B - inline $B2hA|$H$7$F;HMQ$9$k$3$H$rKI$.$^$9!#(B - $B$3$l$O?d>)$5$l$F$$$k@_Dj$G$O$"$j$^$;$s$,!"$"$k8BDj$5$l$?>u67$G$OM-8z$G$9!#(B - $B$3$3$G$O!"$9$Y$F$N2hA|$O(B /web/images - $B$H$$$&%G%#%l%/%H%j$K$"$k$H2>Dj$7$^$9!#(B

    +

    この例は、別のサーバにいる人が、あなたのサーバにある画像を + inline 画像として使用することを防ぎます。 + これは推奨されている設定ではありませんが、ある限定された状況では有効です。 + ここでは、すべての画像は /web/images + というディレクトリにあると仮定します。

     SetEnvIf Referer "^http://www\.example\.com/" local_referal
     # Allow browsers that do not send Referer info
    @@ -427,10 +427,10 @@ SetEnvIf Referer "^$" local_referal
        Allow from env=local_referal
     </Directory>
    -

    $B$3$N\$7$$>pJs$O(B ApacheToday $B$N%A%e!<%H%j%"%k!V(Bこの手法に関する詳しい情報は ApacheToday のチュートリアル「Keeping Your Images from Adorning Other Sites - $B!W$r;2>H$7$F$/$@$5$$!#(B

    + 」を参照してください。

    diff --git a/docs/manual/filter.xml.ja b/docs/manual/filter.xml.ja index 4a97f8e792..edc6bd1992 100644 --- a/docs/manual/filter.xml.ja +++ b/docs/manual/filter.xml.ja @@ -1,4 +1,4 @@ - + @@ -22,14 +22,14 @@ - $B%U%#%k%?(B + フィルタ -

    Apache $B$G$N%U%#%k%?$N;H$$J}$K$D$$$F5-=R$7$F$$$^$9!#(B

    +

    Apache でのフィルタの使い方について記述しています。

    - $B%U%#%k%?(B + フィルタ mod_deflate @@ -48,40 +48,40 @@ -

    $B%U%#%k%?(B $B$H$O!"%5!<%P$,Aw$BF~NO%U%#%k%?(B $B$K$h$C$F!"%5!<%P$+$i(B - $B%/%i%$%"%s%H$KAw$i$l$k%G!<%?$O(B$B=PNO%U%#%k%?(B$B$K$h$C$F(B - $B=hM}$5$l$^$9!#J#?t$N%U%#%k%?$rE,MQ$9$k$3$H$,$G$-!"(B - $B$=$N=gHV$r87L)$K;XDj$9$k$3$H$b$G$-$^$9!#(B

    - -

    Apache $BFbIt$G$O!"%A%c%s%/(B ($B%G!<%?$N$V$D@Z$j(B) $B$r9T$C$?$j!"(B - $B%P%$%HHO0O$N;XDj$5$l$?%j%/%(%9%H$r07$C$?$j$H$$$C$?5!G=$r(B - $B9T$&:]$K!"%U%#%k%?$,;H$o$l$F$$$^$9!#$=$l$K2C$($F!"(B - $Bフィルタ とは、サーバが送受信したデータに + 適用される処理プロセスのことをいいます。クライアントからサーバに + 送られたデータは 入力フィルタ によって、サーバから + クライアントに送られるデータは出力フィルタによって + 処理されます。複数のフィルタを適用することができ、 + その順番を厳密に指定することもできます。

    + +

    Apache 内部では、チャンク (データのぶつ切り) を行ったり、 + バイト範囲の指定されたリクエストを扱ったりといった機能を + 行う際に、フィルタが使われています。それに加えて、 + 実行時の設定ディレクティブで選択が可能なフィルタを + モジュールが提供できます。 + データに適応されるフィルタのセットは、 SetInputFilter, SetOutputFilter, AddInputFilter, AddOutputFilter, RemoveInputFilter, RemoveOutputFilter - $B%G%#%l%/%F%#%V$G@)8f$G$-$^$9!#(B

    + ディレクティブで制御できます。

    -

    $B8=9T$N(B Apache HTTP $B%5!<%P$NG[I[$G$O!"(B - $B +

    現行の Apache HTTP サーバの配布では、 + 次のユーザ選択可能なフィルタが提供されています。

    INCLUDES
    -
    mod_include $B$G(B Server-Side Include $B$r$7$^$9!#(B
    +
    mod_include で Server-Side Include をします。
    DEFLATE
    mod_deflate - $B$r;H$C$F!"%/%i%$%"%s%H$KAw?.$9$kA0$K=PNO$r05=L$7$^$9!#(B
    + を使って、クライアントに送信する前に出力を圧縮します。
    -

    $B$^$?!"(Bmod_ext_filter $B%b%8%e!<%k$G(B - $B30It%W%m%0%i%`$r%U%#%k%?$H$7$F;XDj$9$k$3$H$,$G$-$^$9!#(B

    +

    また、mod_ext_filter モジュールで + 外部プログラムをフィルタとして指定することができます。

    diff --git a/docs/manual/handler.xml.ja b/docs/manual/handler.xml.ja index e0ca0392f2..bf1e06d49e 100644 --- a/docs/manual/handler.xml.ja +++ b/docs/manual/handler.xml.ja @@ -1,4 +1,4 @@ - + @@ -22,14 +22,14 @@ - Apache $B$N%O%s%I%i$N;HMQ(B + Apache のハンドラの使用 -

    Apache $B$N%O%s%I%i$N;HMQ$K4X$7$F5-=R$7$F$$$^$9!#(B

    +

    Apache のハンドラの使用に関して記述しています。

    - $B%O%s%I%i$H$O(B + ハンドラとは mod_actions @@ -50,85 +50,85 @@ -

    $B!V%O%s%I%i!W$H$O!"%U%!%$%k$,8F$P$l$?$H$-$Ko!"%U%!%$%k$O%U%!%$%k7?$K4p$E$$$?0EL[$N%O%s%I%i$,$"$j$^$9!#(B - $BIaDL$O$9$Y$F$N%U%!%$%k$OC1$K%5!<%P$K07$o$l$^$9$,!"(B - $B%U%!%$%k%?%$%W$NCf$K$OJL$K!V%O%s%I%k!W(B($BLuCm(B: $B07$&(B) - $B$5$l$k$b$N$b$"$j$^$9!#(B

    +

    「ハンドラ」とは、ファイルが呼ばれたときに実行される動作の + Apache における内部表現です。 + 通常、ファイルはファイル型に基づいた暗黙のハンドラがあります。 + 普通はすべてのファイルは単にサーバに扱われますが、 + ファイルタイプの中には別に「ハンドル」(訳注: 扱う) + されるものもあります。

    -

    Apache 1.1 $B$G$O!"%O%s%I%i$rL@<(E*$K;HMQ$9$k5!G=$,DI2C$5$l$^$7$?!#(B - $B%U%!%$%k$N3HD%;R$dCV$$$F$$$k>l=j$K4p$E$$$F!"(B - $B%U%!%$%k7?$H4X78$J$/%O%s%I%i$r;XDj$9$k$3$H$,$G$-$^$9!#(B - $B$3$l$O$h$jM%2m$J2r7hK!$H$$$&E@$H!"%U%!%$%k$K%?%$%W(B$B$H(B$B%O%s%I%i$NN>J}$r4XO"IU$1$k$3$H$,$G$-$k$H$$$&E@$GM%$l$F$$$^$9!#(B +

    Apache 1.1 では、ハンドラを明示的に使用する機能が追加されました。 + ファイルの拡張子や置いている場所に基づいて、 + ファイル型と関係なくハンドラを指定することができます。 + これはより優雅な解決法という点と、ファイルにタイプとハンドラの両方を関連付けることができるという点で優れています。 ($BJ#?t$N3HD%;R$N$"$k%U%!%$%k(B$B$b;2>H$7$F$/$@$5$$(B)$B!#(B

    + >複数の拡張子のあるファイルも参照してください)。

    -

    $B%O%s%I%i$O%5!<%P$KAH$_9~$s$@$j!"%b%8%e!<%k$H$7$F4^$a$?$j!"(B +

    ハンドラはサーバに組み込んだり、モジュールとして含めたり、 Action - $B%G%#%l%/%F%#%V$H$7$FDI2C$7$?$j$9$k$3$H$,$G$-$^$9!#(B - $B0J2<$OI8=`G[I[$KAH$_9~$^$l$F$$$k%O%s%I%i$G$9!#(B + ディレクティブとして追加したりすることができます。 + 以下は標準配布に組み込まれているハンドラです。

    • default-handler:default_handelr() - $B$r;H$C$F%U%!%$%k$rAw$j$^$9!#(B - $B@EE*$J%3%s%F%s%D$r07$&$H$-$K%G%U%)%k%H$G;HMQ$5$l$k%O%s%I%i$G$9!#(B + を使ってファイルを送ります。 + 静的なコンテンツを扱うときにデフォルトで使用されるハンドラです。 (core)
    • send-as-is: - HTTP $B%X%C%@$N$"$k%U%!%$%k$r$=$N$^$^Aw$j$^$9!#(B + HTTP ヘッダのあるファイルをそのまま送ります。 (mod_asis)
    • -
    • cgi-script: $B%U%!%$%k$r(B CGI - $B%9%/%j%W%H$H$7$F07$$$^$9!#(B +
    • cgi-script: ファイルを CGI + スクリプトとして扱います。 (mod_cgi)
    • imap-file: - $B%$%a!<%8%^%C%W$N%k!<%k%U%!%$%k$H$7$F2r@O$7$^$9!#(B + イメージマップのルールファイルとして解析します。 (mod_imagemap)
    • -
    • server-info: $B%5!<%P$N@_Dj>pJs$rserver-info: サーバの設定情報を取得します。 (mod_info)
    • -
    • server-status: $B%5!<%P$N>uBVJs9p$rserver-status: サーバの状態報告を取得します。 (mod_status)
    • type-map: - $B%3%s%F%s%H%M%4%7%(!<%7%g%s$N$?$a$N%?%$%W%^%C%W$H$7$F2r@O$7$^$9!#(B + コンテントネゴシエーションのためのタイプマップとして解析します。 (mod_negotiation)
    - $BNc(B + 例
    - CGI $B%9%/%j%W%H$rMQ$$$F@EE*$J%3%s%F%s%D$rJQ99$9$k(B + CGI スクリプトを用いて静的なコンテンツを変更する -

    $B0J2<$N%G%#%l%/%F%#%V$K$h$C$F!"3HD%;R$,(B html - $B$G$"$k%U%!%$%k$O(B footer.pl - CGI $B%9%/%j%W%H$r5/F0$9$k$h$&$K$J$j$^$9!#(B

    +

    以下のディレクティブによって、拡張子が html + であるファイルは footer.pl + CGI スクリプトを起動するようになります。

    Action add-footer /cgi-bin/footer.pl
    AddHandler add-footer .html
    -

    CGI $B%9%/%j%W%H$O4uK>$N=$@5$dDI2C$r9T$J$C$F!"85!9MW5a$5$l$?J8=q(B - ($B4D6-JQ?t(B PATH_TRANSLATED - $B$G;X$5$l$F$$$^$9(B) $B$rAw$k@UG$$,$"$j$^$9!#(B +

    CGI スクリプトは希望の修正や追加を行なって、元々要求された文書 + (環境変数 PATH_TRANSLATED + で指されています) を送る責任があります。

    - HTTP $B%X%C%@$N$"$k%U%!%$%k(B + HTTP ヘッダのあるファイル -

    $B0J2<$N%G%#%l%/%F%#%V$O(B send-as-is - $B%O%s%I%i$r;HMQ$9$k$h$&$K;X<($7$^$9!#$3$N%O%s%I%i$O<+J,<+?H$N(B HTTP - $B%X%C%@$r;}$C$F$$$k%U%!%$%k$K;HMQ$5$l$^$9!#$3$3$G$O!"3HD%;R$K4X$o$i$:!"(B - /web/htdocs/asis $B%G%#%l%/%H%j$K$"$kA4$F$N%U%!%$%k$O(B - send-as-is $B%O%s%I%i$K$h$C$F07$o$l$^$9!#(B

    +

    以下のディレクティブは send-as-is + ハンドラを使用するように指示します。このハンドラは自分自身の HTTP + ヘッダを持っているファイルに使用されます。ここでは、拡張子に関わらず、 + /web/htdocs/asis ディレクトリにある全てのファイルは + send-as-is ハンドラによって扱われます。

    <Directory /web/htdocs/asis>
    @@ -139,24 +139,24 @@
    - $B%W%m%0%i%^8~$1$N%a%b(B + プログラマ向けのメモ -

    $B%O%s%I%i$N5!G=$rハンドラの機能を実装するために、利用すると便利かもしれないものが Apache API - $B$KDI2C$5$l$^$7$?!#>\$7$/8@$&$H!"(Brequest_rec - $B9=B$BN$K?7$7$$%l%3!<%I$,DI2C$5$l$?$H$$$&$3$H$G$9!#(B

    + に追加されました。詳しく言うと、request_rec + 構造体に新しいレコードが追加されたということです。

    char *handler -

    $B$b$7%b%8%e!<%k$,%O%s%I%i$K4X$o$j$?$$>l9g!"(B - $B$d$i$J$1$l$P$J$i$J$$$3$H$O!"%j%/%(%9%H$,(B invoke_handler - $B%9%F!<%8$KC#$9$k0JA0$K(B r->handler - $B$r@_Dj$9$k$3$H$@$1$G$9!#%O%s%I%i$O%3%s%F%s%H%?%$%W$NBe$o$j$K(B - $B%O%s%I%iL>$r;H$&$h$&$K$J$C$F$$$k$3$H0J30$O!"0JA0$HF1$8$h$&$KA06u4V$r?/$5$J$$$h$&$K!"%O%s%I%i$NL>A0$K$O%9%i%C%7%e$r4^$^$J$$!"(B - $B%@%C%7%e(B ($BLuCm(B: "-") $B$GJ,N%$5$l$?L>A0$rIU$1$k=,47$K$J$C$F$$$^$9!#(B

    +

    もしモジュールがハンドラに関わりたい場合、 + やらなければならないことは、リクエストが invoke_handler + ステージに達する以前に r->handler + を設定することだけです。ハンドラはコンテントタイプの代わりに + ハンドラ名を使うようになっていること以外は、以前と同じように実装されています。 + 必ず要求されているわけではありませんが、メディアタイプ + の名前空間を侵さないように、ハンドラの名前にはスラッシュを含まない、 + ダッシュ (訳注: "-") で分離された名前を付ける習慣になっています。

    diff --git a/docs/manual/howto/auth.xml.ja b/docs/manual/howto/auth.xml.ja index f6fed1b1f2..e8c0cd03f2 100644 --- a/docs/manual/howto/auth.xml.ja +++ b/docs/manual/howto/auth.xml.ja @@ -1,4 +1,4 @@ - + @@ -21,32 +21,32 @@ --> -How-To / $B%A%e!<%H%j%"%k(B +How-To / チュートリアル -$BG'>Z!">5G'!"%"%/%;%9@)8f(B +認証、承認、アクセス制御 -

    $B!VG'>Z!W$H$O!"C/$+$,<+J,$OC/$G$"$k$+$rl9g$K!"(B - $B$=$l$r3NG'$9$k$?$a$NA42aDx$r;X$7$^$9!#!V>5G'!W$H$O!"(B - $BC/$+$,9T$-$?$$>l=j$K9T$1$k$h$&$K!"$"$k$$$OM_$7$$>pJs$r(B - $BF@$k$3$H$,$G$-$k$h$&$K$9$k$?$a$NA42aDx$r;X$7$^$9!#(B

    +

    「認証」とは、誰かが自分は誰であるかを主張した場合に、 + それを確認するための全過程を指します。「承認」とは、 + 誰かが行きたい場所に行けるように、あるいは欲しい情報を + 得ることができるようにするための全過程を指します。

    -