1
0
mirror of https://github.com/apache/httpd.git synced 2025-08-07 04:02:58 +03:00

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
This commit is contained in:
Takashi Sato
2008-06-06 14:36:23 +00:00
parent 74d535b29d
commit f438923a5c
96 changed files with 13007 additions and 13007 deletions

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 327999:587444 (outdated) -->
@@ -22,17 +22,17 @@
<manualpage metafile="bind.xml.meta">
<title>$B%P%$%s%I(B</title>
<title>バインド</title>
<summary>
<p>Apache $B$,;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj$r$7$^$9!#(B</p>
<p>Apache が使用するアドレスとポートの設定をします。</p>
</summary>
<seealso><a href="vhosts/">$B%P!<%A%c%k%[%9%H(B</a></seealso>
<seealso><a href="dns-caveats.html">DNS $B$NLdBj(B</a></seealso>
<seealso><a href="vhosts/">バーチャルホスト</a></seealso>
<seealso><a href="dns-caveats.html">DNS の問題</a></seealso>
<section id="overview">
<title>$B35MW(B</title>
<title>概要</title>
<related>
<modulelist>
@@ -46,36 +46,36 @@
</related>
<p>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</p>
<p>Apache は起動時に、ローカルマシンのあるポートおよびアドレス
に対して接続し、リクエストが来るのを待ちます。
デフォルトではマシンのすべてのアドレスに対して listen します。
しかしながら、特定のポートか、特定のアドレスのみか、
またはそれらの組み合わせのいずれかを listen するようにする必要があります。
これは、異なる IP アドレス、ホスト名、ポートに対する Apache
の応答方法を決定するバーチャルホスト機能と組み合わせて使われます。</p>
<p><directive module="mpm_common">Listen</directive>
$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$r<u$1IU$1$k$h$&$K$G$-$^$9!#(B
$B$b$7%]!<%HHV9f$N$_$,(B <directive module="mpm_common">Listen</directive>
$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 <directive module="mpm_common">Listen</directive> $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</p>
ディレクティブで、特定のポートやアドレス・ポートの組からのみ入ってくる
リクエストを受け付けるようにできます。
もしポート番号のみが <directive module="mpm_common">Listen</directive>
ディレクティブで指定された場合は、
すべてのインターフェースの与えられたポート番号を
listen します。 IP アドレスがポート番号と同時に与えられた場合は、
サーバは与えられたポートとインターフェースを listen します。
複数の <directive module="mpm_common">Listen</directive> ディレクティブを用いて
いくつかの listen するアドレスとポートを指定できます。
サーバはリストされたアドレスやポートからのすべてのリクエストに
対して応答します。</p>
<p>$B$?$H$($P!"%]!<%H(B 80 $B$H(B 8000 $B$NN>J}$KBP$7$F$N@\B3$r<u$1IU$1$k$K$O(B</p>
<p>たとえば、ポート 80 と 8000 の両方に対しての接続を受け付けるには</p>
<example>
Listen 80<br />
Listen 8000
</example>
<p>$B$H$7$^$9!#(B
$BFs$D$N;XDj$5$l$?%$%s%?%U%'!<%9$H%]!<%HHV9f$KBP$7$F$N@\B3$r<u$1IU$1$k$K$O!"(B
<p>とします。
二つの指定されたインタフェースとポート番号に対しての接続を受け付けるには、
</p>
<example>
@@ -83,8 +83,8 @@
Listen 192.0.2.5:8000
</example>
<p>$B$H$7$^$9!#(B
IPv6 $B%"%I%l%9$O!"3Q3g8L$G<!$NNc$N$h$&$K0O$^$J$1$l$P$$$1$^$;$s!#(B</p>
<p>とします。
IPv6 アドレスは、角括弧で次の例のように囲まなければいけません。</p>
<example>
Listen [2001:db8::a00:20ff:fea7:ccea]:80
@@ -92,82 +92,82 @@
</section>
<section id="ipv6">
<title>IPv6 $B$NFC5-;v9`(B</title>
<title>IPv6 の特記事項</title>
<p>$BB?$/$N%W%i%C%H%[!<%`$G(B IPv6 $B$,%5%]!<%H$5$l$F$-$F$$$F!"(B
<glossary>APR</glossary> $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</p>
<p>多くのプラットホームで IPv6 がサポートされてきていて、
<glossary>APR</glossary> はこれらのほとんどで IPv6 をサポートしているので、
Apache は IPv6 ソケットを割り当てて IPv6
経由で送られてきたリクエストを扱うことができます。</p>
<p>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}<T$K$H$C$FLq2p$JLdBj$G$9!#(B
IPv4 $B%3%M%/%7%g%s$r(B IPv6 $B%=%1%C%H$G07$&>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 <program>configure</program> $B$N(B
$B@_Dj%Q%i%a!<%?$G(B Apache $B$N5sF0$rJQ2=$5$;$k$3$H$,$G$-$^$9!#(B</p>
<p>IPv6 ソケットが IPv4 と IPv6 コネクションの両方を扱うことができるか
どうかは、Apache 管理者にとって厄介な問題です。
IPv4 コネクションを IPv6 ソケットで扱う場合は、
IPv4 マップされた IPv6 アドレスを使用していて、
ほとんどのプラットホームではデフォルトで使用可能ですが、
FreeBSD, NetBSD, OpenBSD では、システム全体としてのポリシーとの整合性から、
デフォルトでは使用不可に設定されています。
これらのデフォルトで使用不可のプラットホームであっても、
特別な <program>configure</program>
設定パラメータで Apache の挙動を変化させることができます。</p>
<p>$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<strong>$B0J30$NJ}K!$O$"$j$^$;$s(B</strong>$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
<p>一方で、Linux や Tru64 といったプラットホームで IPv4 と IPv6
の両方を扱うには、マップトアドレスを使用する<strong>以外の方法はありません</strong>
IPv4 と IPv6 のコネクションを最小限のソケットで扱いたいのであれば、
IPv4 マップの IPv6 アドレスを使用する必要があり、
<code>--enable-v4-mapped</code> <program>configure</program>
$B%*%W%7%g%s$r;XDj$7$^$9!#(B</p>
オプションを指定します。</p>
<p><code>--enable-v4-mapped</code> $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$/$*<j85$N(B Apache $B$O$3$N@_Dj$G%S%k%I$5$l$F$$$k$G$7$g$&!#(B</p>
<p><code>--enable-v4-mapped</code> は、
FreeBSD, NetBSD, OpenBSD 以外の全てのプラットホームでのデフォルトです。
ですから、おそらくお手元の Apache はこの設定でビルドされているでしょう。</p>
<p>$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
$B<!$NNc$N$h$&$KA4$F$N(B
<directive module="mpm_common">Listen</directive> $B%G%#%l%/%F%#%V$G(B
IPv4 $B%"%I%l%9$r;XDj$7$F$/$@$5$$!#(B</p>
<p>プラットフォームや APR が何をサポートするかに関わらず、
IPv4 コネクションのみを扱うようにしたい場合は、
次の例のように全ての
<directive module="mpm_common">Listen</directive> ディレクティブで
IPv4 アドレスを指定してください。</p>
<example>
Listen 0.0.0.0:80<br />
Listen 192.0.2.1:80
</example>
<p>$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<code>--disable-v4-mapped</code>
<p>条件を満たすプラットホームで、Apache が
IPv4 と IPv6 のコネクションを個別のソケットで扱うようにしたい場合
(つまり IPv4 マップのアドレスを無効にしたい場合)
は、<code>--disable-v4-mapped</code>
<program>configure</program>
$B%*%W%7%g%s$r;XDj$7$F!"<!$N$h$&$K8DJL;XDj$N(B
オプションを指定して、次のように個別指定の
<directive module="mpm_common">Listen</directive>
$B%G%#%l%/%F%#%V$r;HMQ$7$F$/$@$5$$!#(B
<code>--disable-v4-mapped</code> $B$O!"(B
FreeBSD, NetBSD, OpenBSD $B%W%i%C%H%[!<%`$G$N%G%U%)%k%H$G$9!#(B</p>
ディレクティブを使用してください。
<code>--disable-v4-mapped</code> は、
FreeBSD, NetBSD, OpenBSD プラットホームでのデフォルトです。</p>
</section>
<section id="virtualhost">
<title>$B%P!<%A%c%k%[%9%H$KBP$7$F$I$&F/$/$N$+(B</title>
<title>バーチャルホストに対してどう働くのか</title>
<p><directive module="mpm_common">Listen</directive>
$B$G%P!<%A%c%k%[%9%H$,<BAu$5$l$k$o$1$G$O$"$j$^$;$s!#(B
Listen $B$OC1$K%a%$%s%5!<%P$K$I$N%"%I%l%9$H%]!<%H$r(B listen $B$9$Y$-$+$r(B
$B65$($k$@$1$G$9!#(B
でバーチャルホストが実装されるわけではありません。
Listen は単にメインサーバにどのアドレスとポートを listen すべきかを
教えるだけです。
<directive module="core" type="section">VirtualHost</directive>
$B%G%#%l%/%F%#%V$,;H$o$l$J$$>l9g$O!"(B
$B<u$1F~$l$?%j%/%(%9%H$9$Y$F$KBP$7$FA4$/F1$85sF0$r$7$^$9!#(B
$B$7$+$7$J$,$i(B
ディレクティブが使われない場合は、
受け入れたリクエストすべてに対して全く同じ挙動をします。
しかしながら
<directive module="core" type="section">VirtualHost</directive>
$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$r<BAu$9$k$K$O!";HMQ$9$k%"%I%l%9$H%]!<%H$r(B
$B$^$:=i$a$K%5!<%P$KDLCN$7$J$1$l$P$J$j$^$;$s!#(B
$B$=$7$F!"$=$N;XDj$7$?%"%I%l%9$H%]!<%H$G$N(B
$B$3$N%P!<%A%c%k%[%9%H$N5sF0$r@_Dj$9$k$?$a$K!"(B
を使って、
一つ以上のアドレスやポートに対して異なる挙動をするように
指定することができます。
VirtualHost を実装するには、使用するアドレスとポートを
まず初めにサーバに通知しなければなりません。
そして、その指定したアドレスとポートでの
このバーチャルホストの挙動を設定するために、
<directive module="core" type="section">VirtualHost</directive>
$B%;%/%7%g%s$r:n$j$^$9!#$b$7(B
セクションを作ります。もし
<directive module="core" type="section">VirtualHost</directive>
$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</p>
が listen していないアドレスとポートに対して
設定されてしまうと、
それにはアクセスできないということに注意してください。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -22,15 +22,15 @@
<manualpage metafile="configuring.xml.meta">
<title>$B@_Dj%U%!%$%k(B</title>
<title>設定ファイル</title>
<summary>
<p>$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</p>
<p>この文書では、Apache HTTP サーバを設定するのに使用するファイルについて
記述しています。</p>
</summary>
<section id="main">
<title>$B%a%$%s$N@_Dj%U%!%$%k(B</title>
<title>メインの設定ファイル</title>
<related>
<modulelist>
<module>mod_mime</module>
@@ -42,49 +42,49 @@
</directivelist>
</related>
<p>Apache $B$O(B <a href="mod/directives.html"
>$B%G%#%l%/%F%#%V(B</a> $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 <code>httpd.conf</code> $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
<code>-f</code> $B%U%i%0$K$h$j>e=q$-$G$-$^$9!#(B
$B$^$?!"B>$N@_Dj%U%!%$%k$r(B <directive module="core">Include</directive>
$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</p>
<p>Apache <a href="mod/directives.html"
>ディレクティブ</a> を設定ファイルに平文で書くことにより設定します。
メインの設定ファイルは普通は <code>httpd.conf</code> という名前です。
このファイルの位置はコンパイル時に設定されますが、コマンドラインの
<code>-f</code> フラグにより上書きできます。
また、他の設定ファイルを <directive module="core">Include</directive>
ディレクティブによって追加でき、ワイルドカードを使用して多数の
設定ファイルを追加することができます。
どんなディレクティブも、これらの設定ファイルどれにでも入れることができます。
Apache は起動時か再起動時のみメイン設定ファイルの変更を認識します。</p>
<p>$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
<p>サーバは MIME
ドキュメントタイプを含んでいるファイルも読み込みます。ファイル名は
<directive module="mod_mime">TypesConfig</directive>
$B$G@_Dj$5$l!"%G%U%)%k%H$G$O(B <code>mime.types</code>
$B$K$J$C$F$$$^$9!#(B</p>
で設定され、デフォルトでは <code>mime.types</code>
になっています。</p>
</section>
<section id="syntax">
<title>$B@_Dj%U%!%$%k$N9=J8(B</title>
<title>設定ファイルの構文</title>
<p>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$,<!$N9T$K7QB3$7$F$$$k$3$H$r(B
$B<($9$?$a$K9T$N:G8e$NJ8;z$H$7$F;H$o$l$F$$$k$+$b$7$l$^$;$s!#(B
$B9T$N:G8e$H%P%C%/%9%i%C%7%e$N4V$KB>$NJ8;z$d6uGr$,$"$C$F$O$$$1$^$;$s!#(B
<p>Apache の設定ファイルは 1 行に 1 つのディレクティブからなります。
バックスラッシュ "\" はディレクティブが次の行に継続していることを
示すために行の最後の文字として使われているかもしれません。
行の最後とバックスラッシュの間に他の文字や空白があってはいけません。
</p>
<p>$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<strong
>$B$$$1$^$;$s(B</strong>$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
<p>設定ファイルのディレクティブは大文字小文字を区別しませんが、
引数にはしばしば区別するものがあります。ハッシュ文字 "#"
で始まる行はコメントと見なされて無視されます。
設定ディレクティブの後の行ではコメントが含まれていては<strong
>いけません</strong>。ディレクティブの前の空行と空白は無視されますので、
わかりやすくするためにディレクティブをインデントしても構いません。
</p>
<p>$B@_Dj%U%!%$%k$N9=J8%(%i!<$O!"(B
<p>設定ファイルの構文エラーは、
<code>apachectl configtest</code>
$B$+%3%^%s%I%i%$%s%*%W%7%g%s(B
<code>-t</code> $B$r;H$C$FD4$Y$i$l$^$9!#(B</p>
かコマンドラインオプション
<code>-t</code> を使って調べられます。</p>
</section>
<section id="modules">
<title>$B%b%8%e!<%k(B</title>
<title>モジュール</title>
<related>
<modulelist>
@@ -96,28 +96,28 @@
</directivelist>
</related>
<p>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<a href="mod/">$B%b%8%e!<%k(B</a
>$B$H$7$FMxMQ2DG=$G$9!#%G%U%)%k%H$G$O!"%3%s%Q%$%k;~$K%b%8%e!<%k$N(B
<a href="mod/module-dict.html#Status">Base</a> $B%;%C%H(B ($B4pK\%;%C%H(B) $B$,(B
$B%5!<%P$K4^$^$l$^$9!#%5!<%P$,(B<a href="dso.html">$BF0E*%m!<%I(B</a
>$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
<p>Apache はモジュール化されたサーバです。
コアサーバには最も基本的な機能だけが含まれています。拡張機能は
Apache にロードされる<a href="mod/">モジュール</a
>として利用可能です。デフォルトでは、コンパイル時にモジュールの
<a href="mod/module-dict.html#Status">Base</a> セット (基本セット) が
サーバに含まれます。サーバが<a href="dso.html">動的ロード</a
>モジュールを使うようにコンパイルされている場合は、
モジュールを別にコンパイルして、いつでも
<directive module="mod_so">LoadModule</directive>
$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 <directive
ディレクティブを使って追加できます。
そうでない場合は、モジュールの追加や削除をするためには Apache
を再コンパイルする必要があります。設定ディレクティブは <directive
module="core" type="section">IfModule</directive>
$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</p>
ブロックに入れることで特定のモジュールが存在するときだけ
設定ファイルに含まれるようにすることができます。</p>
<p>$B%3%^%s%I%i%$%s%*%W%7%g%s(B <code>-l</code> $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</p>
<p>コマンドラインオプション <code>-l</code> を使って現時点で
どのモジュールがサーバにコンパイルされているかを知ることができます。</p>
</section>
<section id="scope">
<title>$B%G%#%l%/%F%#%V$NE,MQHO0O(B</title>
<title>ディレクティブの適用範囲</title>
<related>
<directivelist>
@@ -131,40 +131,40 @@
</directivelist>
</related>
<p>$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 <directive module="core"
<p>メイン設定ファイルにあるディレクティブはサーバ全体に適用されます。
サーバの一部分の設定だけを変更したい場合は <directive module="core"
type="section">Directory</directive>, <directive module="core"
type="section">DirectoryMatch</directive>, <directive module="core"
type="section">Files</directive>, <directive module="core"
type="section">FilesMatch</directive>, <directive module="core"
type="section">Location</directive>, <directive module="core"
type="section">LocationMatch</directive>
$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</p>
セクションの中に置くことで適用範囲を決められます。
これらのセクションはその中にあるディレクティブの適用範囲を
特定のファイルシステムの位置や URL に限定します。
非常に細粒度の設定を可能にするために、
セクションを入れ子にすることもできます。</p>
<p>Apache $B$OF1;~$KB?$/$N0c$&%&%'%V%5%$%H$r07$&G=NO$,$"$j$^$9!#(B
$B$3$l$O(B <a href="vhosts/">$B%P!<%A%c%k%[%9%H(B</a> $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
<p>Apache は同時に多くの違うウェブサイトを扱う能力があります。
これは <a href="vhosts/">バーチャルホスト</a> と呼ばれています。
特定のウェブサイトにのみ適用されるようにするために、
ディレクティブは
<directive module="core" type="section">VirtualHost</directive>
$B%;%/%7%g%s$NCf$KCV$/$3$H$G$bE,MQHO0O$rJQ$($k$3$H$,$G$-$^$9!#(B</p>
セクションの中に置くことでも適用範囲を変えることができます。</p>
<p>$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 <a href="mod/directive-dict.html#Context"
>$B%3%s%F%-%9%H(B</a> $B$rD4$Y$F$/$@$5$$!#>\$7$$>pJs$O!"(B
<p>ほとんどのディレクティブはどのセクションにでも書けますが、
中にはコンテキストによっては意味をなさないものもあります。
例えば、プロセスの作成を制御しているディレクティブはメインサーバの
コンテキストにのみ書くことができます。
どのディレクティブをどのセクションに書くことができるかを知るためには
ディレクティブの <a href="mod/directive-dict.html#Context"
>コンテキスト</a> を調べてください。詳しい情報は、
<a href="sections.html">Directory, Location, Files
$B%;%/%7%g%s$NF0:nK!(B</a>$B$K$"$j$^$9!#(B</p>
セクションの動作法</a>にあります。</p>
</section>
<section id="htaccess">
<title>.htaccess $B%U%!%$%k(B</title>
<title>.htaccess ファイル</title>
<related>
<directivelist>
@@ -173,30 +173,30 @@
</directivelist>
</related>
<p>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
<code>.htaccess</code> $B$H$$$&L>A0$G!"(B
<p>Apache ではウェブツリーの中に置かれた特別なファイルを使って
非中央集権的な設定管理をできます。その特別なファイルは普通は
<code>.htaccess</code> という名前で、
<directive module="core">AccessFileName</directive>
$B%G%#%l%/%F%#%V$G$I$s$JL>A0$K$G$b;XDj$G$-$^$9!#(B
ディレクティブでどんな名前にでも指定できます。
<code>.htaccess</code>
$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
<code>.htaccess</code> $B%U%!%$%k$O!"%a%$%s$N@_Dj%U%!%$%k$HF1$8(B
$B9=J8$r;H$$$^$9!#(B
ファイルに書かれたディレクティブはファイルを置いた
ディレクトリとその全てのサブディレクトリに適用されます。
<code>.htaccess</code> ファイルは、メインの設定ファイルと同じ
構文を使います。
<code>.htaccess</code>
$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</p>
ファイルはすべてのリクエストで読み込まれるため、
変更はすぐに反映されます。</p>
<p>$B$I$N%G%#%l%/%F%#%V$,(B <code>.htaccess</code>
$B%U%!%$%k$K=q$1$k$+$rD4$Y$k$K$O!"%G%#%l%/%F%#%V$N(B<a
href="mod/directive-dict.html#Context">$B%3%s%F%-%9%H(B</a>
$B$rD4$Y$F$/$@$5$$!#%5!<%P4IM}<T$O$5$i$K%a%$%s@_Dj%U%!%$%k$N(B
<p>どのディレクティブが <code>.htaccess</code>
ファイルに書けるかを調べるには、ディレクティブの<a
href="mod/directive-dict.html#Context">コンテキスト</a>
を調べてください。サーバ管理者はさらにメイン設定ファイルの
<directive module="core">AllowOverride</directive>
$B$r@_Dj$9$k$3$H$G$I$N%G%#%l%/%F%#%V$r(B <code>.htaccess</code>
$B%U%!%$%k$K=q$1$k$h$&$K$9$k$+$r@)8f$9$k$3$H$,$G$-$^$9!#(B</p>
を設定することでどのディレクティブを <code>.htaccess</code>
ファイルに書けるようにするかを制御することができます。</p>
<p><code>.htaccess</code> $B%U%!%$%k$K4X$9$k>\$7$$>pJs$O(B
<a href="howto/htaccess.html">.htaccess $B%A%e!<%H%j%"%k(B</a>
$B$r;2>H$7$F$/$@$5$$!#(B</p>
<p><code>.htaccess</code> ファイルに関する詳しい情報は
<a href="howto/htaccess.html">.htaccess チュートリアル</a>
を参照してください。</p>
</section>
</manualpage>

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 420990:558686 (outdated) -->
@@ -22,52 +22,52 @@
<manualpage metafile="custom-error.xml.meta">
<title>$B%+%9%?%`%(%i!<%l%9%]%s%9(B</title>
<title>カスタムエラーレスポンス</title>
<summary>
<p>$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</p>
<p>ウェブマスターが何らかのエラーや問題に対する
Apache の反応を設定できるようにする追加機能を提供します。</p>
<p>$B%5!<%P$,%(%i!<$dLdBj$rH/8+$7$?>l9g$NH?1~$r!"(B
$B%+%9%?%^%$%:$7$FDj5A$9$k$3$H$,$G$-$^$9!#(B</p>
<p>サーバがエラーや問題を発見した場合の反応を、
カスタマイズして定義することができます。</p>
<p>$B%9%/%j%W%H$N<B9T$,<:GT$7$F(B "500 Server Error"
$B$rH/@8$5$;$?$H$7$^$9!#$3$N>l9g$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
<p>スクリプトの実行が失敗して "500 Server Error"
を発生させたとします。この場合の反応を、より好ましいテキストや、別の
URL (内部及び外部) へのリダイレクションに置き換えることができます。
</p>
</summary>
<section id="behavior">
<title>$BF0:n(B</title>
<title>動作</title>
<section>
<title>$B8E$$F0:n(B</title>
<title>古い動作</title>
<p>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</p>
<p>NCSA httpd 1.3 は、古くて退屈なエラー/問題メッセージを
返していました。それはしばしばユーザには無意味であり、
またそれを発生させた原因を記録する方法も提供していませんでした。</p>
</section>
<section>
<title>$B?7$7$$F0:n(B</title>
<title>新しい動作</title>
<ol>
<li>NCSA $B$N%O!<%I%3!<%I$5$l$?%a%C%;!<%8$NBe$o$j$K(B
$BB>$N%F%-%9%H$rI=<((B</li>
<li>NCSA のハードコードされたメッセージの代わりに
他のテキストを表示</li>
<li>$B%m!<%+%k$N(B URL $B$K%j%@%$%l%/%H(B</li>
<li>ローカルの URL にリダイレクト</li>
<li>$B30It$N(B URL $B$K%j%@%$%l%/%H(B</li>
<li>外部の URL にリダイレクト</li>
</ol>
<p>$B$9$k$h$&$K%5!<%P$r@_Dj$G$-$^$9!#(B</p>
<p>するようにサーバを設定できます。</p>
<p>$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</p>
<p>別の URL にリダイレクトすることは役に立ちますが、
それは説明をしたり、より明確に誤り/問題を記録したりするために
何か情報を伝えられるときに限ります。</p>
<p>$B$3$l$r<B8=$9$k$?$a$K!"(B Apache $B$O?7$7$/(B CGI $B$N$h$&$J4D6-JQ?t$r(B
$BDj5A$7$^$9(B:</p>
<p>これを実現するために、 Apache は新しく CGI のような環境変数を
定義します:</p>
<example>
REDIRECT_HTTP_ACCEPT=*/*, image/gif,
@@ -84,28 +84,28 @@
REDIRECT_URL=/cgi-bin/buggy.pl
</example>
<p>$BF,$KIU$/(B <code>REDIRECT_</code> $B$KCmL\$7$F$/$@$5$$!#(B</p>
<p>頭に付く <code>REDIRECT_</code> に注目してください。</p>
<p>$B>/$J$/$H$b(B <code>REDIRECT_URL</code> $B$H(B
<code>REDIRECT_QUERY_STRING</code> $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 <directive
module="core">ErrorDocument</directive> $B$,(B <em>$B30It(B</em>$B%j%@%$%l%/%H(B
(<em>$B$9$J$o$A(B</em>$B!"(B<code>http:</code>
$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<strong>$B$^$C$?$/(B</strong>$B@_Dj$5$l$^$;$s!#(B</p>
<p>少なくとも <code>REDIRECT_URL</code>
<code>REDIRECT_QUERY_STRING</code> は新しい URL (CGI スクリプトか
CGI インクルードであると仮定されます) に渡されます。
他の変数は、エラーや問題が起きる前に存在した場合にだけ存在します。
もしあなたの設定した <directive
module="core">ErrorDocument</directive> が <em>外部</em>リダイレクト
(<em>すなわち</em>、<code>http:</code>
のような体系名から始まるすべてのもの。たとえ同じホストを指していても)
ならば、これらは<strong>まったく</strong>設定されません。</p>
</section>
</section>
<section id="configuration">
<title>$B@_Dj(B</title>
<title>設定</title>
<p><directive module="core">AllowOverride</directive> $B$,E,@Z$K@_Dj$5$l$F$$$l$P!"(B
.htaccess $B%U%!%$%k$G(B <directive module="core">ErrorDocument</directive>
$B$r;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
<p><directive module="core">AllowOverride</directive> が適切に設定されていれば、
.htaccess ファイルで <directive module="core">ErrorDocument</directive>
を使用することができます。</p>
<p>$B$3$3$K!"$$$/$D$+$NNc$r5s$2$^$9!#(B</p>
<p>ここに、いくつかの例を挙げます。</p>
<example>
ErrorDocument 500 /cgi-bin/crash-recover <br />
@@ -115,60 +115,60 @@
ErrorDocument 401 /Subscription/how_to_subscribe.html
</example>
<p>$B9=J8(B</p>
<p>構文</p>
<example>
ErrorDocument &lt;3-digit-code&gt; &lt;action&gt;
</example>
<p>action ($BF0:n(B) $B$O!"(B</p>
<p>action (動作) は、</p>
<ol>
<li>$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
<em>$BCm0U(B : (") $B$OI=<($5$l$^$;$s(B</em></li>
<li>表示されるべきテキスト。テキストには引用符 (") をつけます。
引用符の後に続くものが何でも表示されます。
<em>注意 : (") は表示されません</em></li>
<li>$B%j%@%$%l%/%H@h$N30It(B URL </li>
<li>リダイレクト先の外部 URL </li>
<li>$B%j%@%$%l%/%H@h$N%m!<%+%k(B URL </li>
<li>リダイレクト先のローカル URL </li>
</ol>
</section>
<section id="custom">
<title>$B%+%9%?%`%(%i!<%l%9%]%s%9$H%j%@%$%l%/%H(B</title>
<title>カスタムエラーレスポンスとリダイレクト</title>
<p>$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</p>
<p>スクリプト/SSI に追加の環境変数が利用可能になるように、
リダイレクトされた URL に対する Apache の動作が変更されました。</p>
<section>
<title>$B8E$$F0:n(B</title>
<title>古い動作</title>
<p>$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</p>
<p>リダイレクトされたスクリプトは標準の CGI
環境変数を利用可能でした。しかし、どこからリダイレクト
されたかの情報は提供されていませんでした。</p>
</section>
<section>
<title>$B?7$7$$F0:n(B</title>
<title>新しい動作</title>
<p>$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
<code>REDIRECT_</code> $B$G;O$^$j$^$9!#(B
<code>REDIRECT_</code> $B$G;O$^$k4D6-JQ?t$O%j%@%$%l%/%H$5$l$kA0$KB8:_$7$F$$$?(B
CGI $B4D6-JQ?t$NF,$K(B <code>REDIRECT_</code> $B$rIU$1$F:n@.$5$l$^$9!#(B
<em>$B$9$J$o$A(B</em>$B!"(B<code>HTTP_USER_AGENT</code> $B$O(B
<code>REDIRECT_HTTP_USER_AGENT</code> $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
<code>REDIRECT_URL</code> $B$H(B <code>REDIRECT_STATUS</code>
$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</p>
<p>リダイレクトされた先のスクリプトが使用可能なように、
新しいたくさんの環境変数が初期化されます。新しい変数は、それぞれ
<code>REDIRECT_</code> で始まります。
<code>REDIRECT_</code> で始まる環境変数はリダイレクトされる前に存在していた
CGI 環境変数の頭に <code>REDIRECT_</code> を付けて作成されます。
<em>すなわち</em>、<code>HTTP_USER_AGENT</code>
<code>REDIRECT_HTTP_USER_AGENT</code> になります。
これらの新しい変数に加えて、Apache は、
スクリプトがリダイレクト元のトレースを助けるために
<code>REDIRECT_URL</code> <code>REDIRECT_STATUS</code>
を定義します。アクセスログには元の URL とリダイレクトされた URL
の両方が記録されます。</p>
<p>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<B$KEA$($k$?$a$K(B <code>"Status:" </code>
$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
<p>ErrorDocument が CGI スクリプトへのローカルリダイレクトを
指定している場合は、それを起動することになったエラーの状態を
クライアントまで確実に伝えるために <code>"Status:" </code>
ヘッダを含むべきです。例えば、ErrorDocument 用の Perl
スクリプトは以下のようなものを含むかもしれません。
</p>
<example>
@@ -178,9 +178,9 @@
...
</example>
<p>$B%9%/%j%W%H$,(B <code>404 Not Found</code> $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</p>
<p>スクリプトが <code>404 Not Found</code> のような
特定のエラーコンディションを扱うためだけに使われる場合は、
代わりに特定のコードとエラーテキストを使用することができます。</p>
</section>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
<!-- English Revision: 420993:462914 (outdated) -->
@@ -23,33 +23,33 @@
<manualpage metafile="modules.xml.meta">
<parentdocument href="./">Developer Documentation</parentdocument>
<title>$B%b%8%e!<%k$N(B Apache 1.3 $B$+$i(B Apache 2.0 $B$X$N0\?"(B</title>
<title>モジュールの Apache 1.3 から Apache 2.0 への移植</title>
<summary>
<p>$B$3$NJ8=q$O(B <code>mod_mmap_static</code> $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<j0z$-=q$G$9!#$^$@$^$@40A4$8$c$J$$$7!"(B
$B$R$g$C$H$9$k$H4V0c$C$F$$$kItJ,$b$"$k$+$b$7$l$^$;$s$,!"(B
$B<h$C3]$j$K$O$J$k$G$7$g$&!#(B</p>
<p>この文書は <code>mod_mmap_static</code> モジュールを Apache 2.0 用に移植した時に
学んだ経験をもとに書いた、最初の手引き書です。まだまだ完全じゃないし、
ひょっとすると間違っている部分もあるかもしれませんが、
取っ掛りにはなるでしょう。</p>
</summary>
<section id="easy"><title>$B4JC1$JJQ99E@(B</title>
<section id="easy"><title>簡単な変更点</title>
<section id="cleanup"><title>$B%/%j!<%s%J%C%W(B $B%k!<%A%s(B</title>
<p>$B%/%j!<%s%J%C%W%k!<%A%s$O(B <code>apr_status_t</code> $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
<code>ARP_SUCCESS</code> $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</p>
<section id="cleanup"><title>クリーンナップ ルーチン</title>
<p>クリーンナップルーチンは <code>apr_status_t</code> 型である必要があります。
そして、apr_status_t 型の値を返さなくてはなりません。
クリーンナップ中のエラーを通知する必要がなければ、返り値は普通、
<code>ARP_SUCCESS</code> です。たとえエラーを通知したとしても、
すべてのコードがその通知をチェックしたり、
エラーに応じた動作をするわけではないことに気をつけてください。</p>
</section>
<section id="init"><title>$B=i4|2=%k!<%A%s(B</title>
<section id="init"><title>初期化ルーチン</title>
<p>$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!"(B<code>mmap_init</code> $B$+$i(B <code>mmap_post_config</code>
$B$N$h$&$K$A$g$C$HJQ99$5$l$^$7$?!#(B
$BEO$5$l$k0z?t$OBgI}$KJQ99$5$l!"<!$N$h$&$K$J$j$^$7$?!#(B</p>
<p>初期化ルーチンは処理全体から見てしっくりくるような意味を表すように、
名前が変更されました。ですから、<code>mmap_init</code> から <code>mmap_post_config</code>
のようにちょっと変更されました。
渡される引数は大幅に変更され、次のようになりました。</p>
<ul>
<li><code>apr_pool_t *p</code></li>
@@ -59,11 +59,11 @@
</ul>
</section>
<section id="datatypes"><title>$B%G!<%?7?(B</title>
<p>$B%G!<%?7?$N$[$H$s$I$O(B <a
href="http://apr.apache.org/">APR</a> $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</p>
<section id="datatypes"><title>データ型</title>
<p>データ型のほとんどは <a
href="http://apr.apache.org/">APR</a> に移されました。つまり、
いくつかの名前が前述のように変更されています。
施すべき変更点の簡単な一覧を以下に示します。</p>
<ul>
<li><code>pool</code> becomes <code>apr_pool_t</code></li>
@@ -72,22 +72,22 @@
</section>
</section>
<section id="messy"><title>$B$b$C$HLq2p$JJQ99E@!D(B</title>
<section id="messy"><title>もっと厄介な変更点…</title>
<section id="register-hooks"><title>$B%U%C%/$NEPO?(B</title>
<p>$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
<code>static void register_hooks(void)</code> $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</p>
<section id="register-hooks"><title>フックの登録</title>
<p>新しいアーキテクチャでは作成した関数を呼び出すのに
一連のフックを使用します。このフックは、新しい関数
<code>static void register_hooks(void)</code> を使って登録するよう、
モジュールに書き足さなくてはなりません。
この関数は、なにをすべきか一旦理解してしまえば、
十分にわかりやすいものです。
リクエストの処理のあるステージで呼び出さなくてはならない
関数は登録する必要があります。ハンドラは登録する必要はありません。
関数を登録できるフェーズはたくさんあります。
それぞれのフェーズで、関数を呼び出す相対的な順番は、
かなりの程度制御できます。</p>
<p>$B0J2<$O!"(B<code>mod_mmap_static</code> $B$KDI2C$7$?%3!<%I$G$9(B:</p>
<p>以下は、<code>mod_mmap_static</code> に追加したコードです:</p>
<example><pre>
static void register_hooks(void)
@@ -98,18 +98,18 @@ static void register_hooks(void)
};</pre>
</example>
<p>$B$3$3$G$O8F$S$@$9$Y$-Fs$D$N4X?t$rEPO?$7$F$$$^$9!#0l$D$O(B
<code>post_config</code> $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 <code>translate_name</code> $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?</p>
<p>ここでは呼びだすべき二つの関数を登録しています。一つは
<code>post_config</code> ステージ用 (ほとんどすべてのモジュール
はこれが必要です) で、もう一つは <code>translate_name</code> フェーズ用です。
それぞれの関数は名前は違うけれども形式は同じであることに注意してください。
それでは、形式はどのようになっているでしょうか?</p>
<example>
ap_hook_<var>phase_name</var>(<var>function_name</var>,
<var>predecessors</var>, <var>successors</var>, <var>position</var>);
</example>
<p>$B;0$D$N0LCV$,Dj5A$5$l$F$$$^$9!D(B</p>
<p>三つの位置が定義されています…</p>
<ul>
<li><code>HOOK_FIRST</code></li>
@@ -117,22 +117,22 @@ static void register_hooks(void)
<li><code>HOOK_LAST</code></li>
</ul>
<p>$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<j$r2C$($^$9!#(B
$B!V@h9T!W!V8e9T!W$O!"8F$P$l$k$Y$-4X?t$N%j%9%H$G$9!#(B
$B!V@h9T!W$O4X?t$N<B9TA0$K8F$P$l$k$b$N$G!"(B
$B!V8e9T!W$O<B9T8e$K8F$P$l$k$b$N$G$9!#(B</p>
<p>位置を定義するには、上記の「位置」を指定し、
修飾子である「先行」と「後行」で手を加えます。
「先行」「後行」は、呼ばれるべき関数のリストです。
「先行」は関数の実行前に呼ばれるもので、
「後行」は実行後に呼ばれるものです。</p>
<p><code>mod_mmap_static</code> $B$N>l9g!"(B<code>post_config</code>
$B%9%F!<%8$G$OI,MW$"$j$^$;$s$,!"(B
<code>mmap_static_xlat</code> $B$,(B core $B%b%8%e!<%k$,L>A0$NJQ49$r<B9T$7$?8e$K(B
<strong>$B8F$P$l$J$1$l$P$J$j$^$;$s(B</strong>$B!#(B
$B$=$3$G(B aszPre $B$r;H$C$F(B <code>HOOK_LAST</code> $B$N=$>~;R$rDj5A$7$F$$$^$9!#(B</p>
<p><code>mod_mmap_static</code> の場合、<code>post_config</code>
ステージでは必要ありませんが、
<code>mmap_static_xlat</code> が core モジュールが名前の変換を実行した後に
<strong>呼ばれなければなりません</strong>
そこで aszPre を使って <code>HOOK_LAST</code> の修飾子を定義しています。</p>
</section>
<section id="moddef"><title>$B%b%8%e!<%k$NDj5A(B</title>
<p>$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<!$N$h$&$K$J$C$F$$$^$7$?!#(B</p>
<section id="moddef"><title>モジュールの定義</title>
<p>モジュールの定義を作成する際に注意しなければならない
ステージの数は激減しています。古い定義は次のようになっていました。</p>
<example><pre>
module MODULE_VAR_EXPORT <var>module_name</var>_module =
@@ -159,7 +159,7 @@ module MODULE_VAR_EXPORT <var>module_name</var>_module =
};</pre>
</example>
<p>$B?7$7$$9=B$BN$O$H$C$F$b%7%s%W%k$G$9!D(B</p>
<p>新しい構造体はとってもシンプルです…</p>
<example><pre>
module MODULE_VAR_EXPORT <var>module_name</var>_module =
{
@@ -174,98 +174,98 @@ module MODULE_VAR_EXPORT <var>module_name</var>_module =
};</pre>
</example>
<p>$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</p>
<p>このうちのいくつかは古いものから新しいものに直接読み替えられるもので、
いくつかはそうではありません。どうすればいいのかを要約してみます。</p>
<p>$BD>@\FI$_BX$($i$l$k%9%F!<%8(B:</p>
<p>直接読み替えられるステージ:</p>
<dl>
<dt><code>/* $B%G%#%l%/%H%j@_Dj:n@.4X?t(B */</code></dt>
<dd><code>/* $B%G%#%l%/%H%jKh@_Dj9=B$BN:n@.(B */</code></dd>
<dt><code>/* ディレクトリ設定作成関数 */</code></dt>
<dd><code>/* ディレクトリ毎設定構造体作成 */</code></dd>
<dt><code>/* $B%5!<%P@_Dj:n@.4X?t(B */</code></dt>
<dd><code>/* $B%5!<%PKh@_Dj9=B$BN:n@.(B */</code></dd>
<dt><code>/* サーバ設定作成関数 */</code></dt>
<dd><code>/* サーバ毎設定構造体作成 */</code></dd>
<dt><code>/* $B%G%#%l%/%H%j@_Dj%^!<%84X?t(B */</code></dt>
<dd><code>/* $B%G%#%l%/%H%jKh@_Dj9=B$BN%^!<%8(B */</code></dd>
<dt><code>/* ディレクトリ設定マージ関数 */</code></dt>
<dd><code>/* ディレクトリ毎設定構造体マージ */</code></dd>
<dt><code>/* $B%5!<%P@_Dj%^!<%84X?t(B */</code></dt>
<dd><code>/* $B%5!<%PKh@_Dj9=B$BN:n@.%^!<%8(B */</code></dd>
<dt><code>/* サーバ設定マージ関数 */</code></dt>
<dd><code>/* サーバ毎設定構造体作成マージ */</code></dd>
<dt><code>/* $B%3%^%s%I!&%F!<%V%k(B */</code></dt>
<dd><code>/* $B%3%^%s%I(B apr_table_t */</code></dd>
<dt><code>/* コマンド・テーブル */</code></dt>
<dd><code>/* コマンド apr_table_t */</code></dd>
<dt><code>/* $B%O%s%I%i(B */</code></dt>
<dd><code>/* $B%O%s%I%i(B */</code></dd>
<dt><code>/* ハンドラ */</code></dt>
<dd><code>/* ハンドラ */</code></dd>
</dl>
<p>$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<!$N$h$&$J%U%C%/!&%9%F!<%8$,Dj5A$5$l$F$$$^$9!D(B</p>
<p>古い関数の残りのものはフックとして登録されるべきです。
現時点で次のようなフック・ステージが定義されています…</p>
<dl>
<dt><code>ap_hook_post_config</code></dt>
<dd>($B0JA0$N(B <code>_init</code> $B%k!<%A%s$,EPO?$5$l$k$Y$->l=j$G$9(B)</dd>
<dd>(以前の <code>_init</code> ルーチンが登録されるべき場所です)</dd>
<dt><code>ap_hook_http_method</code></dt>
<dd>($B%j%/%(%9%H$+$i(B HTTP $B%a%=%C%I$r<hF@$7$^$9(B ($B8_49MQ(B))</dd>
<dd>(リクエストから HTTP メソッドを取得します (互換用))</dd>
<dt><code>ap_hook_open_logs</code></dt>
<dd>($BFCDj$N%m%0$N%*!<%W%s(B)</dd>
<dd>(特定のログのオープン)</dd>
<dt><code>ap_hook_auth_checker</code></dt>
<dd>($B%j%=!<%9$,8"8B$rI,MW$H$9$k$+$I$&$+$N3NG'(B)</dd>
<dd>(リソースが権限を必要とするかどうかの確認)</dd>
<dt><code>ap_hook_access_checker</code></dt>
<dd>($B%b%8%e!<%k8GM-$N@)Ls$N3NG'(B)</dd>
<dd>(モジュール固有の制約の確認)</dd>
<dt><code>ap_hook_check_user_id</code></dt>
<dd>($B%f!<%6(B ID $B$H%Q%9%o!<%I$N3NG'(B)</dd>
<dd>(ユーザ ID とパスワードの確認)</dd>
<dt><code>ap_hook_default_port</code></dt>
<dd>($B%5!<%P$N%G%U%)%k%H!&%]!<%H$N<hF@(B)</dd>
<dd>(サーバのデフォルト・ポートの取得)</dd>
<dt><code>ap_hook_pre_connection</code></dt>
<dd>($B=hM}$ND>A0$KI,MW$J$3$H$r<B9T!#$?$@$7(B accept $BD>8e$K8F$P$l$k(B)</dd>
<dd>(処理の直前に必要なことを実行。ただし accept 直後に呼ばれる)</dd>
<dt><code>ap_hook_process_connection</code></dt>
<dd>($B%W%m%H%3%k$N=hM}(B)</dd>
<dd>(プロトコルの処理)</dd>
<dt><code>ap_hook_child_init</code></dt>
<dd>($B;R%W%m%;%k5/F0D>8e(B)</dd>
<dd>(子プロセル起動直後)</dd>
<dt><code>ap_hook_create_request</code></dt>
<dd>(??)</dd>
<dt><code>ap_hook_fixups</code></dt>
<dd>($B1~EzFbMF$N@8@.$rJQ99$9$k%i%9%H!&%A%c%s%9(B)</dd>
<dd>(応答内容の生成を変更するラスト・チャンス)</dd>
<dt><code>ap_hook_handler</code></dt>
<dd>($B1~EzFbMF$N@8@.(B)</dd>
<dd>(応答内容の生成)</dd>
<dt><code>ap_hook_header_parser</code></dt>
<dd>($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)</dd>
<dd>(モジュールにヘッダの照会をさせる。ほとんどのモジュールでは使われません。post_read_request を使います)</dd>
<dt><code>ap_hook_insert_filter</code></dt>
<dd>($B%U%#%k%?!&%A%'%$%s$K%U%#%k%?$rA^F~(B)</dd>
<dd>(フィルタ・チェインにフィルタを挿入)</dd>
<dt><code>ap_hook_log_transaction</code></dt>
<dd>($B%j%/%(%9%H$K$D$$$F$N>pJs$r5-O?$9$k(B)</dd>
<dd>(リクエストについての情報を記録する)</dd>
<dt><code>ap_hook_optional_fn_retrieve</code></dt>
<dd>($B%*%W%7%g%s$H$7$FEPO?$5$l$?4X?t$N<hF@(B)</dd>
<dd>(オプションとして登録された関数の取得)</dd>
<dt><code>ap_hook_post_read_request</code></dt>
<dd>($B%j%/%(%9%H$rFI$_$3$s$@8e!"B>$N%U%'!<%:$NA0$K8F$P$l$k(B)</dd>
<dd>(リクエストを読みこんだ後、他のフェーズの前に呼ばれる)</dd>
<dt><code>ap_hook_quick_handler</code></dt>
<dd>$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</dd>
<dd>リクエストの処理が始まる前に呼ばれる。キャッシュモジュールが
使用している</dd>
<dt><code>ap_hook_translate_name</code></dt>
<dd>(URI $B$r%U%!%$%kL>$KJQ49$9$k(B)</dd>
<dd>(URI をファイル名に変換する)</dd>
<dt><code>ap_hook_type_checker</code></dt>
<dd>($BJ8=q7?$N7hDj$H@_Dj!#$"$k$$$O$=$NJRJ}(B)</dd>
<dd>(文書型の決定と設定。あるいはその片方)</dd>
</dl>
</section>
</section>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 151408:507346 (outdated) -->
@@ -22,19 +22,19 @@
<manualpage metafile="dns-caveats.xml.meta">
<title>DNS $B$H(B Apache $B$K$^$D$o$kCm0U;v9`(B</title>
<title>DNS と Apache にまつわる注意事項</title>
<summary>
<p>$BK\J8=q$NFbMF$O<!$N0l8@$K?T$-$^$9!#!V(BApache $B$,@_Dj%U%!%$%k$rFI$_9~$`$H$-$K(B
DNS $B$r;HMQ$9$kI,MW$,$J$$$h$&$K$7$F2<$5$$!W!#(BApache $B$,@_Dj%U%!%$%k$r(B
$BFI$_9~$`$H$-$K(B DNS $B$r;HMQ$9$kI,MW$,$"$k>l9g!"?.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</p>
<p>本文書の内容は次の一言に尽きます。「Apache が設定ファイルを読み込むときに
DNS を使用する必要がないようにして下さい」。Apache が設定ファイルを
読み込むときに DNS を使用する必要がある場合、信頼性の問題
(起動しないかもしれません) やサービス拒否や盗用アタック
(他のユーザからヒットを盗むことを含みます)
の問題に直面するかもしれません。</p>
</summary>
<section id="example">
<title>$B4JC1$JNc(B</title>
<title>簡単な例</title>
<example>
&lt;VirtualHost www.abc.dom&gt; <br />
@@ -43,20 +43,20 @@
&lt;/VirtualHost&gt;
</example>
<p>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
<p>Apache が正常に機能するには、バーチャルホスト毎に必ず二つの
情報が必要になります。それは、
<directive module="core">ServerName</directive>
$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 <code>www.abc.dom</code> $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<strong>$B@_Dj$5$l$^$;$s(B</strong>$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</p>
と、そのサーバが応答するための IP (最低一つ) です。
上記例では IP アドレスを含んでいませんので、Apache は DNS
を使用して <code>www.abc.dom</code> を見つけなければなりません。
何らかの理由で設定ファイルを読み込んでいるときに DNS
が利用できなかった場合、
バーチャルホストは<strong>設定されません</strong>
そして、そのバーチャルホストに対するヒットには応答がなされません
(Apache 1.2 以前では起動すらしません)。</p>
<p><code>www.abc.dom</code> $B$N%"%I%l%9$,(B 192.0.2.1
$B$@$H$7$^$9!#$G$O!"<!$N@_Dj$K$D$$$F9M$($F$_$^$7$g$&!#(B</p>
<p><code>www.abc.dom</code> のアドレスが 192.0.2.1
だとします。では、次の設定について考えてみましょう。</p>
<example>
&lt;VirtualHost 192.0.2.1&gt; <br />
@@ -65,17 +65,17 @@
&lt;/VirtualHost&gt;
</example>
<p>$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 <directive module="core">ServerName</directive>
$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</p>
<p>現在のリリースでは Apache は DNS 逆引きを使用して
このバーチャルホストの <directive module="core">ServerName</directive>
を見つけます。
その逆引きが失敗した場合は部分的にバーチャルホストを無効にします
(Apache 1.2 より前では起動すらしません)。
バーチャルホストが名前ベースであれば完全に無効になりますが、
IP ベースであれば概ね動作します。しかしながら、サーバ名を
含む完全な URL を生成しなければならない場合は、正しい URL
の生成ができません。</p>
<p>$B<!$NNc$O>e5-$NLdBj$r2r7h$7$F$$$^$9!#(B</p>
<p>次の例は上記の問題を解決しています。</p>
<example>
&lt;VirtualHost 192.0.2.1&gt; <br />
@@ -87,19 +87,19 @@
</section>
<section id="denial">
<title>$B%5!<%S%95qH](B</title>
<title>サービス拒否</title>
<p>$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$r<B9T$7$F$$$k>l9g!"%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!"(B<code>abc.dom</code> $B$,8\5R$N%5!<%P$N0l$D$G!"(B
DNS $B$O8\5R<+?H$G4IM}$7$F$$$k>l9g!"C1$K(B
<code>www.abc.dom</code> $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</p>
<p>サービス拒否が起こる場合、(少なくとも) 二つのケースがあります。
Apache 1.2 より前を実行している場合、バーチャルホストのための
上記の二つの DNS 検索のうち一つ失敗すれば起動すらしません。
そしてこの DNS 検索が自分の制御下にすらない場合もありえます。
例えば、<code>abc.dom</code> が顧客のサーバの一つで、
DNS は顧客自身で管理している場合、単に
<code>www.abc.dom</code> レコードを削除するだけで、
(1.2 より前の) サーバを起動不能にすることができます。</p>
<p>$B$b$&0l$D$N%1!<%9$O!"$h$j5$IU$-$K$/$$$b$N$G$9!#(B
$B<!$N@_Dj$K$D$$$F9M$($F$_$^$7$g$&!#(B</p>
<p>もう一つのケースは、より気付きにくいものです。
次の設定について考えてみましょう。</p>
<example>
&lt;VirtualHost www.abc.dom&gt; <br />
@@ -113,119 +113,119 @@
&lt;/VirtualHost&gt;
</example>
<p>192.0.2.1 $B$r(B <code>www.abc.dom</code> $B$K!"(B
192.0.2.2 $B$r(B <code>www.def.dom</code> $B$K3d$jEv$F$F$$$k$H$7$^$9!#(B
$B$^$?!"(B<code>def.dom</code> $B$O8\5R<+?H$N(B DNS
$B$N@)8f2<$K$"$k$H$7$^$9!#$3$N@_Dj$G!"(B<code>abc.dom</code>
$B$K8~$1$i$l$?%H%i%U%#%C%/A4$F$rC%$&$3$H$,$G$-$k0LCV$K(B
<code>def.dom</code> $B$r@_CV$G$-$F$$$^$9!#8e$OC1$K(B
<code>www.def.dom</code> $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
<code>www.def.dom</code> $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</p>
<p>192.0.2.1 <code>www.abc.dom</code> に、
192.0.2.2 <code>www.def.dom</code> に割り当てているとします。
また、<code>def.dom</code> は顧客自身の DNS
の制御下にあるとします。この設定で、<code>abc.dom</code>
に向けられたトラフィック全てを奪うことができる位置に
<code>def.dom</code> を設置できています。後は単に
<code>www.def.dom</code> 192.0.2.1 を参照するように
設定するだけです。DNS は顧客側の DNS でコントロールされているので、
<code>www.def.dom</code> レコードが好きな場所を指すように
設定できてしまうのを止めさせることができません。</p>
<p>192.0.2.1 $B$KBP$9$k%j%/%(%9%H(B
(<code>http://www.abc.dom/whatever</code> $B7A<0$N(B URL
$B$rF~NO$7$?%f!<%6$+$i$N$b$NA4$F$r4^$_$^$9(B)
$B$O!"(B<code>def.dom</code> $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<a
href="vhosts/details.html">$B$3$A$i(B</a>$B$K5-=R$5$l$F$$$^$9!#(B</p>
<p>192.0.2.1 に対するリクエスト
(<code>http://www.abc.dom/whatever</code> 形式の URL
を入力したユーザからのもの全てを含みます)
は、<code>def.dom</code> バーチャルホストで応答されます。
このようなことが何故起こるかもっと良く知るためには、
応答の必要なバーチャルホストへのリクエストに対して、
Apache がどのように整合性を確保するかについて、
深い議論が必要になります。おおざっぱな説明は<a
href="vhosts/details.html">こちら</a>に記述されています。</p>
</section>
<section id="main">
<title>$B!V<g%5!<%P!W%"%I%l%9(B</title>
<title>「主サーバ」アドレス</title>
<p>Apache 1.1 $B$G$N(B <a href="vhost/name-based.html"
>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$N%5%]!<%H(B</a> $BDI2C$N:]$K!"(B
Apache $B$O(B <program>httpd</program> $B$N<B9T$5$l$F$$$k%[%9%H$N(B IP
$B%"%I%l%9$rCN$kI,MW$,=P$F$-$^$7$?!#$3$N%"%I%l%9$rF@$k$?$a$K!"(B
($B$b$7$"$l$P(B) $B%0%m!<%P%k$J(B
<directive module="core">ServerName</directive> $B$r;HMQ$9$k$+!"(B
C $B8@8l$N4X?t(B <code>gethostname</code> ($B%3%^%s%I%W%m%s%W%H$G(B
<code>hostname</code> $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</p>
<p>Apache 1.1 での <a href="vhost/name-based.html"
>名前ベースのバーチャルホストのサポート</a> 追加の際に、
Apache <program>httpd</program> の実行されているホストの IP
アドレスを知る必要が出てきました。このアドレスを得るために、
(もしあれば) グローバルな
<directive module="core">ServerName</directive> を使用するか、
C 言語の関数 <code>gethostname</code> (コマンドプロンプトで
<code>hostname</code> とタイプしたときと同じものを返します)
を呼び出すかをします。
その後、得られたアドレスで DNS 検索を行ないます。
現在のところ、この DNS 検索を回避する方法はありません。</p>
<p>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<code>/etc/hosts</code>
$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 <code>/etc/hosts</code>
$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
<code>/etc/resolv.conf</code> $B$+(B <code>/etc/nsswitch.conf</code>
$B$rJT=8$9$k$3$H$G@_Dj$G$-$^$9!#(B</p>
<p>DNS サーバがダウンして、この検索ができない事態が起こることを
恐れているのであれば、<code>/etc/hosts</code>
にホスト名を記述しておくことができます
(マシンが正常に起動するように既に設定されているかもしれません)。
その場合、DNS 参照が失敗した場合にマシンが <code>/etc/hosts</code>
を使用するように設定していることを確認してください。
その方法は、どの OS を使用しているかに依存しますが、
<code>/etc/resolv.conf</code> <code>/etc/nsswitch.conf</code>
を編集することで設定できます。</p>
<p>$B$b$7B>$NM}M3$G(B DNS $B$rMxMQ$9$kI,MW$,$J$$>l9g$O!"(B
<code>HOSTRESORDER</code> $B4D6-JQ?t$r!V(B <code>local</code>
$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
<module>mod_env</module> $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</p>
<p>もし他の理由で DNS を利用する必要がない場合は、
<code>HOSTRESORDER</code> 環境変数を「 <code>local</code>
」に設定することでそのようにできます。以上これらの事柄は、どんな
OS 、レゾルバライブラリを使用しているかに依存します。また、
<module>mod_env</module> を使用して環境変数を制御しない限り、
CGI にも影響を与えます。man ページや使用している OS
の FAQ で調べると良いでしょう。</p>
</section>
<section id="tips">
<title>$B0J>e$NLdBj$r2r7h$9$kJ}K!(B</title>
<title>以上の問題を解決する方法</title>
<ul>
<li>
<directive module="core">VirtualHost</directive>
$B$G(B IP $B%"%I%l%9$r;HMQ$9$k!#(B
で IP アドレスを使用する。
</li>
<li>
<directive module="mpm_common">Listen</directive>
$B$G(B IP $B%"%I%l%9$r;HMQ$9$k!#(B
で IP アドレスを使用する。
</li>
<li>
$BA4$F$N%P!<%A%c%k%[%9%H$,L@<(E*$K(B
全てのバーチャルホストが明示的に
<directive module="core">ServerName</directive>
$B$r;}$D$h$&$K$9$k!#(B
を持つようにする。
</li>
<li>$B2?$b1~Ez$7$J$$(B
<li>何も応答しない
<code>&lt;VirtualHost _default_:*&gt;</code>
$B%5!<%P$r:n$k!#(B</li>
サーバを作る。</li>
</ul>
</section>
<section id="appendix">
<title>$BIUO?(B: $B>-MhE*$JJ}8~@-(B</title>
<title>付録: 将来的な方向性</title>
<p>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</p>
<p>DNS に関して、現状は全く宜しくありません。Apache 1.2 で、
DNS のイベントが失敗しても少なくとも起動プロセスが続くようにしましたが、
これが最高の解決方法ではないでしょう。アドレスの再割り当てが必要不可避
となっている今日のインターネットにおいては、
設定ファイルの中で明示的な IP アドレスを要求する仕様は、
全く宜しくありません。</p>
<p>$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}<T$K$O$*Fk@w$_$b$N$G$7$g$&(B)$B!#(B</p>
<p>盗用のサービスアタックに関して行なうべき事は、
DNS 順引きを行なって得られたアドレスに対する DNS
逆引きを行なって、二つの名前を比較することです。
この二つが一致しなければバーチャルホストは無効になるようにします。
こうするためには逆引き DNS が適切に設定されている必要があります
(FTP サーバや TCP ラッパーのおかげで「二重逆引き」DNS は一般的に
なっていますので、管理者にはお馴染みものでしょう)。</p>
<p>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$j3N<B$K0-$$>u67$K$J$k$G$7$g$&!#(B</p>
<p>IP アドレスが使用されていなくて DNS が失敗した場合は、
どうしてもバーチャルホストウェブサーバを信頼性を確保して
起動させることは不可能のようです。
設定の一部を無効にするというような部分的な解決では、
サーバが何をするようにするかにもよりますが、
そのサーバが起動しないより確実に悪い状況になるでしょう。</p>
<p>HTTP/1.1 $B$,3+H/$5$l!"%V%i%&%6$d%W%m%-%7$,(B <code>Host</code>
$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</p>
<p>HTTP/1.1 が開発され、ブラウザやプロキシが <code>Host</code>
ヘッダを発行するようになったので、IP ベースのバーチャルホストを
全く使用しなくても済むようになるかもしれません。
この場合、ウェブサーバは設定中に DNS 参照をしなくても済みます。
しかし 1997 年 3 月時点の状況では、
商用レベルのウェブサーバで使用できるほどには、
これらの機能は広く開発が進んでいません。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 420990:587444 (outdated) -->
@@ -22,25 +22,25 @@
<manualpage metafile="dso.xml.meta">
<title>$BF0E*6&M-%*%V%8%'%/%H(B (DSO) $B%5%]!<%H(B</title>
<title>動的共有オブジェクト (DSO) サポート</title>
<summary>
<p>Apache HTTP $B%5!<%P$O%b%8%e!<%k2=$5$l$?%W%m%0%i%`$G!"(B
$B4IM}<T$,%b%8%e!<%k$rA*Br$9$k$3$H$G%5!<%P$KAH$_9~$`5!G=$rA*$V$3$H$,$G$-$^$9!#(B
$B%b%8%e!<%k$O%5!<%P$,%S%k%I$5$l$k$H$-$K(B <program>httpd</program> $B%P%$%J%j$K(B
$B@EE*$KAH$_9~$`$3$H$,$G$-$^$9!#$b$7$/$O!"(B<program>httpd</program> $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 (<program>apxs</program>) $B$r(B
$B;H$C$F8e$G%3%s%Q%$%k$7$FDI2C$7$?$j$G$-$^$9!#(B</p>
<p>Apache HTTP サーバはモジュール化されたプログラムで、
管理者がモジュールを選択することでサーバに組み込む機能を選ぶことができます。
モジュールはサーバがビルドされるときに <program>httpd</program> バイナリに
静的に組み込むことができます。もしくは、<program>httpd</program> バイナリとは
別に存在する動的共有オブジェクト (訳注: Dynamic Shared Object)
(DSO) としてコンパイルすることも
できます。DSO モジュールはサーバがビルドされるときにコンパイルしたり、
Apache 拡張ツール (<program>apxs</program>)
使って後でコンパイルして追加したりできます。</p>
<p>$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</p>
<p>この文書は DSO モジュールの使い方と、仕組みについて
説明します。</p>
</summary>
<section id="implementation"><title>$B<BAu(B</title>
<section id="implementation"><title>実装</title>
<related>
<modulelist>
@@ -51,44 +51,44 @@
</directivelist>
</related>
<p>$B8D!9$N(B Apache $B%b%8%e!<%k$r%m!<%I$9$k$?$a$N(B DSO $B%5%]!<%H$O(B
<module>mod_so.c</module> $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 <module>core.c</module> $B0J30$G$O(B DSO $B$K$G$-$J$$M#0l$N(B
$B%b%8%e!<%k$G$9!#;v<B>e!"B>$N$9$Y$F$N(B Apache $B$N%b%8%e!<%k$O!"(B
<a href="install.html">$B%$%s%9%H!<%k$NJ8=q(B</a>$B$G@bL@$5$l$F$$$k$h$&$K!"(B
<program>configure</program> $B$N(B
<code>--enable-<em>module</em>=shared</code> $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
<code>mod_foo.so</code> $B$N$h$&$J(B DSO $B$K%b%8%e!<%k$,%3%s%Q%$%k$5$l$l$P!"(B
<code>httpd.conf</code> $B%U%!%$%kCf$G(B <module>mod_so</module> $B$N(B
<p>個々の Apache モジュールをロードするための DSO サポートは
<module>mod_so.c</module> というモジュールの機能に基づいています。
このモジュール は Apache のコアに静的に組み込まれている必要があります。
それは <module>core.c</module> 以外では DSO にできない唯一の
モジュールです。事実上、他のすべての Apache のモジュールは、
<a href="install.html">インストールの文書</a>で説明されているように、
<program>configure</program>
<code>--enable-<em>module</em>=shared</code> オプションでそれぞれを
DSO ビルドにすることにより、DSO モジュールにすることができます。
<code>mod_foo.so</code> のような DSO にモジュールがコンパイルされれば、
<code>httpd.conf</code> ファイル中で <module>mod_so</module>
<directive module="mod_so">LoadModule</directive>
$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</p>
ディレクティブを使うことでサーバの起動や再起動時にこのモジュールを
ロードするようにできます。</p>
<p>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!"(B<program>apxs</program>
(<dfn>APache eXtenSion</dfn>) $B$H$$$&?7$7$$%5%]!<%H%W%m%0%i%`$,$"$j$^$9!#(B
Apache $B$N%=!<%9%D%j!<$N(B<em>$B30$G(B</em> 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
<program>configure</program>$B!"(B<code>make install</code> $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 <program>apxs</program> $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</p>
<p>Apache モジュール用の (特にサードパーティモジュールの) DSO ファイルの
作成を簡単にするために、<program>apxs</program>
(<dfn>APache eXtenSion</dfn>) という新しいサポートプログラムがあります。
Apache のソースツリーの<em>外で</em> DSO モジュールをビルドするために
使うことができます。発想は単純です: Apache のインストール時の
<program>configure</program><code>make install</code> のときに Apache の
C ヘッダをインストールし、DSO ビルド用のプラットフォーム依存の
コンパイラとリンカのフラグを <program>apxs</program> プログラムに追加します。
これにより、ユーザが Apache の配布ソースツリーなしで、さらに
DSO サポートのためのプラットフォーム依存のコンパイラやリンカの
フラグをいじることなく Apache のモジュールのソースをコンパイル
できるようになります。</p>
</section>
<section id="usage"><title>$B;HMQK!$N35MW(B</title>
<section id="usage"><title>使用法の概要</title>
<p>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:</p>
<p>Apache 2.2 の DSO 機能の概略を知ることができるための、
短く簡潔な概要です:</p>
<ol>
<li>
<em>$BG[I[$5$l$F$$$k(B</em> Apache $B%b%8%e!<%k!"2>$K(B <code>mod_foo.c</code>
$B$H$7$F!"$=$l$r(B DSO <code>mod_foo.so</code> $B$K%S%k%I!"%$%s%9%H!<%k(B:
<em>配布されている</em> Apache モジュール、仮に <code>mod_foo.c</code>
として、それを DSO <code>mod_foo.so</code> にビルド、インストール:
<example>
$ ./configure --prefix=/path/to/install --enable-foo=shared<br />
@@ -97,8 +97,8 @@ $ make install
</li>
<li>
<em>$B%5!<%I%Q!<%F%#(B</em> Apache $B%b%8%e!<%k!"2>$K(B <code>mod_foo.c</code>
$B$H$7$F!"$=$l$r(B DSO <code>mod_foo.so</code> $B$K%S%k%I!"%$%s%9%H!<%k(B:
<em>サードパーティ</em> Apache モジュール、仮に <code>mod_foo.c</code>
として、それを DSO <code>mod_foo.so</code> にビルド、インストール:
<example>
$ ./configure --add-module=<var>module_type</var>:/path/to/3rdparty/mod_foo.c \<br />
@@ -110,8 +110,8 @@ $ make install
</li>
<li>
$B6&M-%b%8%e!<%k$N(B <em>$B8e!9$N%$%s%9%H!<%k(B</em> $B$N$?$a$K(B
Apache $B$r@_Dj(B:
共有モジュールの <em>後々のインストール</em> のために
Apache を設定:
<example>
$ ./configure --enable-so<br />
@@ -120,9 +120,9 @@ $ make install
</li>
<li>
<em>$B%5!<%I%Q!<%F%#(B</em> Apache $B%b%8%e!<%k!"2>$K(B <code>mod_foo.c</code>
$B$H$7$F!"$=$l$r(B <program>apxs</program> $B$r;H$C$F(B
Apache $B%=!<%9%D%j!<$N(B<em>$B30$G(B</em> DSO $B$K%S%k%I!"%$%s%9%H!<%k(B:
<em>サードパーティ</em> Apache モジュール、仮に <code>mod_foo.c</code>
として、それを <program>apxs</program> を使って
Apache ソースツリーの<em>外で</em> DSO にビルド、インストール:
<example>
$ cd /path/to/3rdparty<br />
@@ -132,161 +132,161 @@ $ apxs -i -a -n foo mod_foo.la
</li>
</ol>
<p>$B$I$N>l9g$K$*$$$F$b!"6&M-%b%8%e!<%k$r%3%s%Q%$%k$7$?8e$G!"(B
<code>httpd.conf</code> $B$G(B
<p>どの場合においても、共有モジュールをコンパイルした後で、
<code>httpd.conf</code>
<directive module="mod_so">LoadModule</directive>
$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</p>
ディレクティブを使って Apache がモジュールを使用するように
しなければなりません。</p>
</section>
<section id="background"><title>$BGX7J(B</title>
<section id="background"><title>背景</title>
<p>$B:G6a$N(B Unix $B7O$N(B OS $B$K$O(B <em>$BF0E*6&M-%*%V%8%'%/%H(B</em> (DSO)
$B$NF0E*%j%s%/(B/$B%m!<%I$H$$$&5$$N$-$$$?5!9=$,(B
$BB8:_$7$^$9!#$3$l$O!"<B9T;~$K%W%m%0%i%`$N%"%I%l%96u4V$K(B
$B%m!<%I$G$-$k$h$&$JFCJL$J7A<0$G%W%m%0%i%`$r%S%k%I$9$k$3$H$r(B
$B2DG=$K$7$^$9!#(B</p>
<p>最近の Unix 系の OS には <em>動的共有オブジェクト</em> (DSO)
の動的リンク/ロードという気のきいた機構が
存在します。これは、実行時にプログラムのアドレス空間に
ロードできるような特別な形式でプログラムをビルドすることを
可能にします。</p>
<p>$B$3$N%m!<%I$OFs$D$NJ}K!$G9T$J$&$3$H$,$G$-$^$9(B: $B<B9T%W%m%0%i%`$,(B
$B5/F0$5$l$?$H$-$K(B <code>ld.so</code> $B$H$$$&%7%9%F%`%W%m%0%i%`(B
$B$K$h$j<+F0E*$K9T$J$o$l$kJ}K!$H!"<B9T%W%m%0%i%`Cf$+$i!"%7%9%F%`%3!<%k(B
<code>dlopen()/dlsym()</code> $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<jF0$G9T$J$&J}K!$H$,(B
$B$"$j$^$9!#(B</p>
<p>このロードは二つの方法で行なうことができます: 実行プログラムが
起動されたときに <code>ld.so</code> というシステムプログラム
により自動的に行なわれる方法と、実行プログラム中から、システムコール
<code>dlopen()/dlsym()</code> による Unix ローダへの
プログラムシステムのインタフェースを使って手動で行なう方法とが
あります。</p>
<p>$B:G=i$NJ}K!$G$O(B DSO $B$OIaDL$O(B<em>$B6&M-%i%$%V%i%j(B</em>$B$d(B <em>DSO
$B%i%$%V%i%j(B</em> $B$H8F$P$l$F$$$F!"(BDSO $B$NL>A0$O(B
<code>libfoo.so</code> $B$d(B <code>libfoo.so.1.2</code> $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 <code>/usr/lib</code>) $B$KB8:_$7!"(B
$B<B9T%W%m%0%i%`$X$N%j%s%/$O%S%k%I;~$K(B <code>-lfoo</code> $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$,<B9T%W%m%0%i%`$N(B
$B%U%!%$%k$K=q$-9~$^$l$F!"5/F0;~$K(B Unix $B$N%m!<%@$,(B <code>/usr/lib</code> $B$d!"(B
$B%j%s%+$N(B <code>-R</code> $B$N$h$&$J%*%W%7%g%s$K$h$j%O!<%I%3!<%I$5$l$?%Q%9!"(B
$B4D6-JQ?t(B <code>LD_LIBRARY_PATH</code> $B$K$h$j@_Dj$5$l$?%Q%9!"$NCf$+$i(B
<code>libfoo.so</code> $B$N>l=j$r8+$D$1$k$3$H$,$G$-$^$9!#$=$l$+$i!"(B
$B<B9T%W%m%0%i%`Cf$N(B ($B$^$@L$2r7h$N(B) $B%7%s%\%k$r(B DSO $B$K$"$k%7%s%\%k$G(B
$B2r7h$7$^$9!#(B</p>
<p>最初の方法では DSO は普通は<em>共有ライブラリ</em>や <em>DSO
ライブラリ</em> と呼ばれていて、DSO の名前は
<code>libfoo.so</code> <code>libfoo.so.1.2</code> のようになっています。
これらはシステムディレクトリ (通常 <code>/usr/lib</code>) に存在し、
実行プログラムへのリンクはビルド時に <code>-lfoo</code> をリンカに
指定することで確立されます。これによりライブラリへの参照が実行プログラムの
ファイルに書き込まれて、起動時に Unix のローダが <code>/usr/lib</code> や、
リンカの <code>-R</code> のようなオプションによりハードコードされたパス、
環境変数 <code>LD_LIBRARY_PATH</code> により設定されたパス、の中から
<code>libfoo.so</code> の場所を見つけることができます。それから、
実行プログラム中の (まだ未解決の) シンボルを DSO にあるシンボルで
解決します。</p>
<p>$BIaDL$O<B9T%W%m%0%i%`Cf$N%7%s%\%k$O(B DSO $B$+$i$O;2>H$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!"<B9T%U%!%$%k<+?H$O(B
$B2?$b$9$kI,MW$,$"$j$^$;$s!#(B($B<B:]$N$H$3$m!"@EE*$G$J$$J}K!$G%j%s%/$5$l$F$$$k(B
$B$9$Y$F$N<B9T%W%m%0%i%`$KAH$_9~$^$l$F$$$k3+;OMQ$N%3!<%I$N0lIt$K(B
<code>ld.so</code> $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 <code>libc.so</code> $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</p>
<p>普通は実行プログラム中のシンボルは DSO からは参照されません
(DSO は一般的なコードによる再利用可能なライブラリですので)。
ですから、さらなるシンボルの解決は必要ありません。
シンボルは Unix ローダにより完全な解決が行なわれますので、実行ファイル自身は
何もする必要がありません。(実際のところ、静的でない方法でリンクされている
すべての実行プログラムに組み込まれている開始用のコードの一部に
<code>ld.so</code> を起動するコードが含まれています)。よく使われる
ライブラリの動的ロードの利点は明らかです。ライブラリのコードは
システムライブラリに <code>libc.so</code> のようにして一度保存するだけでよく、
プログラムのために必要なディスクの領域を節約することができます。</p>
<p>$BFs$D$a$NJ}K!$G$O(B DSO $B$OIaDL$O(B<em>$B6&M-%*%V%8%'%/%H(B</em>$B$d(B
<em>DSO $B%U%!%$%k(B</em>$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 <code>foo.so</code> $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$&<B9T%W%m%0%i%`$X$N%j%s%/$O<+F0E*$K$O$5$l$^$;$s!#(B
$B$G$9$N$G!"<B9T%W%m%0%i%`$O(B <code>dlopen()</code> $B$r;H$C$F(B
$B<B9T;~$K<jF0$G(B DSO $B$r%W%m%0%i%`$N%"%I%l%96u4V$K%m!<%I$9$kI,MW$,$"$j$^$9!#(B
$B$3$N;~E@$G$O<B9T%W%m%0%i%`$KBP$7$F(B DSO $B$N%7%s%\%k$N2r7h$O9T$J$o$l$^$;$s!#(B
$B$7$+$7!"$=$NBe$o$j$K(B Unix $B$N%m!<%@$,(B DSO $B$N(B ($B$^$@L$2r7h$N(B) $B%7%s%\%k$r(B
$B<B9T%W%m%0%i%`$K$h$j%(%/%9%]!<%H$5$l$?%7%s%\%k$H4{$K%m!<%I$5$l$?(B
DSO $B%i%$%V%i%j$K$h$j%(%/%9%]!<%H$5$l$?%7%s%\%k(B ($BFC$K!"$I$3$K$G$b$"$k(B
<code>libc.so</code> $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<B9T%W%m%0%i%`$N%7%s%\%k$rCN$k$3$H$,$G$-$^$9!#(B</p>
<p>二つめの方法では DSO は普通は<em>共有オブジェクト</em>や
<em>DSO ファイル</em>と呼ばれていて、任意の拡張子を付けることができます
(ただし、標準的な名前は <code>foo.so</code> です)。
これらのファイルは通常はプログラム専用のディレクトリに置かれ、
これらを使う実行プログラムへのリンクは自動的にはされません。
ですので、実行プログラムは <code>dlopen()</code> を使って
実行時に手動で DSO をプログラムのアドレス空間にロードする必要があります。
この時点では実行プログラムに対して DSO のシンボルの解決は行なわれません。
しかし、その代わりに Unix のローダが DSO の (まだ未解決の) シンボルを
実行プログラムによりエクスポートされたシンボルと既にロードされた
DSO ライブラリによりエクスポートされたシンボル (特に、どこにでもある
<code>libc.so</code> のすべてのシンボル) で自動的に解決します。
こうすることで、DSO は最初から静的にリンクされていたかのように、
実行プログラムのシンボルを知ることができます。</p>
<p>$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<em>$B$J$I(B</em>$B$G%7%s%\%k$r;H$&$3$H$,$G$-$k$h$&$K!"(B
<code>dlsym()</code> $B$r;H$C$F$$$/$D$+$N%7%s%\%k$r2r7h$7$^$9!#(B
$B$9$J$o$A(B: $B<B9T%W%m%0%i%`$OI,MW$J$9$Y$F$N%7%s%\%k$r<jF0$G2r7h$7$J$1$l$P(B
$B$J$j$^$;$s!#$3$N5!9=$NMxE@$O%W%m%0%i%`$N%*%W%7%g%J%k$JItJ,$O(B
$BI,MW$K$J$k$^$G%m!<%I$9$kI,MW$,$J$$(B ($B$@$+$i%a%b%j$b>CHq$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</p>
<p>最後に、DSO の API を利点を生かすために、プログラムは
後でディスパッチテーブル<em>など</em>でシンボルを使うことができるように、
<code>dlsym()</code> を使っていくつかのシンボルを解決します。
すなわち: 実行プログラムは必要なすべてのシンボルを手動で解決しなければ
なりません。この機構の利点はプログラムのオプショナルな部分は
必要になるまでロードする必要がない (だからメモリも消費しない)
ことです。必要ならば、基本プログラムの機能を拡張するために
これらの部分を動的にロードすることができます。</p>
<p>$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$,<B9T%W%m%0%i%`$+$i%7%s%\%k$r2r7h$9$kE@$G$9(B ($BFsHVL\$NJ}K!(B)$B!#(B
$B$3$l$O$J$<$G$7$g$&$+!#$=$l$O!"(BDSO $B$N%7%s%\%k$r<B9T%W%m%0%i%`$N(B
$B%7%s%\%k$+$i!V5U2r7h!W$9$k$H$$$&$N$O%i%$%V%i%j$N@_7W(B
($B%i%$%V%i%j$O$=$l$r;HMQ$9$k%W%m%0%i%`$N$3$H$O2?$b(B
$BCN$i$J$$(B) $B$KH?$7$F$$$F!"$3$N5!G=$O$9$Y$F$N%W%i%C%H%U%)!<%`$K(B
$B$"$k$o$1$G$O$J$/!"I8=`2=$b$5$l$F$$$J$$$+$i$G$9!#(B
$B<B:]$K$O<B9T%W%m%0%i%`$N%0%m!<%P%k$J%7%s%\%k$O:F%(%/%9%]!<%H$5$l$k$3$H$O(B
$B$"$^$j$J$/!"(BDSO $B$+$i;H$&$3$H$,$G$-$^$;$s!#%j%s%+$K%0%m!<%P%k%7%s%\%k$9$Y$F$r(B
$B%(%/%9%]!<%H$9$k$h$&$K$5$;$kJ}K!$r8+$D$1$k$3$H$,!"<B9T;~$K%W%m%0%i%`$r(B
$B3HD%$9$k$?$a$K(B DSO $B$r;H$&$H$-$N0lHV$NLdBj$G$9!#(B</p>
<p>この DSO 機構は簡単なように見えますが、少なくとも一つ難しい点が
あります: プログラムを拡張するために DSO を使っているときに、
DSO が実行プログラムからシンボルを解決する点です (二番目の方法)。
これはなぜでしょうか。それは、DSO のシンボルを実行プログラムの
シンボルから「逆解決」するというのはライブラリの設計
(ライブラリはそれを使用するプログラムのことは何も
知らない) に反していて、この機能はすべてのプラットフォームに
あるわけではなく、標準化もされていないからです。
実際には実行プログラムのグローバルなシンボルは再エクスポートされることは
あまりなく、DSO から使うことができません。リンカにグローバルシンボルすべてを
エクスポートするようにさせる方法を見つけることが、実行時にプログラムを
拡張するために DSO を使うときの一番の問題です。</p>
<p>$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<oN`$N%i%$%V%i%j$G;H$o$l$F$$$^$9!#(B
$B0lJ}!"%W%m%0%i%`$N3HD%$N$?$a$K6&M-%*%V%8%'%/%H$r;HMQ$9$k!"$H$$$&J}$O(B
$B$"$^$j;H$o$l$F$$$^$;$s!#(B</p>
<p>共有ライブラリのアプローチが普通の方法です。DSO 機構はそのために
設計されたものですから。したがって、その方法はオペレーティングシステムが
提供するほとんどすべての種類のライブラリで使われています。
一方、プログラムの拡張のために共有オブジェクトを使用する、という方は
あまり使われていません。</p>
<p>1998 $BG/$N;~E@$G!"<B9T;~$K<B:]$K5!G=3HD%$N$?$a$K(B DSO $B5!9=$r;H$C$F$$$k(B
$B%=%U%H%&%'%"%Q%C%1!<%8$O>/$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<em>$B$J$I(B</em>$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<B9T;~$K(B DSO $B$r;H$C$F%b%8%e!<%k$r%m!<%I$9$k$h$&$K$9$G$K(B
$B1?L?IU$1$i$l$F$$$?$N$G$9!#(B</p>
<p>1998 年の時点で、実行時に実際に機能拡張のために DSO 機構を使っている
ソフトウェアパッケージは少しだけでした: Perl 5 (XS 機構と DnaLoader モジュール
によるもの)、Netscape サーバ<em>など</em>です。Apache はすでに
モジュールの概念を使って機能拡張をしていて、内部的にディスパッチリストに
基づいた外部モジュールの Apache コア機能へのリンクを行なっていましたので、
バージョン 1.3 から、Apache も DSO 機構を使う仲間になりました。
Apache は実行時に DSO を使ってモジュールをロードするようにすでに
運命付けられていたのです。</p>
</section>
<section id="advantages"><title>$BMxE@$H7gE@(B</title>
<section id="advantages"><title>利点と欠点</title>
<p>$B>e5-$N(B DSO $B$K4p$E$$$?5!G=$O0J2<$NMxE@$,$"$j$^$9(B:</p>
<p>上記の DSO に基づいた機能は以下の利点があります:</p>
<ul>
<li>$B<B:]$N%5!<%P%W%m%;%9$rAH$_N)$F$k$?$a$K!"(B
$B%S%k%I;~$K(B <code>configure</code> $B$N%*%W%7%g%s$r;H$&Be$o$j$K(B
$B<B9T;~$K(B <code>httpd.conf</code> $B$N@_DjMQ%3%^%s%I(B
<li>実際のサーバプロセスを組み立てるために、
ビルド時に <code>configure</code> のオプションを使う代わりに
実行時に <code>httpd.conf</code> の設定用コマンド
<directive module="mod_so">LoadModule</directive>
$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]
<em>$B$J$I(B</em>) $B$r<B9T$9$k$3$H$,$G$-$^$9!#(B</li>
を使うことができますので、サーバパッケージの柔軟性が高まりました。
たとえば、一つの Apache のインストールから
違う構成のサーバ (標準版と SSL 版、最小構成と拡張版 [mod_perl, PHP3]
<em>など</em>) を実行することができます。</li>
<li>$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 <em>$B$J$I(B</em> $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}<T$K$H$C$F(B
$BBg$-$JMxE@$,$"$j$^$9!#(B</li>
<li>インストールの後であっても、サーバのパッケージをサードパーティ
モジュールで簡単に拡張できるようになりました。これは、Apache コア
パッケージと、PHP3, mod_perl, mod_fastcgi <em>など</em> の追加の
パッケージを作成できるので、少なくともベンダのパッケージ管理者にとって
大きな利点があります。</li>
<li>Apache $B%b%8%e!<%k$N3+H/$,4JC1$K$J$j$^$9!#(B
$B$3$l$O(B DSO $B$H(B <program>apxs</program> $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
$B<B9TCf$N(B Apache $B%5!<%P$KAH$_9~$`$?$a$K(B <code>apxs -i</code> $B$H(B
<code>apachectl restart</code> $B$r9T$J$&$@$1$GNI$/$J$k$+$i$G$9!#(B</li>
<li>Apache モジュールの開発が簡単になります。
これは DSO と <program>apxs</program> の組み合わせにより、Apache ソースツリーの
外で作業でき、開発中のモジュールの新しいバージョンを
実行中の Apache サーバに組み込むために <code>apxs -i</code>
<code>apachectl restart</code> を行なうだけで良くなるからです。</li>
</ul>
<p>DSO $B$K$O0J2<$N7gE@$,$"$j$^$9(B:</p>
<p>DSO には以下の欠点があります:</p>
<ul>
<li>$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</li>
<li>すべてのオペレーティングシステムがプログラムのアドレス空間に
コードを動的ロードすることをサポートしているわではないので、
プラットフォームによっては DSO 機構は使えません。</li>
<li>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</li>
<li>Unix のローダがシンボルの解決をする必要ができたので、
そのオーバヘッドによりサーバの起動時間が約 20% 遅くなっています。</li>
<li>$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<B9TB.EY$,Ls(B 5% $BCY$/$J$j$^$9!#(B</li>
<li>位置非依存コード (PIC) (訳注 position independent code)
相対アドレスのために複雑なアセンブラのトリックが必要なことがあり、
それは必ずしも絶対アドレスと同じくらいの速度がでるわけではありませんので、
プラットフォームによってはサーバの実行速度が約 5% 遅くなります。</li>
<li>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 (<code>ld -lfoo</code>)
$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$N<oN`$N%b%8%e!<%k$K(B DSO $B5!9=$r;H$($k$o$1$G$O$"$j$^$;$s!#(B
$B8@$$49$($k$H!"(BDSO $B%U%!%$%k$H$7$F%3%s%Q%$%k$5$l$?%b%8%e!<%k$N(B
$B;H$($k%7%s%\%k$O!"(B
Apache $B$N%3%"$N%7%s%\%k!"(BC $B%i%$%V%i%j(B (<code>libc</code>) $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 (<code>libfoo.a</code>) $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
<code>dlopen ()</code> $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</li>
<li>DSO モジュールはすべてのプラットフォームで他の DSO に基づいた
ライブラリに対してリンクできる (<code>ld -lfoo</code>)
というわけではありませんので (たとえば、a.out のプラットフォームでは
この機能はありませんが、ELF のプラットフォームにはあります)、
すべての種類のモジュールに DSO 機構を使えるわけではありません。
言い換えると、DSO ファイルとしてコンパイルされたモジュールの
使えるシンボルは、
Apache のコアのシンボル、C ライブラリ (<code>libc</code>)
Apache コアが使っている他のすべての静的なライブラリと動的ライブラリの
シンボル、PIC による静的なライブラリ (<code>libfoo.a</code>)
シンボルのみに制限されます。その他のコードを使う方法は、
Apache コア自身がすでにそのコードへの参照があるようにするか、
<code>dlopen ()</code> を使ってコードを自分自身でロードするかの
どちらかしかありません。</li>
</ul>
</section>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 420990:659902 (outdated) -->
@@ -22,28 +22,28 @@
<manualpage metafile="env.xml.meta">
<title>Apache $B$N4D6-JQ?t(B</title>
<title>Apache の環境変数</title>
<summary>
<p>Apache HTTP $B%5!<%P$O(B<em>$B4D6-JQ?t(B</em>$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</p>
<p>Apache HTTP サーバは<em>環境変数</em>と呼ばれる、名前のついた
変数に情報を記憶する仕組みを提供しています。この情報はログ収集や
アクセス制御などのいろいろな操作を制御するために使うことができます。
これらの変数は CGI スクリプトなどの外部プログラムと通信するためにも
使われます。この文書はそれらの変数の操作方法と使用方法をいくつか
紹介します。</p>
<p>$B$3$l$i$NJQ?t$O(B<em>$B4D6-JQ?t(B</em>$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
$B<B:]$O!"$3$l$i$NJQ?t$O(B Apache $B$NFbIt9=B$$NCf$K5-21$5$l!"A`:n$5$l$F$$$^$9!#(B
$B$=$l$i$O!"(BCGI $B$d(B SSI $B%9%/%j%W%H$KEO$5$l$?$H$-$@$1!"<B:]$N(B
$B%*%Z%l!<%F%#%s%0%7%9%F%`$N4D6-JQ?t$K$J$j$^$9!#%5!<%P<+?H$,(B
$B<B9T$5$l$F$$$k%*%Z%l!<%F%#%s%0%7%9%F%`$N4D6-$rA`:n$7$?$$>l9g$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</p>
<p>これらの変数は<em>環境変数</em>と呼ばれていますが、オペレーティング
システムによって制御されている環境変数と同じではありません。
実際は、これらの変数は Apache の内部構造の中に記憶され、操作されています。
それらは、CGI や SSI スクリプトに渡されたときだけ、実際の
オペレーティングシステムの環境変数になります。サーバ自身が
実行されているオペレーティングシステムの環境を操作したい場合は、
オペレーティングシステムのシェルが提供している標準の環境変数の
操作方法を使わなければなりません。</p>
</summary>
<section id="setting">
<title>$B4D6-JQ?t$N@_Dj(B</title>
<title>環境変数の設定</title>
<related>
<modulelist>
<module>mod_env</module>
@@ -64,71 +64,71 @@
</related>
<section id="basic-manipulation">
<title>$B4pK\E*$J4D6-$NA`:n(B</title>
<title>基本的な環境の操作</title>
<p>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 <directive module="mod_env"
>SetEnv</directive> $B%G%#%l%/%F%#%V$r;HMQ$9$k$3$H$G$9!#(B
<p>Apache において環境変数を設定する一番基本的な方法は、
無条件に環境変数を設定する <directive module="mod_env"
>SetEnv</directive> ディレクティブを使用することです。
<directive module="mod_env">PassEnv</directive>
$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</p>
ディレクティブにより、Apache が起動されたシェルの
環境変数を渡すこともできます。</p>
</section>
<section id="conditional">
<title>$B%j%/%(%9%HKh$K>r7o$K4p$E$$$F@_Dj$9$k(B</title>
<title>リクエスト毎に条件に基づいて設定する</title>
<p>$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 <directive module="mod_rewrite">RewriteRule</directive>
$B%G%#%l%/%F%#%V$K$*$$$F4D6-JQ?t$r@_Dj$9$k(B <code>[E=...]</code>
$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</p>
<p>より柔軟性を高めるために、mod_setenvif
で提供されているディレクティブを使用することで、リクエストの
特性に基づいて環境変数を設定することができます。例えば、特定のブラウザ
(User-Agent) のリクエストや特定の Referer [意図的な綴りです]
(訳注: 正しい綴りは referrer ですが、HTTP の仕様では Referer
となっています) ヘッダが見つかったときのみ変数を設定することができます。
mod_rewrite <directive module="mod_rewrite">RewriteRule</directive>
ディレクティブにおいて環境変数を設定する <code>[E=...]</code>
オプションを使用することで、
より柔軟な設定を行なうことができます。</p>
</section>
<section id="unique-identifiers">
<title>$B0l0U$J<1JL;R(B</title>
<title>一意な識別子</title>
<p>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
<code>UNIQUE_ID</code> $B$K@_Dj$7$^$9!#(B</p>
<p>mod_unique_id は、非常に限られた条件の下で
「すべて」のリクエストについて、一意であることが保証されている値を環境変数
<code>UNIQUE_ID</code> に設定します。</p>
</section>
<section id="standard-cgi">
<title>$BI8=`(B CGI $BJQ?t(B</title>
<title>標準 CGI 変数</title>
<p>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 <a
href="http://cgi-spec.golux.com">CGI $B$N;EMM(B</a>$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</p>
<p>Apache の設定ファイルで設定された環境変数とシェルから渡される
環境変数に加えて、CGI スクリプトと SSI ページには <a
href="http://cgi-spec.golux.com">CGI の仕様</a>で要求されている、
リクエストのメタ情報を持った環境変数の組が提供されます。</p>
</section>
<section id="caveats">
<title>$B$$$/$D$+$NCm0U(B</title>
<title>いくつかの注意</title>
<ul>
<li>$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</li>
<li>環境を操作するディレクティブを使って標準 CGI
変数を上書きしたり変更したりすることはできません。</li>
<li>CGI $B%9%/%j%W%H$r5/F0$9$k$?$a$K(B <program>suexec</program>
$B$,;HMQ$5$l$F$$$k>l9g!"(BCGI $B%9%/%j%W%H$,5/F0$9$k$?$a$K!"4D6-JQ?t$O(B<em
>$B0BA4(B</em>$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 <code>suexec.c</code>
$B$GDj5A$5$l$^$9!#(B</li>
<li>CGI スクリプトを起動するために <program>suexec</program>
が使用されている場合、CGI スクリプトが起動するために、環境変数は<em
>安全</em>な環境変数の組に整理されます。
この安全な環境変数の集合は、コンパイル時に <code>suexec.c</code>
で定義されます。</li>
<li>$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</li>
<li>移植性のために、環境変数の名前はアルファベット、
数字とアンダースコア (訳注: '_') だけから成ります。
さらに、最初の文字は数字であってはいけません。
この制限に合わない文字は CGI スクリプトと SSI
ページに渡されるときにアンダースコアに置換されます。</li>
</ul>
</section>
</section>
<section id="using">
<title>$B4D6-JQ?t$N;HMQ(B</title>
<title>環境変数の使用</title>
<related>
<modulelist>
@@ -153,168 +153,168 @@
</related>
<section id="cgi-scripts">
<title>CGI $B%9%/%j%W%H(B</title>
<title>CGI スクリプト</title>
<p>$B4D6-JQ?t$N<g$JMxMQK!$N0l$D$O!"(BCGI $B%9%/%j%W%H$K>pJs$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 <a href="howto/cgi.html">CGI $B%A%e!<%H%j%"%k(B</a>
$B$r;2>H$7$F$/$@$5$$!#(B</p>
<p>環境変数の主な利用法の一つは、CGI スクリプトに情報を伝えることです。
上で説明されているように、CGI スクリプトに渡される環境変数は Apache
の設定により設定される変数に加えて、リクエストの標準のメタ情報を含んでいます。
詳細は <a href="howto/cgi.html">CGI チュートリアル</a>
を参照してください。</p>
</section>
<section id="ssi-pages">
<title>SSI $B%Z!<%8(B</title>
<title>SSI ページ</title>
<p>mod_include $B$N(B <code>INCLUDES</code> $B%U%#%k%?$G=hM}$5$l$k(B
server-parsed (SSI) $B%I%-%e%a%s%H$G$O!"(B<code>echo</code>
$BMWAG$r;HMQ$9$k$H4D6-JQ?t$,=PNO$5$l$^$9!#(B
$B$^$?!"%Z!<%8$N$"$kItJ,$,%j%/%(%9%H$N@-<A$K1~$8$FJQ99$5$l$k$h$&$K!"(B
$B4D6-JQ?t$r%U%m!<@)8fMWAG$G;H$&$3$H$,$G$-$^$9!#>\:Y$O(B
<a href="howto/ssi.html">SSI $B%A%e!<%H%j%"%k(B</a> $B$r;2>H$7$F$/$@$5$$!#(B</p>
<p>mod_include <code>INCLUDES</code> フィルタで処理される
server-parsed (SSI) ドキュメントでは、<code>echo</code>
要素を使用すると環境変数が出力されます。
また、ページのある部分がリクエストの性質に応じて変更されるように、
環境変数をフロー制御要素で使うことができます。詳細は
<a href="howto/ssi.html">SSI チュートリアル</a> を参照してください。</p>
</section>
<section id="access-control">
<title>$B%"%/%;%9@)8f(B</title>
<title>アクセス制御</title>
<p><code>allow from env=</code> $B%G%#%l%/%F%#%V$H(B <code>deny from env=</code>
$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
<p><code>allow from env=</code> ディレクティブと <code>deny from env=</code>
ディレクティブを使用して、サーバへのアクセスを環境変数の値で制御することができます。
<directive module="mod_setenvif">SetEnvIf</directive>
$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</p>
ディレクティブと組み合わせることで、クライアントの特性に基づいて
サーバへのアクセス制御を柔軟に行なうことができるようになります。
たとえば、これらのディレクティブを使用して、特定のブラウザ (User-Agent)
からのアクセスを拒否することができます。</p>
</section>
<section id="logging">
<title>$B>r7oIU$-%m%05-O?(B</title>
<title>条件付きログ記録</title>
<p><directive module="mod_log_config">LogFormat</directive>
$B%G%#%l%/%F%#%V$N%*%W%7%g%s(B <code>%e</code>
$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
ディレクティブのオプション <code>%e</code>
を使用することで、環境変数をアクセスログに記録することができます。さらに、
<directive module="mod_log_config">CustomLog</directive>
$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
ディレクティブの条件分岐式を使用することで、
環境変数の値によってリクエストをログに記録するかどうかを決めることができます。
<directive module="mod_setenvif">SetEnvIf</directive>
$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
<code>gif</code> $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</p>
ディレクティブと組み合わせることで、
どのリクエストをログに記録するかを柔軟に制御することが可能になります。たとえば、
<code>gif</code> で終わるファイル名へのリクエストはログに記録しない、
違うサブネットのクライアントからのリクエストだけをログに記録する、
という選択が可能です。</p>
</section>
<section id="response-headers">
<title>$B>r7oIU$-1~Ez%X%C%@(B</title>
<title>条件付き応答ヘッダ</title>
<p><directive module="mod_headers">Header</directive>
$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</p>
ディレクティブは環境変数の存在や不在によってクライアントへの応答に特定の
HTTP ヘッダを付けるかどうかを決めることができます。
これにより、たとえば、クライアントからのリクエスト
にあるヘッダがある場合にのみ特定の応答ヘッダを送る、というようなことが
できます。</p>
</section>
<section id="external-filter">
<title>$B30It%U%#%k%?$NE,MQ(B</title>
<title>外部フィルタの適用</title>
<p><directive module="mod_ext_filter">ExtFilterDefine</directive>
$B%G%#%l%/%F%#%V$r;HMQ$7$F(B
<module>mod_ext_filter</module> $B$G@_Dj$5$l$k30It%U%#%k%?$O!"(B
<code>disableenv=</code> $B$H(B <code>enableenv=</code>
$B%*%W%7%g%s$r;H$C$F!"4D6-JQ?t$K$h$k>r7oIU$-E,MQ$,$G$-$^$9!#(B</p>
ディレクティブを使用して
<module>mod_ext_filter</module> で設定される外部フィルタは、
<code>disableenv=</code> <code>enableenv=</code>
オプションを使って、環境変数による条件付き適用ができます。</p>
</section>
<section id="url-rewriting">
<title>URL $B$N=q$-49$((B</title>
<title>URL の書き換え</title>
<p><directive module="mod_rewrite">RewriteCond</directive>
$B%G%#%l%/%F%#%V$G(B<em>$BI>2AJ8;zNs(B</em>$B$H$7$F(B
<code>%{ENV:...}</code> $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 <code>ENV:</code> $B$,A0$K$D$$$F$$$J$$JQ?t$O!"(B
$B<B:]$O4D6-JQ?t$G$O$J$$$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B
$B$=$l$i$OB>$N%b%8%e!<%k$+$i$O;HMQ$G$-$J$$(B mod_rewrite $BMQ$NFCJL$JJQ?t$G$9!#(B
ディレクティブで<em>評価文字列</em>として
<code>%{ENV:...}</code> 式を指定することで、mod_rewrite
の書き換えエンジンが環境変数に基いて条件分岐を行なうことができます。
mod_rewrite が使用可能な変数で <code>ENV:</code> が前についていない変数は、
実際は環境変数ではないということに注意してください。
それらは他のモジュールからは使用できない mod_rewrite 用の特別な変数です。
</p>
</section>
</section>
<section id="special">
<title>$BFCJL$JL\E*$N4D6-JQ?t(B</title>
<title>特別な目的の環境変数</title>
<p>$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
<p>互換性の問題を解決するために、特定のクライアントと通信しているときは
Apache の動作を変更できる機構が導入されました。できるだけ柔軟にするために、
これらの機構は環境変数を定義することで呼び出されます。普通は、
<directive module="mod_setenvif">BrowserMatch</directive>
$B%G%#%l%/%F%#%V$r;H$$$^$9$,!"$?$H$($P(B <directive module="mod_env"
>SetEnv</directive> $B%G%#%l%/%F%#%V$d(B <directive module="mod_env"
>PassEnv</directive> $B%G%#%l%/%F%#%V$b;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
ディレクティブを使いますが、たとえば <directive module="mod_env"
>SetEnv</directive> ディレクティブや <directive module="mod_env"
>PassEnv</directive> ディレクティブも使用することができます。</p>
<section id="downgrade">
<title>downgrade-1.0</title>
<p>$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</p>
<p>これを指定することで、リクエストが HTTP/1.0
より新しいプロトコルの場合でも、HTTP/1.0 として扱われます。</p>
</section>
<section id="force-gzip">
<title>force-gzip</title>
<p><code>DEFLATE</code> $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</p>
<p><code>DEFLATE</code> フィルタが使用するように設定されているときに、
この環境変数はブラウザの accept-encoding の設定を無視して常に
圧縮された出力を送るようにします。</p>
</section>
<section id="force-no-vary">
<title>force-no-vary</title>
<p>$B1~Ez%X%C%@$,%/%i%$%"%s%H$KAw$i$l$kA0$K(B <code>Vary</code>
$B%U%#!<%k%I$r<h$j=|$-$^$9!#(B
$B%/%i%$%"%s%H$NCf$K$O$3$N%U%#!<%k%I$r@5$7$/2r<a$7$J$$$b$N$,$"$j$^$9!#(B
$B$3$NJQ?t$r@_Dj$9$k$3$H$G$=$NLdBj$r2sHr$9$k$3$H$,$G$-$^$9!#(B
$B$3$NJQ?t$r@_Dj$9$k$H!"(B<strong>force-response-1.0</strong>
$B$,@_Dj$5$l$?$3$H$K$J$j$^$9!#(B</p>
<p>応答ヘッダがクライアントに送られる前に <code>Vary</code>
フィールドを取り除きます。
クライアントの中にはこのフィールドを正しく解釈しないものがあります。
この変数を設定することでその問題を回避することができます。
この変数を設定すると、<strong>force-response-1.0</strong>
が設定されたことになります。</p>
</section>
<section id="force-response">
<title>force-response-1.0</title>
<p>$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<BAu$5$l$^$7$?!#(BHTTP/1.0 $B%/%i%$%"%s%H$NCf$K$O!"(B
HTTP/1.1 $B$N1~Ez$rJV$5$l$k$H@5$7$/F0:n$7$J$$$b$N$,$"$k$+$b$7$l$^$;$s!#(B
$B$3$N5!G=$r;HMQ$9$k$3$H$G!"$=$N$h$&$J%/%i%$%"%s%H$H$N4V$N8_49@-LdBj$r2r7h$G$-$^$9!#(B</p>
<p>これが設定されていると、HTTP/1.0 リクエストを発行するクライアントに対しては
常に HTTP/1.0 で応答するようになります。この機能は、
元々は AOL のプロキシの問題のために実装されました。HTTP/1.0 クライアントの中には、
HTTP/1.1 の応答を返されると正しく動作しないものがあるかもしれません。
この機能を使用することで、そのようなクライアントとの間の互換性問題を解決できます。</p>
</section>
<section id="gzip-only-text-html">
<title>gzip-only-text/html</title>
<p>$B$3$l$,(B 1 $B$K@_Dj$5$l$k$H!"$3$NJQ?t$O(B <code>text/html</code>
$B0J30$N%3%s%F%s%H%?%$%W$KBP$9$k!"(B<module>mod_deflate</module>
$BDs6!$N(B <code>DEFLATE</code> $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)
<module>mod_negotiation</module> $B$bJQ?t$rI>2A$7$^$9!#(B</p>
<p>これが 1 に設定されると、この変数は <code>text/html</code>
以外のコンテントタイプに対する、<module>mod_deflate</module>
提供の <code>DEFLATE</code> 出力フィルタを無効にします。
また、静的に、既に圧縮されたファイルを使用したい場合、
(gzip だけでなく、"identity" と異なる全てのエンコードに対して)
<module>mod_negotiation</module> も変数を評価します。</p>
</section>
<section id="no-gzip"><title>no-gzip</title>
<p>$B%;%C%H$5$l$k$H!"(B<module>mod_deflate</module> $B$N(B
<code>DEFLATE</code> $B%U%#%k%?$,%*%U$K$J$j$^$9!#(B
$B$=$7$F(B <module>mod_negotiation</module>
$B$O%(%s%3!<%I$5$l$?%j%=!<%9$rAw$i$J$$$h$&$K$7$^$9!#(B</p>
<p>セットされると、<module>mod_deflate</module>
<code>DEFLATE</code> フィルタがオフになります。
そして <module>mod_negotiation</module>
はエンコードされたリソースを送らないようにします。</p>
</section>
<section id="nokeepalive">
<title>nokeepalive</title>
<p>$B$3$l$,@_Dj$5$l$F$$$k>l9g$O!"(B<directive module="core"
>KeepAlive</directive> $B$r;HMQ$7$J$$$h$&$K$7$^$9!#(B</p>
<p>これが設定されている場合は、<directive module="core"
>KeepAlive</directive> を使用しないようにします。</p>
<section id="prefer-language"><title>prefer-language</title>
<p><module>mod_negotiation</module> $B$N5sF0$K1F6A$rM?$($^$9!#(B
(<code>en</code>, <code>ja</code>, <code>x-klingon</code>$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<a href="content-negotiation.html">$B%M%4%7%(!<%7%g%s(B</a>$B=hM}$,(B
$BE,MQ$5$l$^$9!#(B</p>
<p><module>mod_negotiation</module> の挙動に影響を与えます。
(<code>en</code>, <code>ja</code>, <code>x-klingon</code>といった)
言語タグが格納されていれば、その言語の variant を送信しようとします。
そのような variant がない場合は、
通常の<a href="content-negotiation.html">ネゴシエーション</a>処理が
適用されます。</p>
</section>
@@ -322,57 +322,57 @@
<section id="redirect-carefully">
<title>redirect-carefully</title>
<p>$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<BAu$5$l$^$7$?!#(B</p>
<p>これはクライアントへのリダイレクトの送信をサーバがより注意深く
行なうようにします。
これは通常、リダイレクトに際してクライアントに
問題があることが分かっている場合に使われます。この機能は元々は
マイクロソフトのウェブフォルダのソフトが DAV
メソッドによるディレクトリのリソースへのリダイレクトの扱いに
問題がり、それを回避するために実装されました。</p>
</section>
<section id="suppress-error-charset">
<title>suppress-error-charset</title>
<p><em>Apache 2.2 $B0J9_$GMxMQ2DG=(B</em></p>
<p><em>Apache 2.2 以降で利用可能</em></p>
<p>$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</p>
<p>$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:]$NJ8;z%;%C%H$NBe$o$j$K!"(B
$B%j%@%$%l%/%H85$NJ8;z%;%C%H$r;H$C$F$7$^$&$3$H$,$"$j$^$9!#(B
$B$=$N7k2L!"Nc$($PJQ$JIA2h$,9T$J$o$l$?$j$7$F!"FI$a$J$/$J$C$?$j$7$^$9!#(B</p>
<p>$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</p>
<p>クライアントのリクエストに対する応答としてリダイレクトを送信する際、
レスポンスにはリダイレクトが自動的に行なえない (行なわれない)
場合に表示するテキストが含まれます。
通常、このテキストに合致したキャラクタセット、ISO-8859-1
でラベル付けをします。</p>
<p>しかし、リダイレクト先が別の文字セットを使っている場合、
ある問題のあるブラウザのバージョンでは、
リダイレクト先の実際の文字セットの代わりに、
リダイレクト元の文字セットを使ってしまうことがあります。
その結果、例えば変な描画が行なわれたりして、読めなくなったりします。</p>
<p>この環境変数を設定することで、リダイレクションテキストに対する
キャラクタセットの指定を除去しますので、それら問題のあるブラウザでも
リダイレクト先の文字セットを正しく使うようにできます。</p>
</section>
<section id="proxy"><title>force-proxy-request-1.0, proxy-nokeepalive, proxy-sendchunked, proxy-sendcl</title>
<p>$B$3$l$i$N;X<(;R$O(B <module>mod_proxy</module> $B$N5sF0$rJQ99$7$^$9!#(B
$B>\:Y$O(B <module>mod_proxy</module> $B$N%I%-%e%a%s%H$r$4;2>H$/$@$5$$!#(B</p>
<p>これらの指示子は <module>mod_proxy</module> の挙動を変更します。
詳細は <module>mod_proxy</module> のドキュメントをご参照ください。</p>
</section>
</section>
<section id="examples">
<title>$BNc(B</title>
<title></title>
<section id="misbehaving">
<title>$B$*$+$7$J5sF0$r$9$k%/%i%$%"%s%H$KBP$7$F%W%m%H%3%k$NF0:n$rJQ99$9$k(B</title>
<title>おかしな挙動をするクライアントに対してプロトコルの動作を変更する</title>
<p>$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</p>
<p>$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<!$N9T$r2C$($k$h$&?d>)$5$l$F$$$^$7$?$,!"(B
$B:#$H$J$C$F$O!"LdBj$H$7$F$$$?%/%i%$%"%s%H$O<B:]$K$O8+$+$1$k$3$H$O(B
$B$J$/$J$C$F$-$?$N$G!"$3$N@_Dj$O$b$O$dI,MW$J$$$+$b$7$l$^$;$s!#(B</p>
<p>クライアントに関する既知の問題に対処するために、以下の行を
httpd.conf に入れることを推奨しています。</p>
<p>古いバージョンの Apache では、クライアントの問題に対応するために
httpd.conf に次の行を加えるよう推奨されていましたが、
今となっては、問題としていたクライアントは実際には見かけることは
なくなってきたので、この設定はもはや必要ないかもしれません。</p>
<example><pre>
#
# The following directives modify normal HTTP response behavior.
@@ -396,11 +396,11 @@ BrowserMatch "JDK/1\.0" force-response-1.0</pre></example>
</section>
<section id="no-img-log">
<title>$B2hA|$X$N%j%/%(%9%H$r%"%/%;%9%m%0$K5-O?$7$J$$(B</title>
<title>画像へのリクエストをアクセスログに記録しない</title>
<p>$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
<p>この例では、画像へのリクエストがアクセスログに現れないようにします。
これを変更することで、特定のディレクトリのログ収集をやめたり、
特定のホストからのリクエストのログ収集をやめたりすることが簡単にできます。
</p>
<example><pre>
SetEnvIf Request_URI \.gif image-request
@@ -410,13 +410,13 @@ CustomLog logs/access_log common env=!image-request</pre></example>
</section>
<section id="image-theft">
<title>$B!V2hA|$NEpMQ!W$rKI$0(B</title>
<title>「画像の盗用」を防ぐ</title>
<p>$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 <code>/web/images</code>
$B$H$$$&%G%#%l%/%H%j$K$"$k$H2>Dj$7$^$9!#(B</p>
<p>この例は、別のサーバにいる人が、あなたのサーバにある画像を
inline 画像として使用することを防ぎます。
これは推奨されている設定ではありませんが、ある限定された状況では有効です。
ここでは、すべての画像は <code>/web/images</code>
というディレクトリにあると仮定します。</p>
<example><pre>
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
&lt;/Directory&gt;</pre></example>
<p>$B$3$N<jK!$K4X$9$k>\$7$$>pJs$O(B ApacheToday $B$N%A%e!<%H%j%"%k!V(B<a
<p>この手法に関する詳しい情報は ApacheToday のチュートリアル「<a
href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-ps"
>Keeping Your Images from Adorning Other Sites</a>
$B!W$r;2>H$7$F$/$@$5$$!#(B</p>
」を参照してください。</p>
</section>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 151408:659902 (outdated) -->
@@ -22,14 +22,14 @@
<manualpage metafile="filter.xml.meta">
<title>$B%U%#%k%?(B</title>
<title>フィルタ</title>
<summary>
<p>Apache $B$G$N%U%#%k%?$N;H$$J}$K$D$$$F5-=R$7$F$$$^$9!#(B</p>
<p>Apache でのフィルタの使い方について記述しています。</p>
</summary>
<section id="filters">
<title>$B%U%#%k%?(B</title>
<title>フィルタ</title>
<related>
<modulelist>
<module>mod_deflate</module>
@@ -48,40 +48,40 @@
</directivelist>
</related>
<p><em>$B%U%#%k%?(B</em> $B$H$O!"%5!<%P$,Aw<u?.$7$?%G!<%?$K(B
$BE,MQ$5$l$k=hM}%W%m%;%9$N$3$H$r$$$$$^$9!#%/%i%$%"%s%H$+$i%5!<%P$K(B
$BAw$i$l$?%G!<%?$O(B <em>$BF~NO%U%#%k%?(B</em> $B$K$h$C$F!"%5!<%P$+$i(B
$B%/%i%$%"%s%H$KAw$i$l$k%G!<%?$O(B<em>$B=PNO%U%#%k%?(B</em>$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</p>
<p><em>フィルタ</em> とは、サーバが送受信したデータに
適用される処理プロセスのことをいいます。クライアントからサーバに
送られたデータは <em>入力フィルタ</em> によって、サーバから
クライアントに送られるデータは<em>出力フィルタ</em>によって
処理されます。複数のフィルタを適用することができ、
その順番を厳密に指定することもできます。</p>
<p>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<B9T;~$N@_Dj%G%#%l%/%F%#%V$GA*Br$,2DG=$J%U%#%k%?$r(B
$B%b%8%e!<%k$,Ds6!$G$-$^$9!#(B
$B%G!<%?$KE,1~$5$l$k%U%#%k%?$N%;%C%H$O!"(B
<p>Apache 内部では、チャンク (データのぶつ切り) を行ったり、
バイト範囲の指定されたリクエストを扱ったりといった機能を
行う際に、フィルタが使われています。それに加えて、
実行時の設定ディレクティブで選択が可能なフィルタを
モジュールが提供できます。
データに適応されるフィルタのセットは、
<directive module="core">SetInputFilter</directive>,
<directive module="core">SetOutputFilter</directive>,
<directive module="core">AddInputFilter</directive>,
<directive module="core">AddOutputFilter</directive>,
<directive module="mod_mime">RemoveInputFilter</directive>,
<directive module="mod_mime">RemoveOutputFilter</directive>
$B%G%#%l%/%F%#%V$G@)8f$G$-$^$9!#(B</p>
ディレクティブで制御できます。</p>
<p>$B8=9T$N(B Apache HTTP $B%5!<%P$NG[I[$G$O!"(B
$B<!$N%f!<%6A*Br2DG=$J%U%#%k%?$,Ds6!$5$l$F$$$^$9!#(B</p>
<p>現行の Apache HTTP サーバの配布では、
次のユーザ選択可能なフィルタが提供されています。</p>
<dl>
<dt>INCLUDES</dt>
<dd><module>mod_include</module> $B$G(B Server-Side Include $B$r$7$^$9!#(B</dd>
<dd><module>mod_include</module> Server-Side Include をします。</dd>
<dt>DEFLATE</dt>
<dd><module>mod_deflate</module>
$B$r;H$C$F!"%/%i%$%"%s%H$KAw?.$9$kA0$K=PNO$r05=L$7$^$9!#(B</dd>
を使って、クライアントに送信する前に出力を圧縮します。</dd>
</dl>
<p>$B$^$?!"(B<module>mod_ext_filter</module> $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</p>
<p>また、<module>mod_ext_filter</module> モジュールで
外部プログラムをフィルタとして指定することができます。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 395228:420990 (outdated) -->
@@ -22,14 +22,14 @@
<manualpage metafile="handler.xml.meta">
<title>Apache $B$N%O%s%I%i$N;HMQ(B</title>
<title>Apache のハンドラの使用</title>
<summary>
<p>Apache $B$N%O%s%I%i$N;HMQ$K4X$7$F5-=R$7$F$$$^$9!#(B</p>
<p>Apache のハンドラの使用に関して記述しています。</p>
</summary>
<section id="definition">
<title>$B%O%s%I%i$H$O(B</title>
<title>ハンドラとは</title>
<related>
<modulelist>
<module>mod_actions</module>
@@ -50,85 +50,85 @@
</related>
<p>$B!V%O%s%I%i!W$H$O!"%U%!%$%k$,8F$P$l$?$H$-$K<B9T$5$l$kF0:n$N(B
Apache $B$K$*$1$kFbItI=8=$G$9!#(B
$BDL>o!"%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</p>
<p>「ハンドラ」とは、ファイルが呼ばれたときに実行される動作の
Apache における内部表現です。
通常、ファイルはファイル型に基づいた暗黙のハンドラがあります。
普通はすべてのファイルは単にサーバに扱われますが、
ファイルタイプの中には別に「ハンドル」(訳注: 扱う)
されるものもあります。</p>
<p>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<strong>$B$H(B</strong
>$B%O%s%I%i$NN>J}$r4XO"IU$1$k$3$H$,$G$-$k$H$$$&E@$GM%$l$F$$$^$9!#(B
<p>Apache 1.1 では、ハンドラを明示的に使用する機能が追加されました。
ファイルの拡張子や置いている場所に基づいて、
ファイル型と関係なくハンドラを指定することができます。
これはより優雅な解決法という点と、ファイルにタイプ<strong>と</strong
>ハンドラの両方を関連付けることができるという点で優れています。
(<a href="mod/mod_mime.html#multipleext"
>$BJ#?t$N3HD%;R$N$"$k%U%!%$%k(B</a>$B$b;2>H$7$F$/$@$5$$(B)$B!#(B</p>
>複数の拡張子のあるファイル</a>も参照してください)。</p>
<p>$B%O%s%I%i$O%5!<%P$KAH$_9~$s$@$j!"%b%8%e!<%k$H$7$F4^$a$?$j!"(B
<p>ハンドラはサーバに組み込んだり、モジュールとして含めたり、
<directive module="mod_actions">Action</directive>
$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
ディレクティブとして追加したりすることができます。
以下は標準配布に組み込まれているハンドラです。
</p>
<ul>
<li><strong>default-handler</strong>:<code>default_handelr()</code>
$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
を使ってファイルを送ります。
静的なコンテンツを扱うときにデフォルトで使用されるハンドラです。
(<module>core</module>)</li>
<li><strong>send-as-is</strong>:
HTTP $B%X%C%@$N$"$k%U%!%$%k$r$=$N$^$^Aw$j$^$9!#(B
HTTP ヘッダのあるファイルをそのまま送ります。
(<module>mod_asis</module>)</li>
<li><strong>cgi-script</strong>: $B%U%!%$%k$r(B CGI
$B%9%/%j%W%H$H$7$F07$$$^$9!#(B
<li><strong>cgi-script</strong>: ファイルを CGI
スクリプトとして扱います。
(<module>mod_cgi</module>)</li>
<li><strong>imap-file</strong>:
$B%$%a!<%8%^%C%W$N%k!<%k%U%!%$%k$H$7$F2r@O$7$^$9!#(B
イメージマップのルールファイルとして解析します。
(<module>mod_imagemap</module>)</li>
<li><strong>server-info</strong>: $B%5!<%P$N@_Dj>pJs$r<hF@$7$^$9!#(B
<li><strong>server-info</strong>: サーバの設定情報を取得します。
(<module>mod_info</module>)</li>
<li><strong>server-status</strong>: $B%5!<%P$N>uBVJs9p$r<hF@$7$^$9!#(B
<li><strong>server-status</strong>: サーバの状態報告を取得します。
(<module>mod_status</module>)</li>
<li><strong>type-map</strong>:
$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
コンテントネゴシエーションのためのタイプマップとして解析します。
(<module>mod_negotiation</module>)</li>
</ul>
</section>
<section id="examples">
<title>$BNc(B</title>
<title></title>
<section id="example1">
<title>CGI $B%9%/%j%W%H$rMQ$$$F@EE*$J%3%s%F%s%D$rJQ99$9$k(B</title>
<title>CGI スクリプトを用いて静的なコンテンツを変更する</title>
<p>$B0J2<$N%G%#%l%/%F%#%V$K$h$C$F!"3HD%;R$,(B <code>html</code>
$B$G$"$k%U%!%$%k$O(B <code>footer.pl</code>
CGI $B%9%/%j%W%H$r5/F0$9$k$h$&$K$J$j$^$9!#(B</p>
<p>以下のディレクティブによって、拡張子が <code>html</code>
であるファイルは <code>footer.pl</code>
CGI スクリプトを起動するようになります。</p>
<example>
Action add-footer /cgi-bin/footer.pl<br/>
AddHandler add-footer .html
</example>
<p>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 <code>PATH_TRANSLATED</code>
$B$G;X$5$l$F$$$^$9(B) $B$rAw$k@UG$$,$"$j$^$9!#(B
<p>CGI スクリプトは希望の修正や追加を行なって、元々要求された文書
(環境変数 <code>PATH_TRANSLATED</code>
で指されています) を送る責任があります。
</p>
</section>
<section id="example2">
<title>HTTP $B%X%C%@$N$"$k%U%!%$%k(B</title>
<title>HTTP ヘッダのあるファイル</title>
<p>$B0J2<$N%G%#%l%/%F%#%V$O(B <code>send-as-is</code>
$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
<code>/web/htdocs/asis</code> $B%G%#%l%/%H%j$K$"$kA4$F$N%U%!%$%k$O(B
<code>send-as-is</code> $B%O%s%I%i$K$h$C$F07$o$l$^$9!#(B</p>
<p>以下のディレクティブは <code>send-as-is</code>
ハンドラを使用するように指示します。このハンドラは自分自身の HTTP
ヘッダを持っているファイルに使用されます。ここでは、拡張子に関わらず、
<code>/web/htdocs/asis</code> ディレクトリにある全てのファイルは
<code>send-as-is</code> ハンドラによって扱われます。</p>
<example>
&lt;Directory /web/htdocs/asis&gt;<br/>
@@ -139,24 +139,24 @@
</section>
</section>
<section id="programmer">
<title>$B%W%m%0%i%^8~$1$N%a%b(B</title>
<title>プログラマ向けのメモ</title>
<p>$B%O%s%I%i$N5!G=$r<BAu$9$k$?$a$K!"MxMQ$9$k$HJXMx$+$b$7$l$J$$$b$N$,(B
<p>ハンドラの機能を実装するために、利用すると便利かもしれないものが
<a href="developer/API.html">Apache API</a>
$B$KDI2C$5$l$^$7$?!#>\$7$/8@$&$H!"(B<code>request_rec</code>
$B9=B$BN$K?7$7$$%l%3!<%I$,DI2C$5$l$?$H$$$&$3$H$G$9!#(B</p>
に追加されました。詳しく言うと、<code>request_rec</code>
構造体に新しいレコードが追加されたということです。</p>
<example>
char *handler
</example>
<p>$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 <code>invoke_handler</code>
$B%9%F!<%8$KC#$9$k0JA0$K(B <code>r-&gt;handler</code>
$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$&$K<BAu$5$l$F$$$^$9!#(B
$BI,$:MW5a$5$l$F$$$k$o$1$G$O$"$j$^$;$s$,!"%a%G%#%"%?%$%W(B
$B$NL>A06u4V$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</p>
<p>もしモジュールがハンドラに関わりたい場合、
やらなければならないことは、リクエストが <code>invoke_handler</code>
ステージに達する以前に <code>r-&gt;handler</code>
を設定することだけです。ハンドラはコンテントタイプの代わりに
ハンドラ名を使うようになっていること以外は、以前と同じように実装されています。
必ず要求されているわけではありませんが、メディアタイプ
の名前空間を侵さないように、ハンドラの名前にはスラッシュを含まない、
ダッシュ (訳注: "-") で分離された名前を付ける習慣になっています。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 479777:645246 (outdated) -->
@@ -21,32 +21,32 @@
-->
<manualpage metafile="auth.xml.meta">
<parentdocument href="./">How-To / $B%A%e!<%H%j%"%k(B</parentdocument>
<parentdocument href="./">How-To / チュートリアル</parentdocument>
<title>$BG'>Z!">5G'!"%"%/%;%9@)8f(B</title>
<title>認証、承認、アクセス制御</title>
<summary>
<p>$B!VG'>Z!W$H$O!"C/$+$,<+J,$OC/$G$"$k$+$r<gD%$7$?>l9g$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</p>
<p>「認証」とは、誰かが自分は誰であるかを主張した場合に、
それを確認するための全過程を指します。「承認」とは、
誰かが行きたい場所に行けるように、あるいは欲しい情報を
得ることができるようにするための全過程を指します。</p>
</summary>
<section id="related"><title>$B4XO"$9$k%b%8%e!<%k$H%G%#%l%/%F%#%V(B</title>
<p>$BG'>Z$H>5G'$N=hM}$K4XO"$9$k(B 3 $B<oN`$N%b%8%e!<%k$,$"$j$^$9!#(B
$B$=$l$>$l>/$J$/$H$b$R$H$D$:$DI,MW$G$9!#(B</p>
<section id="related"><title>関連するモジュールとディレクティブ</title>
<p>認証と承認の処理に関連する 3 種類のモジュールがあります。
それぞれ少なくともひとつずつ必要です。</p>
<ul>
<li>$BG'>Z$N%?%$%W(B (
<directive module="core">AuthType</directive> $B%G%#%l%/%F%#%V;2>H(B)
<li>認証のタイプ (
<directive module="core">AuthType</directive> ディレクティブ参照)
<ul>
<li><module>mod_auth_basic</module></li>
<li><module>mod_auth_digest</module></li>
</ul>
</li>
<li>$BG'>Z%W%m%P%$%@(B (
<li>認証プロバイダ (
<directive module="mod_auth_basic">AuthBasicProvider</directive>,
<directive module="mod_auth_digest">AuthDigestProvider</directive> $B%G%#%l%/%F%#%V;2>H(B)
<directive module="mod_auth_digest">AuthDigestProvider</directive> ディレクティブ参照)
<ul>
<li><module>mod_authn_anon</module></li>
@@ -57,8 +57,8 @@
<li><module>mod_authnz_ldap</module></li>
</ul>
</li>
<li>$B>5G'(B (
<directive module="core">Require</directive> $B%G%#%l%/%F%#%V;2>H(B)
<li>承認 (
<directive module="core">Require</directive> ディレクティブ参照)
<ul>
<li><module>mod_authnz_ldap</module></li>
<li><module>mod_authz_dbm</module></li>
@@ -72,114 +72,114 @@
</li>
</ul>
<p>$B$3$l$i$N%b%8%e!<%k$K2C$($F!"(B<module>mod_authn_core</module>
$B$H(B <module>mod_authz_core</module> $B$,$"$j$^$9!#(B
$B$3$N(B 2 $B$D$N%b%8%e!<%k$OG'>Z%b%8%e!<%k$K6&DL$J%3%"%G%#%l%/%F%#%V$r(B
$B<BAu$7$F$$$^$9!#(B</p>
<p>これらのモジュールに加えて、<module>mod_authn_core</module>
<module>mod_authz_core</module> があります。
この 2 つのモジュールは認証モジュールに共通なコアディレクティブを
実装しています。</p>
<p><module>mod_authnz_ldap</module> $B$OG'>Z%W%m%P%$%@$H>5G'%W%m%P%$%@$N(B
$BN>J}$N5!G=$r;}$C$F$$$^$9!#(B
<module>mod_authz_host</module> $B$O%[%9%HL>!"(BIP $B%"%I%l%9$d(B
$B%j%/%(%9%H$NFCD'$K4p$E$$$?%"%/%;%9@)8f$r9T$$$^$9$,!"(B
$BG'>Z%W%m%P%$%@$N%7%9%F%`$N0lIt$G$O$"$j$^$;$s!#(B
mod_access $B$H$N8eJ}8_49@-$N$?$a!"(B
$B?7$7$$%b%8%e!<%k$N(B <module>mod_access_compat</module> $B$,$"$j$^$9!#(B</p>
<p><module>mod_authnz_ldap</module> は認証プロバイダと承認プロバイダの
両方の機能を持っています。
<module>mod_authz_host</module> はホスト名、IP アドレスや
リクエストの特徴に基づいたアクセス制御を行いますが、
認証プロバイダのシステムの一部ではありません。
mod_access との後方互換性のため、
新しいモジュールの <module>mod_access_compat</module> があります。</p>
<p>$BMM!9$J%"%/%;%9@)8f$N9T$J$$J}$K$D$$$F$O!"(B
<a href="access.html">$B%"%/%;%9@)8f(B</a>$B$NJ}K!$r$4Mw$/$@$5$$!#(B</p>
<p>様々なアクセス制御の行ない方については、
<a href="access.html">アクセス制御</a>の方法をご覧ください。</p>
</section>
<section id="introduction"><title>$B$O$8$a$K(B</title>
<p>$B$b$75!L)$N>pJs$d!"$4$/$4$/>/?t%0%k!<%W$N?M8~$1$N>pJs$r(B
$B%&%'%V%5%$%H$KCV$/$N$G$"$l$P!"$3$NJ8=q$K=q$+$l$F$$$k(B
$B%F%/%K%C%/$r;H$&$3$H$G!"$=$N%Z!<%8$r8+$F$$$k?M$?$A$,(B
$BK>$_$N?M$?$A$G$"$k$3$H$r3N<B$K$G$-$k$G$7$g$&!#(B</p>
<section id="introduction"><title>はじめに</title>
<p>もし機密の情報や、ごくごく少数グループの人向けの情報を
ウェブサイトに置くのであれば、この文書に書かれている
テクニックを使うことで、そのページを見ている人たちが
望みの人たちであることを確実にできるでしょう。</p>
<p>$B$3$NJ8=q$G$O!"B?$/$N?M$,:NMQ$9$k$G$"$m$&!"(B
$B%&%'%V%5%$%H$N0lItJ,$rJ]8n$9$k!V0lHLE*$J!W(B
$BJ}K!$K$D$$$F%+%P!<$7$F$$$^$9!#(B</p>
<p>この文書では、多くの人が採用するであろう、
ウェブサイトの一部分を保護する「一般的な」
方法についてカバーしています。</p>
<note><title>$BCm0U(B</title>
<p>$B%G!<%?$,K\Ev$K5!L)$J$N$G$"$l$P!"G'>Z$K2C$($F$5$i$K(B
<module>mod_ssl</module> $B$r;H$&$HNI$$$G$7$g$&!#(B</p>
<note><title>注意</title>
<p>データが本当に機密なのであれば、認証に加えてさらに
<module>mod_ssl</module> を使うと良いでしょう。</p>
</note>
</section>
<section id="theprerequisites"><title>$B=`Hw(B</title>
<p>$B$3$NJ8=q$G<h$j07$o$l$k%G%#%l%/%F%#%V$O!"(B
$B%a%$%s%5!<%P@_Dj%U%!%$%k(B ($BIaDL$O(B
<section id="theprerequisites"><title>準備</title>
<p>この文書で取り扱われるディレクティブは、
メインサーバ設定ファイル (普通は
<directive module="core" type="section">Directory</directive>
$B%;%/%7%g%sCf(B) $B$+!"$"$k$$$O%G%#%l%/%H%jKh$N@_Dj%U%!%$%k(B
(<code>.htaccess</code> $B%U%!%$%k(B) $B$+$GMQ$$$^$9!#(B</p>
セクション中) か、あるいはディレクトリ毎の設定ファイル
(<code>.htaccess</code> ファイル) かで用います。</p>
<p><code>.htaccess</code> $B%U%!%$%k$rMQ$$$k$N$G$"$l$P!"(B
$B$3$l$i$N%U%!%$%k$KG'>ZMQ$N%G%#%l%/%F%#%V$rCV$1$k$h$&$K(B
$B%5!<%P$N@_Dj$r$7$J$$$H$$$1$J$$$G$7$g$&!#$3$l$O(B
<p><code>.htaccess</code> ファイルを用いるのであれば、
これらのファイルに認証用のディレクティブを置けるように
サーバの設定をしないといけないでしょう。これは
<directive module="core">AllowOverride</directive>
$B%G%#%l%/%F%#%V$G2DG=$K$J$j$^$9!#(B
ディレクティブで可能になります。
<directive module="core">AllowOverride</directive>
$B%G%#%l%/%F%#%V$G$O!"%G%#%l%/%H%jKh$N@_Dj%U%!%$%kCf$KCV$/$3$H$N$G$-$k(B
$B%G%#%l%/%F%#%V$r!"$b$7$"$l$P!";XDj$7$^$9!#(B</p>
ディレクティブでは、ディレクトリ毎の設定ファイル中に置くことのできる
ディレクティブを、もしあれば、指定します。</p>
<p>$BG'>Z$K$D$$$FOC$r?J$a$F$$$k$N$G!"<!$N$h$&$J(B
<p>認証について話を進めているので、次のような
<directive module="core">AllowOverride</directive>
$B%G%#%l%/%F%#%V$,I,MW$K$J$k$G$7$g$&!#(B</p>
ディレクティブが必要になるでしょう。</p>
<example>
AllowOverride AuthConfig
</example>
<p>$B$=$&$G$J$/!"%a%$%s%5!<%P@_Dj%U%!%$%k$NCf$K(B
$BD>@\CV$/$N$G$"$l$P!"EvA3$J$,$i$=$N%U%!%$%k$X$N=q$-9~$_(B
$B8"8B$r;}$C$F$$$J$1$l$P$J$i$J$$$G$7$g$&!#(B</p>
<p>そうでなく、メインサーバ設定ファイルの中に
直接置くのであれば、当然ながらそのファイルへの書き込み
権限を持っていなければならないでしょう。</p>
<p>$B$^$?!"$I$N%U%!%$%k$,$I$3$KJ]B8$5$l$F$$$k$+CN$k$?$a$K!"(B
$B%5!<%P$N%G%#%l%/%H%j9=B$$K$D$$$F>/$7CN$C$F$*$/(B
$BI,MW$,$"$k$G$7$g$&!#(B
$B$3$l$O$=$s$J$KFq$7$/$J$$$N$G!"$3$NJ8=qCf$G(B
$B%G%#%l%/%H%j9=B$$K$D$$$FCN$C$F$*$/I,MW$,$"$k>lLL$G$O!"(B
$BL@$i$+$K$J$k$h$&$K$7$^$9!#(B</p>
<p>また、どのファイルがどこに保存されているか知るために、
サーバのディレクトリ構造について少し知っておく
必要があるでしょう。
これはそんなに難しくないので、この文書中で
ディレクトリ構造について知っておく必要がある場面では、
明らかになるようにします。</p>
<p><module>mod_authn_core</module> $B$H(B <module>mod_authz_core</module>
$B$NN>J}$,(B httpd $B%P%$%J%j$K@EE*$KAH$_9~$_:Q$_$G$"$k$+!"(Bhttpd.conf
$B@_Dj%U%!%$%k$GF0E*$K%m!<%I$5$l$k$+$7$F!"(Bhttpd $B$KAH$_9~$^$l$F$$$J$1$l$P(B
$B$J$j$^$;$s!#$3$l$i$NFs$D$N%b%8%e!<%k$O!"@_Dj%U%!%$%k$N$J$+$GHs>o$K(B
$B=EMW$G%&%'%V%5!<%P$NG'>Z$H>5G'$G;HMQ$5$l$k%3%"%G%#%l%/%F%#%V$H(B
$B$=$N5!G=$rDs6!$7$F$$$^$9!#(B</p>
<p><module>mod_authn_core</module> <module>mod_authz_core</module>
の両方が httpd バイナリに静的に組み込み済みであるか、httpd.conf
設定ファイルで動的にロードされるかして、httpd に組み込まれていなければ
なりません。これらの二つのモジュールは、設定ファイルのなかで非常に
重要でウェブサーバの認証と承認で使用されるコアディレクティブと
その機能を提供しています。</p>
</section>
<section id="gettingitworking"><title>$BF0:n$5$;$k(B</title>
<p>$B$G$O!"%5!<%P>e$N$"$k%G%#%l%/%H%j$r%Q%9%o!<%I$GJ]8n$9$k(B
$B4pK\<j=g$r<($7$^$9!#(B</p>
<section id="gettingitworking"><title>動作させる</title>
<p>では、サーバ上のあるディレクトリをパスワードで保護する
基本手順を示します。</p>
<p>$B$^$:$O$8$a$K!"%Q%9%o!<%I%U%!%$%k$r:n$j$^$9!#(B
$B$I$NG'>Z%W%m%P%$%@$r;H$&$+$K$h$C$F!"%Q%9%o!<%I%U%!%$%k@8@.$N<j=g$O(B
$BBg$-$/0[$J$j$^$9!#$3$3$G$NNc$G$O!"<j;O$a$K%F%-%9%H%Q%9%o!<%I%U%!%$%k$r(B
$B;H$$$^$9!#(B</p>
<p>まずはじめに、パスワードファイルを作ります。
どの認証プロバイダを使うかによって、パスワードファイル生成の手順は
大きく異なります。ここでの例では、手始めにテキストパスワードファイルを
使います。</p>
<p>$B$3$N%Q%9%o!<%I%U%!%$%k$O!"%&%'%V$+$i%"%/%;%9$G$-$k>l=j$K(B
$BCV$/$Y$-$G$O$"$j$^$;$s!#B>$N?M$,%Q%9%o!<%I%U%!%$%k$r(B
$B%@%&%s%m!<%I$G$-$J$$$h$&$K$9$k$?$a$G$9!#Nc$($P!"(B
<code>/usr/local/apache/htdocs</code> $B$G%I%-%e%a%s%H$r(B
$BDs6!$7$F$$$k$N$G$"$l$P!"%Q%9%o!<%I%U%!%$%k$O(B
<p>このパスワードファイルは、ウェブからアクセスできる場所に
置くべきではありません。他の人がパスワードファイルを
ダウンロードできないようにするためです。例えば、
<code>/usr/local/apache/htdocs</code> でドキュメントを
提供しているのであれば、パスワードファイルは
<code>/usr/local/apache/passwd</code>
$B$J$I$KCV$$$?J}$,NI$$$G$7$g$&!#(B</p>
などに置いた方が良いでしょう。</p>
<p>$B%U%!%$%k$r:n$k$?$a$K$O!"(BApache $BIUB0$N(B <program>htpasswd</program>
$B$r;H$$$^$9!#$3$N%3%^%s%I$O(B Apache $B$r$I$3$K%$%s%9%H!<%k$7$h$&$H$b!"(B
$B%$%s%9%H!<%k%G%#%l%/%H%j$N(B <code>bin</code>
$B%G%#%l%/%H%j0J2<$KCV$+$l$^$9!#%5!<%I%P!<%F%#@=$N%Q%C%1!<%8$G(B
$B%$%s%9%H!<%k$7$?>l9g$O!"<B9T%Q%9$NCf$G8+$D$+$k$G$7$g$&!#(B</p>
<p>ファイルを作るためには、Apache 付属の <program>htpasswd</program>
を使います。このコマンドは Apache をどこにインストールしようとも、
インストールディレクトリの <code>bin</code>
ディレクトリ以下に置かれます。サードバーティ製のパッケージで
インストールした場合は、実行パスの中で見つかるでしょう。</p>
<p>$B%U%!%$%k$r:n$k$K$O!"<!$N$h$&$K%?%$%W$7$F$/$@$5$$!#(B</p>
<p>ファイルを作るには、次のようにタイプしてください。</p>
<example>
htpasswd -c /usr/local/apache/passwd/passwords rbowen
</example>
<p><program>htpasswd</program> $B$O!"%Q%9%o!<%I$rMW5a$7!"$=$N8e(B
$B3NG'$N$?$a$K$b$&0lEYF~NO$9$k$h$&$KMW5a$7$F$-$^$9!#(B</p>
<p><program>htpasswd</program> は、パスワードを要求し、その後
確認のためにもう一度入力するように要求してきます。</p>
<example>
# htpasswd -c /usr/local/apache/passwd/passwords rbowen<br />
@@ -188,23 +188,23 @@
Adding password for user rbowen
</example>
<p>$B$b$7(B <program>htpasswd</program> $B$,%Q%9$NCf$KF~$C$F$$$J$$>l9g$O!"(B
$B$b$A$m$s!"<B9T$9$k$?$a$K%W%m%0%i%`$^$G$N%U%k%Q%9$r(B
$B%?%$%W$9$kI,MW$,$"$j$^$9!#%G%U%)%k%H$N%$%s%9%H!<%k>uBV$G$"$l$P!"(B
<p>もし <program>htpasswd</program> がパスの中に入っていない場合は、
もちろん、実行するためにプログラムまでのフルパスを
タイプする必要があります。デフォルトのインストール状態であれば、
<code>/usr/local/apache/bin/htpasswd</code>
$B$K%W%m%0%i%`$,CV$+$l$F$$$^$9!#(B</p>
にプログラムが置かれています。</p>
<p>$B<!$K!"%5!<%P$,%Q%9%o!<%I$rMW5a$9$k$h$&$K@_Dj$7$F!"(B
$B$I$N%f!<%6$,%"%/%;%9$r5v$5$l$F$$$k$+$r%5!<%P$KCN$i$;$J$1$l$P(B
$B$J$j$^$;$s!#(B <code>httpd.conf</code> $B$rJT=8$9$k$+(B
<code>.htaccess</code> $B%U%!%$%k$r;HMQ$9$k$+$G(B
$B@_Dj$7$^$9!#Nc$($P!"%G%#%l%/%H%j(B
<p>次に、サーバがパスワードを要求するように設定して、
どのユーザがアクセスを許されているかをサーバに知らせなければ
なりません。 <code>httpd.conf</code> を編集するか
<code>.htaccess</code> ファイルを使用するかで
設定します。例えば、ディレクトリ
<code>/usr/local/apache/htdocs/secret</code>
$B$rJ]8n$7$?$$>l9g$O!"(B
を保護したい場合は、
<code>/usr/local/apache/htdocs/secret/.htaccess</code>
$B$+(B httpd.conf $BCf$N(B &lt;Directory
/usr/local/apache/htdocs/secret&gt; $B%;%/%7%g%s$K(B
$BG[CV$7$F!"<!$N%G%#%l%/%F%#%V$r;H$&$3$H$,$G$-$^$9!#(B</p>
httpd.conf 中の &lt;Directory
/usr/local/apache/htdocs/secret&gt; セクションに
配置して、次のディレクティブを使うことができます。</p>
<example>
AuthType Basic<br />
@@ -215,108 +215,108 @@
Require user rbowen
</example>
<p>$B8D!9$N%G%#%l%/%F%#%V$K$D$$$F8+$F$_$^$7$g$&!#(B
<p>個々のディレクティブについて見てみましょう。
<directive module="core">AuthType</directive>
$B%G%#%l%/%F%#%V$O$I$&$$$&G'>ZJ}K!$G%f!<%6$NG'>Z$r9T$&$+$r(B
$BA*Br$7$^$9!#:G$b0lHLE*$JJ}K!$O(B <code>Basic</code>
$B$G!"$3$l$O(B <module>mod_auth_basic</module>
$B$G<BAu$5$l$F$$$^$9!#$7$+$7$J$,$i!"(B
$B$3$l$O5$$rIU$1$k$Y$-=EMW$J%]%$%s%H$J$N$G$9$,!"(B
Basic $BG'>Z$O%/%i%$%"%s%H$+$i%5!<%P$X!"(B
$B%Q%9%o!<%I$r0E9f2=$;$:$KAw$j$^$9!#$G$9$+$i$3$NJ}K!$O!"(B
<module>mod_ssl</module> $B$HAH$_9g$o$;$J$$>uBV$G$O!"(B
$BFC$K5!L)@-$N9b$$%G!<%?$KBP$7$F$OMQ$$$k$Y$-$G$O(B
$B$"$j$^$;$s!#(B Apache $B$G$O$b$&0l$DJL$NG'>ZJ}K!(B:
<code>AuthType Digest</code> $B$r%5%]!<%H$7$F$$$^$9!#(B
$B$3$NJ}K!$O(B <module>mod_auth_digest</module>
$B$G<BAu$5$l$F$$$F!"$b$C$H0BA4$G$9!#(B
$B:G6a$N%/%i%$%"%s%H$O(B Digest
$BG'>Z$r%5%]!<%H$7$F$$$k$h$&$G$9!#(B</p>
ディレクティブはどういう認証方法でユーザの認証を行うかを
選択します。最も一般的な方法は <code>Basic</code>
で、これは <module>mod_auth_basic</module>
で実装されています。しかしながら、
これは気を付けるべき重要なポイントなのですが、
Basic 認証はクライアントからサーバへ、
パスワードを暗号化せずに送ります。ですからこの方法は、
<module>mod_ssl</module> と組み合わせない状態では、
特に機密性の高いデータに対しては用いるべきでは
ありません。 Apache ではもう一つ別の認証方法:
<code>AuthType Digest</code> をサポートしています。
この方法は <module>mod_auth_digest</module>
で実装されていて、もっと安全です。
最近のクライアントは Digest
認証をサポートしているようです。</p>
<p><directive module="core">AuthName</directive>
$B%G%#%l%/%F%#%V$G$O!"G'>Z$K;H$&(B <dfn>Realm</dfn> ($BLuCm(B: $BNN0h(B)
$B$r@_Dj$7$^$9!#(BRealm $B$OBg$-$/J,$1$FFs$D$N5!G=$rDs6!$7$^$9!#(B
$B0l$DL\$O!"%/%i%$%"%s%H$,%Q%9%o!<%I%@%$%"%m%0%\%C%/%9$N(B
$B0lIt$H$7$F%f!<%6$K$3$N>pJs$r$h$/Ds<($9$k!"$H$$$&$b$N$G$9!#(B
$BFs$DL\$K$O!"%/%i%$%"%s%H$,M?$($i$l$?G'>ZNN0h$KBP$7$F$I$N%Q%9%o!<%I$r(B
$BAw?.$9$l$PNI$$$N$+$r7hDj$9$k$?$a$K;H$o$l$k!"$H$$$&5!G=$G$9!#(B</p>
ディレクティブでは、認証に使う <dfn>Realm</dfn> (訳注: 領域)
を設定します。Realm は大きく分けて二つの機能を提供します。
一つ目は、クライアントがパスワードダイアログボックスの
一部としてユーザにこの情報をよく提示する、というものです。
二つ目には、クライアントが与えられた認証領域に対してどのパスワードを
送信すれば良いのかを決定するために使われる、という機能です。</p>
<p>$BNc$($P!"(B<code>"Restricted Files"</code> $BNN0hCf$G(B
$B0lEYG'>Z$5$l$l$P!"F10l%5!<%P>e$G(B <code>"Restricted Files"</code>
Realm $B$H$7$F%^!<%/$5$l$?$I$s$JNN0h$G$b!"%/%i%$%"%s%H$O(B
$B<+F0E*$KF1$8%Q%9%o!<%I$r;H$*$&$H;n$_$^$9!#(B
$B$3$N$*$+$2$G!"J#?t$N@)8BNN0h$KF1$8(B realm $B$r6&M-$5$;$F!"(B
$B%f!<%6$,%Q%9%o!<%I$r2?EY$bMW5a$5$l$k;vBV$r(B
$BKI$0$3$H$,$G$-$^$9!#$b$A$m$s!"%;%-%e%j%F%#>e$NM}M3$+$i!"(B
$B%5!<%P$N%[%9%HL>$,JQ$o$l$P$$$D$G$bI,$:!"(B
$B%/%i%$%"%s%H$O:F$S%Q%9%o!<%I$r?R$M$kI,MW$,$"$j$^$9!#(B</p>
<p>例えば、<code>"Restricted Files"</code> 領域中で
一度認証されれば、同一サーバ上で <code>"Restricted Files"</code>
Realm としてマークされたどんな領域でも、クライアントは
自動的に同じパスワードを使おうと試みます。
このおかげで、複数の制限領域に同じ realm を共有させて、
ユーザがパスワードを何度も要求される事態を
防ぐことができます。もちろん、セキュリティ上の理由から、
サーバのホスト名が変わればいつでも必ず、
クライアントは再びパスワードを尋ねる必要があります。</p>
<p><directive
module="mod_auth_basic">AuthBasicProvider</directive>
$B$O%G%U%)%k%HCM$,(B <code>file</code> $B$J$N$G!":#2s$N>l9g$OL5$/$F$b9=$$$^$;$s!#(B
<module>mod_authn_dbm</module> $B$d(B <module>mod_authn_dbd</module>
$B$H$$$C$?B>$N%b%8%e!<%k$r;H$&>l9g$K$OI,MW$K$J$j$^$9!#(B
はデフォルト値が <code>file</code> なので、今回の場合は無くても構いません。
<module>mod_authn_dbm</module> <module>mod_authn_dbd</module>
といった他のモジュールを使う場合には必要になります。
</p>
<p><directive module="mod_authn_file">AuthUserFile</directive>
$B%G%#%l%/%F%#%V$O(B <program>htpasswd</program> $B$G:n$C$?(B
$B%Q%9%o!<%I%U%!%$%k$X$N%Q%9$r@_Dj$7$^$9!#(B
$B%f!<%6?t$,B?$$>l9g$O!"%j%/%(%9%HKh$N%f!<%6$NG'>Z$N$?$a$N(B
$B%W%l!<%s%F%-%9%H$NC5:w$,Hs>o$KCY$/$J$k$3$H$,$"$j$^$9!#(B
Apache $B$G$O%f!<%6>pJs$r9bB.$J%G!<%?%Y!<%9%U%!%$%k$K(B
$BJ]4I$9$k$3$H$b$G$-$^$9!#(B
<module>mod_authn_dbm</module> $B%b%8%e!<%k$,(B
ディレクティブは <program>htpasswd</program> で作った
パスワードファイルへのパスを設定します。
ユーザ数が多い場合は、リクエスト毎のユーザの認証のための
プレーンテキストの探索が非常に遅くなることがあります。
Apache ではユーザ情報を高速なデータベースファイルに
保管することもできます。
<module>mod_authn_dbm</module> モジュールが
<directive module="mod_authn_dbm">AuthDBMUserFile</directive>
$B%G%#%l%/%F%#%V$rDs6!$7$^$9!#$3$l$i$N%U%!%$%k$O(B <program >dbmmanage</program>
$B%W%m%0%i%`$G:n@.$7$?$jA`:n$7$?$j$G$-$^$9!#(B
ディレクティブを提供します。これらのファイルは <program >dbmmanage</program>
プログラムで作成したり操作したりできます。
<a href="http://modules.apache.org/">Apache
$B%b%8%e!<%k%G!<%?%Y!<%9(B</a>$BCf$K$"$k%5!<%I%Q!<%F%#!<@=$N(B
$B%b%8%e!<%k$G!"$=$NB>B?$/$N%?%$%W$NG'>Z%*%W%7%g%s$,(B
$BMxMQ2DG=$G$9!#(B</p>
モジュールデータベース</a>中にあるサードパーティー製の
モジュールで、その他多くのタイプの認証オプションが
利用可能です。</p>
<p>$B:G8e$K!"(B<directive module="core">Require</directive>
$B%G%#%l%/%F%#%V$,!"%5!<%P$N$3$NNN0h$K%"%/%;%9$G$-$k%f!<%6$r(B
$B;XDj$9$k$3$H$K$h$C$F!"%W%m%;%9$N>5G'ItJ,$rDs6!$7$^$9!#(B
$B<!$N%;%/%7%g%s$G$O!"(B<directive module="core">Require</directive>
$B%G%#%l%/%F%#%V$NMM!9$JMQK!$K$D$$$F=R$Y$^$9!#(B</p>
<p>最後に、<directive module="core">Require</directive>
ディレクティブが、サーバのこの領域にアクセスできるユーザを
指定することによって、プロセスの承認部分を提供します。
次のセクションでは、<directive module="core">Require</directive>
ディレクティブの様々な用法について述べます。</p>
</section>
<section id="lettingmorethanonepersonin"><title>
$BJ#?t$N?M$,F~$l$k$h$&$K$9$k(B</title>
<p>$B>e5-$N%G%#%l%/%F%#%V$O!"$?$@0l?M(B ($B6qBNE*$K$O%f!<%6L>(B
<code>rbowen</code> $B$NC/$+(B) $B$,%G%#%l%/%H%j$K(B
$BF~$l$k$h$&$K$7$^$9!#B?$/$N>l9g$O!"J#?t$N?M$,(B
$BF~$l$k$h$&$K$7$?$$$G$7$g$&!#$3$3$G(B
複数の人が入れるようにする</title>
<p>上記のディレクティブは、ただ一人 (具体的にはユーザ名
<code>rbowen</code> の誰か) がディレクトリに
入れるようにします。多くの場合は、複数の人が
入れるようにしたいでしょう。ここで
<directive module="mod_authz_groupfile">AuthGroupFile</directive>
$B$NEP>l$G$9!#(B</p>
の登場です。</p>
<p>$B$b$7J#?t$N?M$,F~$l$k$h$&$K$7$?$$$N$G$"$l$P!"(B
$B%0%k!<%W$KB0$9$k%f!<%6$N0lMw$NF~$C$F$$$k!"%0%k!<%WL>$N$D$$$?(B
$B%0%k!<%W%U%!%$%k$r:n$kI,MW$,$"$j$^$9!#$3$N%U%!%$%k$N(B
$B=q<0$O$-$o$a$FC1=c$G!"$*9%$_$N%(%G%#%?$G@8@.$G$-$^$9!#(B
$B%U%!%$%k$NCf?H$O<!$N$h$&$J$b$N$G$9!#(B</p>
<p>もし複数の人が入れるようにしたいのであれば、
グループに属するユーザの一覧の入っている、グループ名のついた
グループファイルを作る必要があります。このファイルの
書式はきわめて単純で、お好みのエディタで生成できます。
ファイルの中身は次のようなものです。</p>
<example>
GroupName: rbowen dpitts sungo rshersey
</example>
<p>$B0l9T$K%9%Z!<%96h@Z$j$G!"%0%k!<%W$K=jB0$9$k%a%s%P!<$N(B
$B0lMw$r$J$i$Y$k$@$1$G$9!#(B</p>
<p>一行にスペース区切りで、グループに所属するメンバーの
一覧をならべるだけです。</p>
<p>$B4{$KB8:_$9$k%Q%9%o!<%I%U%!%$%k$K%f!<%6$r2C$($k>l9g$O!"(B
$B<!$N$h$&$K%?%$%W$7$F$/$@$5$$!#(B</p>
<p>既に存在するパスワードファイルにユーザを加える場合は、
次のようにタイプしてください。</p>
<example>
htpasswd /usr/local/apache/passwd/passwords dpitts
</example>
<p>$B0JA0$HF1$81~Ez$,JV$5$l$^$9$,!"?7$7$$%U%!%$%k$r(B
$B:n$k$N$G$O$J$/!"4{$K$"$k%U%!%$%k$KDI2C$5$l$F$$$^$9!#(B
($B?7$7$$%Q%9%o!<%I%U%!%$%k$r:n$k$K$O(B <code>-c</code>
$B$r;H$$$^$9!#(B)</p>
<p>以前と同じ応答が返されますが、新しいファイルを
作るのではなく、既にあるファイルに追加されています。
(新しいパスワードファイルを作るには <code>-c</code>
を使います。)</p>
<p>$B$3$3$G<!$N$h$&$K$7$F(B <code>.htaccess</code> $B%U%!%$%k$r(B
$B=$@5$9$kI,MW$,$"$j$^$9!#(B</p>
<p>ここで次のようにして <code>.htaccess</code> ファイルを
修正する必要があります。</p>
<example>
AuthType Basic<br />
@@ -328,64 +328,64 @@
Require group GroupName
</example>
<p>$B$3$l$G!"%0%k!<%W(B <code>GroupName</code> $B$K%j%9%H$5$l$F$$$F!"(B
<code>password</code> $B%U%!%$%k$K%(%s%H%j$,$"$k?M$O!"(B
$B@5$7$$%Q%9%o!<%I$r%?%$%W$9$l$PF~$k$3$H$,$G$-$k$G$7$g$&!#(B</p>
<p>これで、グループ <code>GroupName</code> にリストされていて、
<code>password</code> ファイルにエントリがある人は、
正しいパスワードをタイプすれば入ることができるでしょう。</p>
<p>$B$b$C$HFCDj$;$:$KJ#?t$N%f!<%6$,F~$l$k$h$&$K$9$k!"(B
$B$b$&0l$D$NJ}K!$,$"$j$^$9!#%0%k!<%W%U%!%$%k$r:n$k$N$G$O$J$/!"(B
$B<!$N%G%#%l%/%F%#%V$r;H$($P$G$-$^$9!#(B</p>
<p>もっと特定せずに複数のユーザが入れるようにする、
もう一つの方法があります。グループファイルを作るのではなく、
次のディレクティブを使えばできます。</p>
<example>
Require valid-user
</example>
<p><code>require user rbowen</code> $B9T$G$J$/!">e5-$r;H$&$H!"(B
$B%Q%9%o!<%I%U%!%$%k$K%j%9%H$5$l$F$$$k?M$G$"$l$PC/$G$b(B
$B5v2D$5$l$^$9!#(B
$BC1$K%Q%9%o!<%I%U%!%$%k$r%0%k!<%WKh$KJ,$1$F$*$/$3$H$G!"(B
$B%0%k!<%W$N$h$&$J?6$kIq$$$r$5$;$k$3$H$b$G$-$^$9!#(B
$B$3$N%"%W%m!<%A$NMxE@$O!"(BApache $B$OFs$D$G$O$J$/!"(B
$B$?$@0l$D$N%U%!%$%k$@$1$r8!::$9$l$P$h$$$H$$$&E@$G$9!#(B
$B7gE@$O!"$?$/$5$s$N%Q%9%o!<%I%U%!%$%k$r4IM}$7$F!"$=$NCf$+$i(B
<p><code>require user rbowen</code> 行でなく、上記を使うと、
パスワードファイルにリストされている人であれば誰でも
許可されます。
単にパスワードファイルをグループ毎に分けておくことで、
グループのような振る舞いをさせることもできます。
このアプローチの利点は、Apache は二つではなく、
ただ一つのファイルだけを検査すればよいという点です。
欠点は、たくさんのパスワードファイルを管理して、その中から
<directive module="mod_authn_file">AuthUserFile</directive>
$B%G%#%l%/%F%#%V$K@5$7$$%U%!%$%k$r;2>H$5$;$J$1$l$P$J$i$J$$E@$G$9!#(B</p>
ディレクティブに正しいファイルを参照させなければならない点です。</p>
</section>
<section id="possibleproblems"><title>$B5/$3$j$($kLdBj(B</title>
<p>Basic $BG'>Z$,;XDj$5$l$F$$$k>l9g$O!"(B
$B%5!<%P$K%I%-%e%a%s%H$r%j%/%(%9%H$9$kEY$K(B
$B%f!<%6L>$H%Q%9%o!<%I$r8!::$7$J$1$l$P$J$j$^$;$s!#(B
$B$3$l$OF1$8%Z!<%8!"%Z!<%8$K$"$kA4$F$N2hA|$r(B
$B%j%m!<%I$9$k>l9g$G$"$C$F$b3:Ev$7$^$9(B
($B$b$72hA|$bJ]8n$5$l$?%G%#%l%/%H%j$+$iMh$k$N$G$"$l$P(B) $B!#(B
$BM=A[$5$l$kDL$j!"$3$l$OF0:n$rB?>/CY$/$7$^$9!#(B
$BCY$/$J$kDxEY$O%Q%9%o!<%I%U%!%$%k$NBg$-$5$HHfNc$7$^$9$,!"(B
$B$3$l$O!"%U%!%$%k$r3+$$$F$"$J$?$NL>A0$rH/8+$9$k$^$G(B
$B%f!<%6L>$N%j%9%H$rFI$^$J$1$l$P$J$i$J$$$+$i$G$9!#(B
$B$=$7$F!"%Z!<%8$,%m!<%I$5$l$kEY$K$3$l$r9T$o$J$1$l$P(B
$B$J$j$^$;$s!#(B</p>
<section id="possibleproblems"><title>起こりえる問題</title>
<p>Basic 認証が指定されている場合は、
サーバにドキュメントをリクエストする度に
ユーザ名とパスワードを検査しなければなりません。
これは同じページ、ページにある全ての画像を
リロードする場合であっても該当します
(もし画像も保護されたディレクトリから来るのであれば) 。
予想される通り、これは動作を多少遅くします。
遅くなる程度はパスワードファイルの大きさと比例しますが、
これは、ファイルを開いてあなたの名前を発見するまで
ユーザ名のリストを読まなければならないからです。
そして、ページがロードされる度にこれを行わなければ
なりません。</p>
<p>$B7kO@$H$7$F$O!"0l$D$N%Q%9%o!<%I%U%!%$%k$KCV$/$3$H$N$G$-$k(B
$B%f!<%6?t$K$O<B<AE*$J8B3&$,$"$j$^$9!#(B
$B$3$N8B3&$O%5!<%P%^%7%s$N@-G=$K0MB8$7$FJQ$o$j$^$9$,!"(B
$B?tI4$N%(%s%H%j$r1[$($?$"$?$j$+$iB.EYDc2<$,8+$i$l$k$HM=4|$5$l$F$$$^$9!#(B
$B$=$N;~$OB>$NG'>ZJ}K!$r9MN8$KF~$l$?J}$,NI$$$G$7$g$&!#(B</p>
<p>結論としては、一つのパスワードファイルに置くことのできる
ユーザ数には実質的な限界があります。
この限界はサーバマシンの性能に依存して変わりますが、
数百のエントリを越えたあたりから速度低下が見られると予期されています。
その時は他の認証方法を考慮に入れた方が良いでしょう。</p>
</section>
<section id="dbmdbd"><title>$B%Q%9%o!<%I$NJ]B87A<0$rJQ$($k(B</title>
<section id="dbmdbd"><title>パスワードの保存形式を変える</title>
<p>$B%W%l!<%s%F%-%9%H$G%Q%9%o!<%I$rJ]B8$9$kJ}K!$K$O>e5-$NLdBj$,$"$j!"(B
$B%G!<%?%Y!<%9$N$h$&$JJL$N>l=j$K%Q%9%o!<%I$rJ]B8$7$?$$$H;W$&(B
$B$+$b$7$l$^$;$s!#(B</p>
<p>プレーンテキストでパスワードを保存する方法には上記の問題があり、
データベースのような別の場所にパスワードを保存したいと思う
かもしれません。</p>
<p><module>mod_authn_dbm</module> $B$H(B <module>mod_authn_dbd</module>
$B$r;H$&$H!"$=$l$,$G$-$k$h$&$K$J$j$^$9!#(B
<p><module>mod_authn_dbm</module> <module>mod_authn_dbd</module>
を使うと、それができるようになります。
<directive module="mod_auth_basic">AuthBasicSource</directive>
$B$G(B file $B$NBe$o$j$K!"(B<code>dbm</code> $B$"$k$$$O(B <code>dbd</code>
$B$r3JG<7A<0$H$7$FA*$Y$^$9!#(B</p>
で file の代わりに、<code>dbm</code> あるいは <code>dbd</code>
を格納形式として選べます。</p>
<p>$B%F%-%9%H%U%!%$%k$NBe$o$j$K(B dbm $B%U%!%$%k$rA*Br$9$k>l9g$O!"$?$H$($P<!$N$h$&$K$7$^$9!#(B</p>
<p>テキストファイルの代わりに dbm ファイルを選択する場合は、たとえば次のようにします。</p>
<example>
&lt;Directory /www/docs/private&gt;<br />
@@ -397,17 +397,17 @@
&lt;/Directory&gt;
</example>
<p>$B$3$NB>$N%*%W%7%g%s$bB8:_$7$^$9!#>\:Y$K4X$7$F$O(B
<module>mod_authn_dbm</module> $B$N%I%-%e%a%s%H$r$4Mw$/$@$5$$!#(B</p>
<p>この他のオプションも存在します。詳細に関しては
<module>mod_authn_dbm</module> のドキュメントをご覧ください。</p>
</section>
<section id="multprovider"><title>$BJ#?t$N%W%m%P%$%@$r;HMQ$9$k(B</title>
<section id="multprovider"><title>複数のプロバイダを使用する</title>
<p>$BG'>Z>5G'%"!<%-%F%/%A%c$K4p$E$$$F$$$k?7$7$$%W%m%P%$%@$r;H$&$H!"(B
$BG'>Z>5G'$NJ}K!$r$R$H$D$KG{$kI,MW$,$J$/$J$j$^$9!#(B
$B$$$/$D$b$N%W%m%P%$%@$rAH$_9g$o$;$F!"<+J,$NK>$_$N5sF0$K$G$-$^$9!#(B
$B<!$NNc$G$O(B file $BG'>Z%W%m%P%$%@$H(B ldap $BG'>Z%W%m%P%$%@$r(B
$BAH$_9g$o$;$F$$$^$9!#(B</p>
<p>認証承認アーキテクチャに基づいている新しいプロバイダを使うと、
認証承認の方法をひとつに縛る必要がなくなります。
いくつものプロバイダを組み合わせて、自分の望みの挙動にできます。
次の例では file 認証プロバイダと ldap 認証プロバイダを
組み合わせています。</p>
<example>
&lt;Directory /www/docs/private&gt;<br />
@@ -419,16 +419,16 @@
Require valid-user
</example>
<p>$B$3$NNc$G$O!"$^$:(B file $B%W%m%P%$%@$,%f!<%6G'>Z$r;n$_$^$9!#(B
$BG'>Z$G$-$J$+$C$?>l9g$K$O!"(Bldap $B%W%m%P%$%@$,8F$S=P$5$l$^$9!#(B
$BAH?%$GJ#?t$NG'>Z3JG<J}K!$r;H$C$F$$$k:]$J$I$K!"(B
$B$3$NJ}K!$r;H$C$FG'>Z$N%9%3!<%W$r3HBg$G$-$^$9!#(B
$B$b$&$R$H$D$N%7%J%j%*$O!"$R$H$D$NG'>Z%?%$%W$H0[$J$k>5G'$r(B
$BAH$_9g$o$;$kJ}K!$G$7$g$&!#$?$H$($P!"%Q%9%o!<%I%U%!%$%k$GG'>Z$7$F!"(B
ldap $B%G%#%l%/%H%j$G>5G'$r9T$&$H$$$C$?>l9g$G$9!#(B</p>
<p>この例では、まず file プロバイダがユーザ認証を試みます。
認証できなかった場合には、ldap プロバイダが呼び出されます。
組織で複数の認証格納方法を使っている際などに、
この方法を使って認証のスコープを拡大できます。
もうひとつのシナリオは、ひとつの認証タイプと異なる承認を
組み合わせる方法でしょう。たとえば、パスワードファイルで認証して、
ldap ディレクトリで承認を行うといった場合です。</p>
<p>$BG'>Z%W%m%P%$%@$rJ#?t<BAu$G$-$k$h$&$K!">5G'J}K!$bJ#?t;HMQ$G$-$^$9!#(B
$B$3$NNc$G$O(B file $B%0%k!<%W>5G'$H(B ldap $B%0%k!<%W>5G'$r;H$C$F$$$^$9!#(B</p>
<p>認証プロバイダを複数実装できるように、承認方法も複数使用できます。
この例では file グループ承認と ldap グループ承認を使っています。</p>
<example>
&lt;Directory /www/docs/private&gt;<br />
@@ -442,44 +442,44 @@
Require ldap-group cn=mygroup,o=yourorg
</example>
<p>$B>5G'$r$h$j:Y$+$/@)8f$7$?$$>l9g$O!"(B
<directive module="mod_authz_core">&lt;SatisfyAll&gt;</directive> $B$H(B
<p>承認をより細かく制御したい場合は、
<directive module="mod_authz_core">&lt;SatisfyAll&gt;</directive>
<directive module="mod_authz_core">&lt;SatisfyOne&gt;</directive>
$B%G%#%l%/%F%#%V$r;H$C$F(B AND/OR $B%m%8%C%/$G;XDj$7!"@_Dj%U%!%$%k$G(B
$B>5G'$N=hM}=gHV$N@)8f$,$G$-$k$h$&$K$J$C$F$$$^$9!#(B
$B$3$l$i$N%G%#%l%/%F%#%V$r$I$N$h$&$K;H$($k$+!"LVMe$7$?Nc$r$4Mw$/$@$5$$!#(B</p>
ディレクティブを使って AND/OR ロジックで指定し、設定ファイルで
承認の処理順番の制御ができるようになっています。
これらのディレクティブをどのように使えるか、網羅した例をご覧ください。</p>
</section>
<section id="beyond"><title>$BC1=c$J>5G'$N$=$N@h(B</title>
<section id="beyond"><title>単純な承認のその先</title>
<p>$B>5G'$NJ}K!$O!"$R$H$D$N%G!<%?%=!<%9$r8+$F0l2s$@$1%A%'%C%/$9$k$N$HHf$Y$F!"(B
$B$:$C$HB?:L$JE,MQJ}K!$,$G$-$^$9!#(B
$B>5G'=hM}$NE,MQ=g=x$d@)8f!"A*Br$,$G$-$k$h$&$K$J$j$^$7$?!#(B</p>
<p>承認の方法は、ひとつのデータソースを見て一回だけチェックするのと比べて、
ずっと多彩な適用方法ができます。
承認処理の適用順序や制御、選択ができるようになりました。</p>
<section id="authandororder"><title>AND/OR $B%m%8%C%/$NE,MQ$H=g=xIU$1(B</title>
<p>$B>5G'$,$I$N$h$&$J=g=x$GE,MQ$5$l$F$$$k$+!"$^$?!"$=$l$r$I$N$h$&$K@)8f$9$k$+$O!"(B
$B$3$l$^$G:.Mp$r>7$$$F$$$^$7$?!#(B
Apache 2.2 $B$G$O%W%m%P%$%@%Y!<%9$NG'>Z%a%+%K%:%`$,F3F~$5$l!"(B
$B>5G'=hM}$+$iG'>Z=hM}$H%5%]!<%H5!G=$H$,@Z$jJ,$1$i$l$^$7$?!#(B
$B$3$l$K$h$k$R$H$D$N8z2L$H$7$F!"(B
$BG'>Z%b%8%e!<%k$N%m!<%I=g$d%b%8%e!<%k<+BN$N=g=x$K0MB8$9$k$3$H$J$/!"(B
$B;XDj$7$?=gHV$GG'>Z%W%m%P%$%@$,8F$S=P$;$k$h$&!"(B
$B@_Dj$G$-$k$h$&$K$J$j$^$7$?!#(B
$B$3$N%W%m%P%$%@%a%+%K%:%`$O>5G'=hM}$G$bF3F~$5$l$F$$$^$9!#(B
$B$D$^$j!"(B<directive module="mod_authz_core">Require</directive>
$B%G%#%l%/%F%#%V$OC1$K$I$N>5G'<jK!$,;H$o$l$k$+$r;XDj$9$k$@$1$G$O$J$/!"(B
$B$=$l$i$N8F$S=P$7=g=x$b;XDj$G$-$k$h$&$K$J$j$^$7$?!#(B
$BJ#?t$N>5G'<jK!$,$"$k$H$-!"$=$N8F$S=P$7=g$O!"@_Dj%U%!%$%k$N(B
<directive module="mod_authz_core">Require</directive> $B%G%#%l%/%F%#%VCf$G(B
$B8=$l$?=g=x$HF1$8$K$J$j$^$9!#(B</p>
<section id="authandororder"><title>AND/OR ロジックの適用と順序付け</title>
<p>承認がどのような順序で適用されているか、また、それをどのように制御するかは、
これまで混乱を招いていました。
Apache 2.2 ではプロバイダベースの認証メカニズムが導入され、
承認処理から認証処理とサポート機能とが切り分けられました。
これによるひとつの効果として、
認証モジュールのロード順やモジュール自体の順序に依存することなく、
指定した順番で認証プロバイダが呼び出せるよう、
設定できるようになりました。
このプロバイダメカニズムは承認処理でも導入されています。
つまり、<directive module="mod_authz_core">Require</directive>
ディレクティブは単にどの承認手法が使われるかを指定するだけではなく、
それらの呼び出し順序も指定できるようになりました。
複数の承認手法があるとき、その呼び出し順は、設定ファイルの
<directive module="mod_authz_core">Require</directive> ディレクティブ中で
現れた順序と同じになります。</p>
<p>$BDI2C$GF3F~$5$l$?(B
<p>追加で導入された
<directive module="mod_authz_core">&lt;SatisfyAll&gt;</directive>,
<directive module="mod_authz_core">&lt;SatisfyOne&gt;</directive>
$B%G%#%l%/%F%#%V$r;H$C$F!">5G'<jK!$,$$$D8F$S=P$5$l!"%"%/%;%9$,5v2D$5$l$?:]$K(B
$B$I$N<jB3$-$,E,MQ$5$l$k$+;XDj$9$k$3$H$,$G$-$^$9!#(B
$B$?$H$($P!"<!$N>5G'%V%m%C%/$N%m%8%C%/$r8+$F$_$^$7$g$&(B:</p>
ディレクティブを使って、承認手法がいつ呼び出され、アクセスが許可された際に
どの手続きが適用されるか指定することができます。
たとえば、次の承認ブロックのロジックを見てみましょう:</p>
<example>
# if ((user == "John") ||<br />
@@ -514,66 +514,66 @@
&lt;/Directory&gt;
</example>
<p>$B%G%U%)%k%H$G$O(B <directive module="mod_authz_core">Require</directive>
$B%G%#%l%/%F%#%V$O(B OR $BA`:n$H$7$F07$o$l$^$9!#$D$^$j!"$b$7;XDj$7$?>5G'<jK!$N(B
$B$R$H$D$G$b9g3J$9$l$P!">5G'$5$l$^$9!#(B
<directive module="mod_authz_core">Require</directive> $B%G%#%l%/%F%#%V$N%;%C%H$r(B
$B$R$H$D$N(B <directive module="mod_authz_core">&lt;SatisfyAll&gt;</directive>
$B%V%m%C%/$G0O$`$H(BAND $BA`:n$H$J$j!"A4$F$N>5G'<jK!$G9g3J$7$J$1$l$P5v2D$5$l$^$;$s!#(B</p>
<p>デフォルトでは <directive module="mod_authz_core">Require</directive>
ディレクティブは OR 操作として扱われます。つまり、もし指定した承認手法の
ひとつでも合格すれば、承認されます。
<directive module="mod_authz_core">Require</directive> ディレクティブのセットを
ひとつの <directive module="mod_authz_core">&lt;SatisfyAll&gt;</directive>
ブロックで囲むとAND 操作となり、全ての承認手法で合格しなければ許可されません。</p>
</section>
<section id="reqaccessctrl"><title>$B%"%/%;%9@)8f$K$*$1$k(B Require $B$H(B Reject $B$N;H$$J}(B</title>
<p>$B%f!<%6L>$H%Q%9%o!<%I$K$h$kG'>Z$OA4BN$N0lItJ,$G$7$+$"$j$^$;$s!#(B
$BC/$,%"%/%;%9$7$F$-$?$+$H$$$C$?>pJs0J30$N>r7o$r;H$$$?$$!"(B
$B$H$h$/;W$&$3$H$G$7$g$&!#(B
$B$?$H$($P!"$I$3$+$i%"%/%;%9$7$F$-$F$$$k$+!"$H$$$C$?6q9g$G$9!#(B</p>
<section id="reqaccessctrl"><title>アクセス制御における Require と Reject の使い方</title>
<p>ユーザ名とパスワードによる認証は全体の一部分でしかありません。
誰がアクセスしてきたかといった情報以外の条件を使いたい、
とよく思うことでしょう。
たとえば、どこからアクセスしてきているか、といった具合です。</p>
<p>$B>5G'%W%m%P%$%@(B <directive module="mod_authz_host">all</directive>,
<p>承認プロバイダ <directive module="mod_authz_host">all</directive>,
<directive module="mod_authz_host">env</directive>,
<directive module="mod_authz_host">host</directive>,
<directive module="mod_authz_host">ip</directive>
$B$r;H$&$H!"%j%/%(%9%H$rAw?.$7$F$-$F$$$k%^%7%s$N%[%9%HL>$d(B IP $B%"%I%l%9(B
$B$H$$$C$?!"%[%9%H%Y!<%9$G$N%"%/%;%9@)8f$,$G$-$^$9!#(B</p>
を使うと、リクエストを送信してきているマシンのホスト名や IP アドレス
といった、ホストベースでのアクセス制御ができます。</p>
<p>$B$3$l$i%W%m%P%$%@$N07$$$O(B
<directive module="mod_authz_core">Require</directive> $B$d(B
<directive module="mod_authz_core">Reject</directive> $B$G(B
$B;XDj$5$l$^$9!#$3$l$i$N%G%#%l%/%F%#%V$O>5G'%W%m%P%$%@$rEPO?$7!"(B
$B%j%/%(%9%H=hM}$N>5G'CJ3,$G8F$S=P$5$l$^$9!#$?$H$($P(B:</p>
<p>これらプロバイダの扱いは
<directive module="mod_authz_core">Require</directive>
<directive module="mod_authz_core">Reject</directive>
指定されます。これらのディレクティブは承認プロバイダを登録し、
リクエスト処理の承認段階で呼び出されます。たとえば:</p>
<example>
Require ip <var>address</var>
</example>
<p>$B$3$3$G!"(B<var>address</var> $B$O(B IP $B%"%I%l%9(B ($B$"$k$$$O(B IP $B%"%I%l%9$N(B
$B0lIt(B) $B$+(B : </p>
<p>ここで、<var>address</var> は IP アドレス (あるいは IP アドレスの
一部) か : </p>
<example>
Require host <var>domain_name</var>
</example>
<p>$B$3$3$G(B <var>domain_name</var> $B$O(B FQDN ($B$"$k$$$O%I%a%$%sL>$N0lIt(B)
$B$G!"I,MW$G$"$l$PJ#?t$N%"%I%l%9$d%I%a%$%sL>$r=q$/$3$H$,$G$-$^$9!#(B</p>
<p>ここで <var>domain_name</var> は FQDN (あるいはドメイン名の一部)
で、必要であれば複数のアドレスやドメイン名を書くことができます。</p>
<p>$B$?$H$($P!"%9%Q%`%a%C%;!<%8$rAw?.$7$F$/$kC/$+$r5qH]$7$?$$>l9g!"(B
$B<!$N$h$&$K$J$j$^$9(B : </p>
<p>たとえば、スパムメッセージを送信してくる誰かを拒否したい場合、
次のようになります : </p>
<example>
Reject ip 10.252.46.165
</example>
<p>$B$3$N%G%#%l%/%F%#%V$,M-8z$JHO0O$N%3%s%F%s%D$KBP$7$F$O!"(B
$B$=$N%"%I%l%9$+$i%"%/%;%9$7$F$-$F$b8+$k$3$H$,$G$-$^$;$s!#(B
$B$b$7%^%7%sL>$,$o$+$C$F$$$F(B IP $B%"%I%l%9$h$j$b$=$A$i$G(B
$B;XDj$7$?$$$N$G$"$l$P!"$=$N%^%7%sL>$,;H$($^$9!#(B</p>
<p>このディレクティブが有効な範囲のコンテンツに対しては、
そのアドレスからアクセスしてきても見ることができません。
もしマシン名がわかっていて IP アドレスよりもそちらで
指定したいのであれば、そのマシン名が使えます。</p>
<example>
Reject host <var>host.example.com</var>
</example>
<p>$B$^$?!"FCDj$N%I%a%$%s$+$i$N%"%/%;%9A4$F$r%V%m%C%/$7$?$$>l9g$O!"(B
IP $B%"%I%l%9$N0lIt$d!"%I%a%$%sL>$,;XDj$G$-$^$9(B :</p>
<p>また、特定のドメインからのアクセス全てをブロックしたい場合は、
IP アドレスの一部や、ドメイン名が指定できます :</p>
<example>
&lt;SatisfyAll&gt;<br />
@@ -584,57 +584,57 @@
&lt;/SatisfyAll&gt;
</example>
<p><directive module="mod_authz_host">Reject</directive> $B%G%#%l%/%F%#%V$r(B
<directive module="mod_authz_core">&lt;SatisfyAll&gt;</directive> $B%V%m%C%/$NCf$G;H$&$H!"(B
$B5v2D$7$?$$%0%k!<%W$K$N$_%"%/%;%9$,$G$-$k$h$&$K3NG'$G$-$^$9!#(B</p>
<p><directive module="mod_authz_host">Reject</directive> ディレクティブを
<directive module="mod_authz_core">&lt;SatisfyAll&gt;</directive> ブロックの中で使うと、
許可したいグループにのみアクセスができるように確認できます。</p>
<p>$B>e5-$NNc$G$O(B <directive module="mod_authz_core">&lt;SatisfyAll&gt;</directive>
$B$r;H$C$F!"%"%/%;%9$K9g3J$9$kA0CJ3,$G!"A4$F$N(B
<directive module="mod_authz_host">Reject</directive> $B%G%#%l%/%F%#%V$,(B
$BK~$?$5$l$F$$$k$3$H$r3NG'$7$F$$$^$9!#(B</p>
<p>上記の例では <directive module="mod_authz_core">&lt;SatisfyAll&gt;</directive>
を使って、アクセスに合格する前段階で、全ての
<directive module="mod_authz_host">Reject</directive> ディレクティブが
満たされていることを確認しています。</p>
</section>
<section id="filesystem"><title>$B%"%/%;%9@)8f$N8eJ}8_49@-(B</title>
<p>$BG'>Z%W%m%P%$%@%Y!<%9$N5!9=$,$"$k$?$a!"0JA0;HMQ$5$l$F$$$?%G%#%l%/%F%#%V(B
<section id="filesystem"><title>アクセス制御の後方互換性</title>
<p>認証プロバイダベースの機構があるため、以前使用されていたディレクティブ
<directive module="mod_access_compat">Order</directive>,
<directive module="mod_access_compat">Allow</directive>,
<directive module="mod_access_compat">Deny</directive>,
<directive module="mod_access_compat">Satisfy</directive>
$B$OI,MW$J$/$J$j$^$7$?!#(B
$B$H$O$$$&$b$N$N!"8E$$@_Dj%U%!%$%k$G$N8eJ}8_49@-$rDs6!$9$k$?$a!"(B
$B$3$l$i$N%G%#%l%/%F%#%V$O(B <module>mod_access_compat</module> $B%b%8%e!<%k$K0\$5$l$^$7$?!#(B</p>
は必要なくなりました。
とはいうものの、古い設定ファイルでの後方互換性を提供するため、
これらのディレクティブは <module>mod_access_compat</module> モジュールに移されました。</p>
<p>$B$3$l$i$N%G%#%l%/%F%#%V$NJz$($F$$$?LdBj$N$R$H$D$K!">5G'$N@_Dj9T$H%"%/%;%9@)8f$N@_Dj9T$N(B
$B4X78$,$H$F$b$"$$$^$$$@$C$?$3$H$,5s$2$i$l$^$9!#(B
<directive module="mod_access_compat">Satisfy</directive> $B%G%#%l%/%F%#%V$O(B
$B%j%/%(%9%H=hM}Cf$G$=$l<+?H$r8F$S=P$9$3$H$K$h$C$F!"$3$l$i$N(B 2 $B$D$N=hM}CJ3,$r7k$S$D$1$h$&$H$7$^$9!#(B
$B8=:_$O!"$3$l$i$N%G%#%l%/%F%#%V$O(B <module>mod_access_compat</module> $B$K0\F0$7!"(B
$B?7$7$$G'>Z%G%#%l%/%F%#%V$H8E$$%"%/%;%9@)8f%G%#%l%/%F%#%V$r:.$<$F;H$&$3$H$O(B
$BFq$7$/$J$C$F$$$^$9!#$3$NLdBj$N$?$a!"(B<module>mod_authz_default</module> $B%b%8%e!<%k$r(B
$B%m!<%I$9$k$3$H$,$H$F$b=EMW$G!"I,?\$K$J$C$F$$$^$9!#(B
<module>mod_authz_default</module>$B!!%b%8%e!<%k$N<g$JL\E*$O!"$I$N>5G'%W%m%P%$%@$G(B
$B=hM}$5$l$J$+$C$?>5G'%j%/%(%9%H$r<u$1$k$3$H$K$"$j$^$9!#(B
$B$7$+$7!"8E$$%"%/%;%9@)8f%G%#%l%/%F%#%V$,MQ$$$i$l$?>l9g$K$O!"(B
$B%"%/%;%9@)8f$H>5G'$r7k$S$D$1$F!"$9$Y$F$N=hM}CJ3,$N=PNO7k2L$r8+$F%"%/%;%9$K9g3J$9$k$+$r7h$a$F$$$^$9!#(B
$B$G$9$+$i!"8E$$%G%#%l%/%F%#%V$,$&$^$/F0:n$7$J$$>l9g$O!"(B
<module>mod_authz_default</module> $B$,%m!<%I$5$l$F$$$J$$$+$i$+$b$7$l$J$$!"(B
$B$H5?$C$F$_$F$/$@$5$$!#(B</p>
<p>これらのディレクティブの抱えていた問題のひとつに、承認の設定行とアクセス制御の設定行の
関係がとてもあいまいだったことが挙げられます。
<directive module="mod_access_compat">Satisfy</directive> ディレクティブは
リクエスト処理中でそれ自身を呼び出すことによって、これらの 2 つの処理段階を結びつけようとします。
現在は、これらのディレクティブは <module>mod_access_compat</module> に移動し、
新しい認証ディレクティブと古いアクセス制御ディレクティブを混ぜて使うことは
難しくなっています。この問題のため、<module>mod_authz_default</module> モジュールを
ロードすることがとても重要で、必須になっています。
<module>mod_authz_default</module> モジュールの主な目的は、どの承認プロバイダで
処理されなかった承認リクエストを受けることにあります。
しかし、古いアクセス制御ディレクティブが用いられた場合には、
アクセス制御と承認を結びつけて、すべての処理段階の出力結果を見てアクセスに合格するかを決めています。
ですから、古いディレクティブがうまく動作しない場合は、
<module>mod_authz_default</module> がロードされていないからかもしれない、
と疑ってみてください。</p>
</section>
</section>
<section id="moreinformation"><title>$BDI2C>pJs(B</title>
<p>$B$3$l$iA4$F$,$I$N$h$&$KF0:n$9$k$+$K$D$$$F(B
$B$b$C$HB?$/$N>pJs$,=q$+$l$F$$$k(B <module>mod_auth_basic</module> $B$H(B
<section id="moreinformation"><title>追加情報</title>
<p>これら全てがどのように動作するかについて
もっと多くの情報が書かれている <module>mod_auth_basic</module>
<module>mod_authz_host</module>
$B$NJ8=q$bFI$`$H$h$$$G$7$g$&!#(B
の文書も読むとよいでしょう。
<directive module="mod_authn_core">&lt;AuthnProviderAlias&gt;</directive>
$B%G%#%l%/%F%#%V$r;H$&$H!"FCDj$NG'>Z@_Dj$,4JC1$K=q$1$k$h$&$K$J$j$^$9!#(B</p>
ディレクティブを使うと、特定の認証設定が簡単に書けるようになります。</p>
<p><a href="access.html">$B%"%/%;%9@)8f(B</a>$B$NJ}K!$b!"(B
$B4XO"$9$k%H%T%C%/$,$?$/$5$s5-:\$5$l$F$$$^$9$N$G!"$4Mw$/$@$5$$!#(B</p>
<p><a href="access.html">アクセス制御</a>の方法も、
関連するトピックがたくさん記載されていますので、ご覧ください。</p>
</section>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:545841 (outdated) -->
@@ -21,12 +21,12 @@
-->
<manualpage metafile="cgi.xml.meta">
<parentdocument href="./">How-To / $B%A%e!<%H%j%"%k(B</parentdocument>
<parentdocument href="./">How-To / チュートリアル</parentdocument>
<title>Apache Tutorial: CGI $B$K$h$kF0E*%3%s%F%s%D(B</title>
<title>Apache Tutorial: CGI による動的コンテンツ</title>
<section id="intro">
<title>$B$O$8$a$K(B</title>
<title>はじめに</title>
<related>
<modulelist>
@@ -41,96 +41,96 @@
</directivelist>
</related>
<p>CGI (Common Gateway Interface) $B$O!"%&%'%V%5!<%P$,(B
$B%3%s%F%s%D@8@.$r$9$k30It%W%m%0%i%`$H6(D4$7$FF0:n$9$k$?$a$NJ}K!$r(B
$BDj5A$7$F$$$^$9!#$=$N%W%m%0%i%`$O$7$P$7$P(B CGI $B%W%m%0%i%`$d(B
CGI $B%9%/%j%W%H$H8F$P$l$^$9!#(BCGI $B$O!"%&%'%V%5%$%H$KF0E*$J(B
$B%3%s%F%s%D$rCV$/$?$a$N:G$b4JC1$G0lHLE*$JJ}K!$G$9!#$3$N%I%-%e%a%s%H$O!"(B
Apache $B%&%'%V%5!<%P$G(B CGI $B$r@_Dj$7!"(B
CGI $B%W%m%0%i%`$r=q$-;O$a$k$?$a$NF~Lg=q$H$J$k$G$7$g$&!#(B</p>
<p>CGI (Common Gateway Interface) は、ウェブサーバが
コンテンツ生成をする外部プログラムと協調して動作するための方法を
定義しています。そのプログラムはしばしば CGI プログラムや
CGI スクリプトと呼ばれます。CGI は、ウェブサイトに動的な
コンテンツを置くための最も簡単で一般的な方法です。このドキュメントは、
Apache ウェブサーバで CGI を設定し、
CGI プログラムを書き始めるための入門書となるでしょう。</p>
</section>
<section id="configuring">
<title>CGI $B$r5v2D$9$k$h$&$K(B Apache $B$r@_Dj$9$k(B</title>
<title>CGI を許可するように Apache を設定する</title>
<p>CGI $B%W%m%0%i%`$r@5$7$/F0:n$5$;$k$K$O!"(BCGI $B$r5v2D$9$k$h$&$K(B
Apache $B$N@_Dj$r9T$&I,MW$,$"$j$^$9!#(B
$B$3$l$r9T$J$&$?$a$NJ}K!$,$$$/$D$+$"$j$^$9!#(B</p>
<p>CGI プログラムを正しく動作させるには、CGI を許可するように
Apache の設定を行う必要があります。
これを行なうための方法がいくつかあります。</p>
<section id="scriptalias">
<title>ScriptAlias</title>
<p><directive module="mod_alias">ScriptAlias</directive>
$B%G%#%l%/%F%#%V$r;HMQ$7$F!"(B
CGI $B%W%m%0%i%`MQ$NFCJL$JJL%G%#%l%/%H%j$r(B Apache $B$K@_Dj$7$^$9!#(B
Apache $B$O!"$3$N%G%#%l%/%H%jCf$NA4$F$N%U%!%$%k$r(B CGI
$B%W%m%0%i%`$G$"$k$H2>Dj$7$^$9!#(B
$B$=$7$F!"$3$NFCJL$J%j%=!<%9$,%/%i%$%"%s%H$+$iMW5a$5$l$k$H!"(B
$B$=$N%W%m%0%i%`$N<B9T$r;n$_$^$9!#(B</p>
ディレクティブを使用して、
CGI プログラム用の特別な別ディレクトリを Apache に設定します。
Apache は、このディレクトリ中の全てのファイルを CGI
プログラムであると仮定します。
そして、この特別なリソースがクライアントから要求されると、
そのプログラムの実行を試みます。</p>
<p><directive module="mod_alias">ScriptAlias</directive>
$B%G%#%l%/%F%#%V$O0J2<$N$h$&$K;HMQ$7$^$9(B:</p>
ディレクティブは以下のように使用します:</p>
<example>
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
</example>
<p>$B%G%U%)%k%H0LCV$K(B Apache $B$r%$%s%9%H!<%k$7$?$J$i$P!"(B
$B$3$NNc$O%G%U%)%k%H>uBV$N(B <code>httpd.conf</code>
$B@_Dj%U%!%$%k$K4^$^$l$F$$$^$9!#(B
<p>デフォルト位置に Apache をインストールしたならば、
この例はデフォルト状態の <code>httpd.conf</code>
設定ファイルに含まれています。
<directive module="mod_alias">ScriptAlias</directive>
$B%G%#%l%/%F%#%V$O!"(BURL $B$NA0$KIU2C$9$k%G%#%l%/%H%j$rDj5A$9$k(B
ディレクティブは、URL の前に付加するディレクトリを定義する
<directive module="mod_alias">Alias</directive>
$B%G%#%l%/%F%#%V$H$+$J$j;w$F$$$^$9!#(B
<directive>Alias</directive> $B$H(B <directive>ScriptAlias</directive>
$B$ODL>o!"(B<directive module="core">DocumentRoot</directive>
$B%G%#%l%/%H%j30$N%G%#%l%/%H%j$N$?$a$K;HMQ$5$l$^$9!#(B
<directive>Alias</directive> $B$H(B <directive>ScriptAlias</directive>
$B$H$N:9$O!"(B<directive>ScriptAlias</directive> $B$,@\F,<-$G;O$^$k$9$Y$F$N(B
URL $B$O(B CGI $B%W%m%0%i%`$H$_$J$5$l$k$H$$$&DI2C$N0UL#$r4^$s$G$$$k$3$H$G$9!#(B
$B=>$C$F!">e5-$NNc$G$O!"(B<code>/cgi-bin/</code>
$B$G;O$^$k%j%=!<%9$X$N$"$i$f$k%j%/%(%9%H$KBP$7$F!"%G%#%l%/%H%j(B
<code>/usr/local/apache2/cgi-bin/</code> $B$+$iDs6!$7!"$=$l$i$r(B
CGI $B%W%m%0%i%`$H$7$F07$&$h$&(B Apache $B$K<($7$^$9!#(B</p>
ディレクティブとかなり似ています。
<directive>Alias</directive> <directive>ScriptAlias</directive>
は通常、<directive module="core">DocumentRoot</directive>
ディレクトリ外のディレクトリのために使用されます。
<directive>Alias</directive> <directive>ScriptAlias</directive>
との差は、<directive>ScriptAlias</directive> が接頭辞で始まるすべての
URL は CGI プログラムとみなされるという追加の意味を含んでいることです。
従って、上記の例では、<code>/cgi-bin/</code>
で始まるリソースへのあらゆるリクエストに対して、ディレクトリ
<code>/usr/local/apache2/cgi-bin/</code> から提供し、それらを
CGI プログラムとして扱うよう Apache に示します。</p>
<p>$BNc$($P!"(BURL <code>http://www.example.com/cgi-bin/test.pl</code>
$B$,MW5a$5$l$?>l9g!"(BApache $B$O(B $B%U%!%$%k(B
<p>例えば、URL <code>http://www.example.com/cgi-bin/test.pl</code>
が要求された場合、Apache は ファイル
<code>/usr/local/apache2/cgi-bin/test.pl</code>
$B$r<B9T$7!"$=$N=PNO$rJV$9$3$H$r;n$_$^$9!#(B
$B$b$A$m$s!"%U%!%$%k$,B8:_$7!"<B9T2DG=$G$"$j!"7h$a$i$l$?J}K!$G=PNO$rJV$7$^$9!#(B
$B$=$&$G$J$1$l$P!"(BApache $B$O%(%i!<%a%C%;!<%8$rJV$7$^$9!#(B</p>
を実行し、その出力を返すことを試みます。
もちろん、ファイルが存在し、実行可能であり、決められた方法で出力を返します。
そうでなければ、Apache はエラーメッセージを返します。</p>
</section>
<section id="nonscriptalias">
<title>ScriptAlias $B%G%#%l%/%H%j30$N(B CGI</title>
<title>ScriptAlias ディレクトリ外の CGI</title>
<p>CGI $B%W%m%0%i%`$O!"%;%-%e%j%F%#>e$NM}M3$+$i(B
<p>CGI プログラムは、セキュリティ上の理由から
<directive module="mod_alias">ScriptAlias</directive>
$B$5$l$?%G%#%l%/%H%j$K@)8B$5$l$k$3$H$,$7$P$7$P$"$j$^$9!#$3$NJ}K!$K$h$j!"(B
CGI $B%W%m%0%i%`$r;HMQ$G$-$k%f!<%6$r4IM}<T$,87$7$/@)8f$9$k$3$H$,$G$-$^$9!#(B
$B$7$+$7$J$,$i!"E,@Z$J%;%-%e%j%F%#;vA0BP:v$,$H$i$l$k$J$i$P!"(BCGI
$B%W%m%0%i%`$rG$0U$N%G%#%l%/%H%j$G<B9T$G$-$J$$$h$&$K$9$kM}M3$O$"$j$^$;$s!#(B
$BNc$($P!"%f!<%6$K(B <directive module="mod_userdir">UserDir</directive>
$B%G%#%l%/%F%#%V$GH`$i$N%[!<%`%G%#%l%/%H%jG[2<$K%&%'%V%3%s%F%s%D$r;}$?$;$?$$$H$7$^$9!#(B
$B$b$7!"H`$i$,(B CGI $B%W%m%0%i%`$r;}$D$3$H$rK>$s$G$$$F$b!"%a%$%s$N(B
<code>cgi-bin</code> $B%G%#%l%/%H%j$X$N%"%/%;%9$,$G$-$J$$>l9g!"(B
CGI $B%W%m%0%i%`$r<B9T$9$k$3$H$,$G$-$kB>$N>l=j$,I,MW$K$J$j$^$9!#(B</p>
されたディレクトリに制限されることがしばしばあります。この方法により、
CGI プログラムを使用できるユーザを管理者が厳しく制御することができます。
しかしながら、適切なセキュリティ事前対策がとられるならば、CGI
プログラムを任意のディレクトリで実行できないようにする理由はありません。
例えば、ユーザに <directive module="mod_userdir">UserDir</directive>
ディレクティブで彼らのホームディレクトリ配下にウェブコンテンツを持たせたいとします。
もし、彼らが CGI プログラムを持つことを望んでいても、メインの
<code>cgi-bin</code> ディレクトリへのアクセスができない場合、
CGI プログラムを実行することができる他の場所が必要になります。</p>
<p>$BG$0U$N%G%#%l%/%H%j$G(B CGI $B$N<B9T$r5v2D$9$k$K$OFsCJ3,$N@_Dj$,I,MW$G$9!#(B
$B$^$:!"(B<directive
module="mod_mime">AddHandler</directive> $B$d(B <directive
module="core">SetHandler</directive> $B%G%#%l%/%F%#%V$K$h$C$F(B
<code>cgi-script</code> $B%O%s%I%i$,2DG=$K$J$C$F$$$kI,MW$,$"$j$^$9!#(B
$B<!$K!"(B<directive module="core">Options</directive> $B%G%#%l%/%F%#%V$G(B
<code>ExecCGI</code> $B$,;XDj$5$l$F$$$J$1$l$P$J$j$^$;$s!#(B</p>
<p>任意のディレクトリで CGI の実行を許可するには二段階の設定が必要です。
まず、<directive
module="mod_mime">AddHandler</directive> <directive
module="core">SetHandler</directive> ディレクティブによって
<code>cgi-script</code> ハンドラが可能になっている必要があります。
次に、<directive module="core">Options</directive> ディレクティブで
<code>ExecCGI</code> が指定されていなければなりません。</p>
</section>
<section id="options">
<title>CGI $B$N<B9T$r2DG=$K$9$k$?$a$K(B Options $B$rL@<(E*$K;HMQ$9$k(B</title>
<title>CGI の実行を可能にするために Options を明示的に使用する</title>
<p>$B%5!<%P$N%a%$%s$N@_Dj%U%!%$%kCf$G(B <directive module="core">Options</directive>
$B%G%#%l%/%F%#%V$rL@<(E*$K;HMQ$9$k$3$H$G!"FCDj$N%G%#%l%/%H%jG[2<$G(B
CGI $B$N<B9T$r5v2D$9$k$h$&$K;XDj$9$k$3$H$,$G$-$^$9(B:</p>
<p>サーバのメインの設定ファイル中で <directive module="core">Options</directive>
ディレクティブを明示的に使用することで、特定のディレクトリ配下で
CGI の実行を許可するように指定することができます:</p>
<example>
&lt;Directory /usr/local/apache2/htdocs/somedir&gt;<br />
@@ -140,13 +140,13 @@
&lt;/Directory&gt;
</example>
<p>$B>e5-%G%#%l%/%F%#%V$O!"(BCGI $B%U%!%$%k$N<B9T$r2DG=$K$9$k$h$&(B
Apache $B$KEA$($^$9!#$^$?!"$I$N%U%!%$%k$,(B CGI $B%U%!%$%k$+$r(B
$B%5!<%P$KEA$($kI,MW$,$"$j$^$9!#<!$N(B
<p>上記ディレクティブは、CGI ファイルの実行を可能にするよう
Apache に伝えます。また、どのファイルが CGI ファイルかを
サーバに伝える必要があります。次の
<directive module="mod_mime">AddHandler</directive>
$B%G%#%l%/%F%#%V$NNc$G$O!"(B<code>cgi</code> $B$^$?$O(B <code>pl</code>
$B$r3HD%;R$K;}$D$9$Y$F$N%U%!%$%k$r(B CGI
$B%W%m%0%i%`$H$7$F$_$J$9$3$H$r%5!<%P$KEA$($^$9(B:</p>
ディレクティブの例では、<code>cgi</code> または <code>pl</code>
を拡張子に持つすべてのファイルを CGI
プログラムとしてみなすことをサーバに伝えます:</p>
<example>
AddHandler cgi-script .cgi .pl
@@ -154,18 +154,18 @@
</section>
<section id="htaccess">
<title>.htaccess $B%U%!%$%k(B</title>
<title>.htaccess ファイル</title>
<p><a href="htaccess.html"><code>.htaccess</code> $B%A%e!<%H%j%"%k(B</a>
$B$O(B <code>httpd.conf</code> $B$rJQ99$G$-$J$$>l9g$K$I$&$d$C$F(B CGI $B%W%m%0%i%`$r(B
$B;H$($k$h$&$K$9$k$+$r@bL@$7$F$$$^$9!#(B</p>
<p><a href="htaccess.html"><code>.htaccess</code> チュートリアル</a>
<code>httpd.conf</code> を変更できない場合にどうやって CGI プログラムを
使えるようにするかを説明しています。</p>
</section>
<section id="userdir">
<title>User $B%G%#%l%/%H%j(B</title>
<title>User ディレクトリ</title>
<p><code>.cgi</code> $B$G=*$o$k$9$Y$F$N%U%!%$%k$KBP$7$F(B CGI $B%W%m%0%i%`$N(B
$B<B9T$r5v2D$9$k$K$O!"0J2<$N@_Dj$r;HMQ$G$-$^$9!#(B</p>
<p><code>.cgi</code> で終わるすべてのファイルに対して CGI プログラムの
実行を許可するには、以下の設定を使用できます。</p>
<example>
&lt;Directory /home/*/public_html&gt;<br/>
@@ -176,9 +176,9 @@
&lt;/Directory&gt;
</example>
<p>$B%f!<%6%G%#%l%/%H%j$N(B <code>cgi-bin</code> $B%5%V%G%#%l%/%H%j$N(B
$B$9$Y$F$N%U%!%$%k$r(B CGI $B%W%m%0%i%`$H$7$F;XDj$7$?$$>l9g$K$O(B
$B0J2<$N$h$&$J$b$N$r;H$$$^$9!#(B</p>
<p>ユーザディレクトリの <code>cgi-bin</code> サブディレクトリの
すべてのファイルを CGI プログラムとして指定したい場合には
以下のようなものを使います。</p>
<example>
&lt;Directory /home/*/public_html/cgi-bin&gt;<br/>
@@ -193,35 +193,35 @@
</section>
<section id="writing">
<title>CGI $B%W%m%0%i%`$r=q$/(B</title>
<title>CGI プログラムを書く</title>
<p>$B!VDL>o$N!W%W%m%0%i%_%s%0$H(B CGI
$B%W%m%0%i%_%s%0$N4V$K$O<g$KFs$D$N0c$$$,$"$j$^$9!#(B</p>
<p>「通常の」プログラミングと CGI
プログラミングの間には主に二つの違いがあります。</p>
<p>$B0l$D$O!"(BCGI $B%W%m%0%i%`$N$9$Y$F$N=PNO$K$O(B MIME-type
$B%X%C%@$rIU$1$J$1$l$P$J$j$^$;$s!#(B
$B$3$l$O$I$N$h$&$J<oN`$N%3%s%F%s%D$r<u$1<h$C$F$$$k$+$r%/%i%$%"%s%H$K<($9(B
HTTP $B%X%C%@$G$9!#$[$H$s$I$N>l9g$G$O!"<!$N$h$&$K=PNO$7$^$9(B:</p>
<p>一つは、CGI プログラムのすべての出力には MIME-type
ヘッダを付けなければなりません。
これはどのような種類のコンテンツを受け取っているかをクライアントに示す
HTTP ヘッダです。ほとんどの場合では、次のように出力します:</p>
<example>
Content-type: text/html
</example>
<p>$B$b$&0l$D$O!"=PNO$r(B HTML
$B$+!"%V%i%&%6$,I=<($9$k$3$H$,$G$-$k2?$+B>$N7A<0$K$9$kI,MW$,$"$j$^$9!#(B
$BBgDq$N>l9g$O(B HTML $B$G$7$g$&$,!"(BGIF $B%$%a!<%8$dB>$NHs(B HTML
$B%3%s%F%s%D$r=PNO$9$k(B CGI $B%W%m%0%i%`$r=q$/$3$H$b$"$k$G$7$g$&!#(B</p>
<p>もう一つは、出力を HTML
か、ブラウザが表示することができる何か他の形式にする必要があります。
大抵の場合は HTML でしょうが、GIF イメージや他の非 HTML
コンテンツを出力する CGI プログラムを書くこともあるでしょう。</p>
<p>$B$3$l$iFsE@0J30$G$O!"(BCGI $B%W%m%0%i%`$r=q$/$3$H$O!"(B
$B$"$J$?$,=q$$$F$$$kB>$N%W%m%0%i%`$H$h$/;w$F$$$k$G$7$g$&!#(B</p>
<p>これら二点以外では、CGI プログラムを書くことは、
あなたが書いている他のプログラムとよく似ているでしょう。</p>
<section id="firstcgi">
<title>$B:G=i$N(B CGI $B%W%m%0%i%`(B</title>
<title>最初の CGI プログラム</title>
<p>$B<!$K<($9$N$O!"%V%i%&%6$K(B 1 $B9T0u;z$9$k(B CGI
$B%W%m%0%i%`$NNc$G$9!#0J2<$rF~NO$7!"(B<code>first.pl</code>
$B$H$$$&%U%!%$%k$KJ]B8$7!"$=$l$r(B <code>cgi-bin</code>
$B%G%#%l%/%H%j$KCV$$$F$/$@$5$$!#(B</p>
<p>次に示すのは、ブラウザに 1 行印字する CGI
プログラムの例です。以下を入力し、<code>first.pl</code>
というファイルに保存し、それを <code>cgi-bin</code>
ディレクトリに置いてください。</p>
<example>
#!/usr/bin/perl<br />
@@ -229,227 +229,227 @@
print "Hello, World.";
</example>
<p>Perl $B$K@:DL$7$F$$$J$/$F$b!"(B
$B2?$,5/$3$k$+$rM}2r$9$k$3$H$O$G$-$k$G$7$g$&!#(B1 $B9TL\$O!"(B
<code>/usr/bin/perl</code> $B$G8+$D$1$i$l$k%$%s%?%W%j%?$K(B
$B$3$N%U%!%$%k$r6!5k$9$k$3$H$G$3$N%W%m%0%i%`$,<B9T$5$l$k$3$H$r(B
Apache $B$K(B ($B%7%'%k>e$G<B9T$7$h$&$H$7$F$$$k$J$i$P!"$=$N%7%'%k$K(B )
$B<($7$^$9!#(B2 $B9TL\$O!"A0=R$7$?$H$*$j(B content-type $B$NDj5A$r0u;z$7$^$9!#(B
$B$3$l$K$OI|5"2~9T$NFs$D$NAH$r8e$KIU2C$7$^$9!#(B
$B$3$l$K$h$j!"%X%C%@$N=*$j$K6u9T$,CV$+$l!"(BHTTP
$B%X%C%@$N=*$j$H%\%G%#$N;O$^$j$r<($7$^$9!#(B3 $B9TL\$O!"(B"Hello, World."
$B$H$$$&J8;zNs$r0u;z$7!"$3$l$G=*$j$H$J$j$^$9!#(B</p>
<p>Perl に精通していなくても、
何が起こるかを理解することはできるでしょう。1 行目は、
<code>/usr/bin/perl</code> で見つけられるインタプリタに
このファイルを供給することでこのプログラムが実行されることを
Apache に (シェル上で実行しようとしているならば、そのシェルに )
示します。2 行目は、前述したとおり content-type の定義を印字します。
これには復帰改行の二つの組を後に付加します。
これにより、ヘッダの終りに空行が置かれ、HTTP
ヘッダの終りとボディの始まりを示します。3 行目は、"Hello, World."
という文字列を印字し、これで終りとなります。</p>
<p>$B9%$_$N%V%i%&%6$r3+$-!"%"%I%l%9(B</p>
<p>好みのブラウザを開き、アドレス</p>
<example>
http://www.example.com/cgi-bin/first.pl
</example>
<p>$B$"$k$$$O%U%!%$%k$rCV$$$?%m%1!<%7%g%s$r;XDj$9$k$H!"(B
<p>あるいはファイルを置いたロケーションを指定すると、
<code>Hello, World.</code>
$B$H$$$&(B 1 $B9T$,%V%i%&%6%&%#%s%I$K8=$l$k$G$7$g$&!#(B
$B$=$l$O$"$^$j%(%-%5%$%F%#%s%0$J$3$H$G$O$"$j$^$;$s!#(B
$B$7$+$7!"$3$l$,$&$^$/F0$1$P!"(B
$BB>$N$I$N$h$&$J$b$N$G$bF0$+$9$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B</p>
という 1 行がブラウザウィンドに現れるでしょう。
それはあまりエキサイティングなことではありません。
しかし、これがうまく動けば、
他のどのようなものでも動かすことができるようになります。</p>
</section>
</section>
<section id="troubleshoot">
<title>$B$7$+$7!"$^$@F0$+$J$$(B !</title>
<title>しかし、まだ動かない !</title>
<p>$B%&%'%V$+$i(B CGI $B%W%m%0%i%`$X$N%"%/%;%9$r9T$J$C$?$H$-!"(B
$B%V%i%&%6$G8+$k2DG=@-$,$"$k;M$D$N4pK\E*$J$3$H$,$"$j$^$9(B:</p>
<p>ウェブから CGI プログラムへのアクセスを行なったとき、
ブラウザで見る可能性がある四つの基本的なことがあります:</p>
<dl>
<dt>CGI $B%W%m%0%i%`$N=PNO(B</dt>
<dd>$BAG@2$i$7$$(B ! $B$=$l$O$9$Y$F$,$&$^$/F0$$$?$3$H$r0UL#$7$^$9!#(B
$B=PNO$,@5>o$@$1$l$I$b!"%V%i%&%6$,@5>o$K=hM}$7$F$/$l$J$$>l9g$O!"(B
$B@5$7$$(B <code>Content-Type</code> $B$r(B CGI $B%W%m%0%i%`Fb$G(B
$B%;%C%H$7$?$+$r3NG'$7$F$/$@$5$$!#(B</dd>
<dt>CGI プログラムの出力</dt>
<dd>素晴らしい ! それはすべてがうまく動いたことを意味します。
出力が正常だけれども、ブラウザが正常に処理してくれない場合は、
正しい <code>Content-Type</code> を CGI プログラム内で
セットしたかを確認してください。</dd>
<dt>CGI $B%W%m%0%i%`$N%=!<%9%3!<%I!"$^$?$O(B "POST Method Not Allowed"
$B$H$$$&%a%C%;!<%8(B</dt>
<dd>$B$3$l$O!"(BCGI $B%W%m%0%i%`$r=hM}$G$-$k$h$&(B Apache
$B$rE,@Z$K@_Dj$7$F$$$J$+$C$?$3$H$r0UL#$7$^$9!#(B<a
href="#configuring">$B!V(BCGI $B$r5v2D$9$k$h$&$K(B
Apache $B$r@_Dj$9$k!W(B</a>$B$N>O$rFI$_D>$7!"(B
$B$"$J$?$,2?$r4V0c$($?$+$rC5$7$F$_$F$/$@$5$$!#(B
<dt>CGI プログラムのソースコード、または "POST Method Not Allowed"
というメッセージ</dt>
<dd>これは、CGI プログラムを処理できるよう Apache
を適切に設定していなかったことを意味します。<a
href="#configuring">「CGI を許可するように
Apache を設定する」</a>の章を読み直し、
あなたが何を間違えたかを探してみてください。
</dd>
<dt>$B%a%C%;!<%8$,(B "Forbidden" $B$G;O$^$C$F$$$k(B</dt>
<dd>$B$3$l$O%Q!<%_%C%7%g%s$NLdBj$H$$$&$3$H$r0UL#$7$^$9!#(B
<a href="#errorlogs">Apache $B$N%(%i!<%m%0(B</a>$B$H!"8e=R$N(B<a
href="#permissions">$B!V%U%!%$%k$N%Q!<%_%C%7%g%s!W(B</a>
$B$N>O$r%A%'%C%/$7$F$/$@$5$$!#(B
<dt>メッセージが "Forbidden" で始まっている</dt>
<dd>これはパーミッションの問題ということを意味します。
<a href="#errorlogs">Apache のエラーログ</a>と、後述の<a
href="#permissions">「ファイルのパーミッション」</a>
の章をチェックしてください。
</dd>
<dt>"Internal Server Error" $B$H$$$&%a%C%;!<%8(B</dt>
<dt>"Internal Server Error" というメッセージ</dt>
<dd><a href="#errorlogs">Apache
$B$N%(%i!<%m%0(B</a>$B$r%A%'%C%/$9$k$H!"(B"Premature end of script headers"
$B$H$$$&%m%0$,5-O?$5$l$F$$$k$H;W$$$^$9!#$=$7$F!"$*$=$i$/(B CGI
$B%W%m%0%i%`$K$h$C$F@8@.$5$l$?%(%i!<%a%C%;!<%8$b5-O?$5$l$F$$$k$G$7$g$&!#(B
$B$3$N>l9g!"(BCGI $B%W%m%0%i%`$,E,@Z$J(B
HTTP $B%X%C%@$r=PNO$G$-$J$$860x$rCN$k$?$a$K!"(B
$B0J2<$N3F>O$G%A%'%C%/$7$F$_$F$/$@$5$$!#(B</dd>
のエラーログ</a>をチェックすると、"Premature end of script headers"
というログが記録されていると思います。そして、おそらく CGI
プログラムによって生成されたエラーメッセージも記録されているでしょう。
この場合、CGI プログラムが適切な
HTTP ヘッダを出力できない原因を知るために、
以下の各章でチェックしてみてください。</dd>
</dl>
<section id="permissions">
<title>$B%U%!%$%k$N%Q!<%_%C%7%g%s(B</title>
<title>ファイルのパーミッション</title>
<p>$B%5!<%P$O$"$J$?$N8"8B$G<B9T$5$l$F$$$J$$$N$rK:$l$J$$$h$&$K!#(B
$B$D$^$j!"5/F0$9$k$H$-!"%5!<%P$OFC8"$r$b$?$J$$%f!<%6(B - $BDL>o(B <code>nobody</code>
$B$d(B <code>www</code> $B$N8"8B$G<B9T$5$l$^$9!#$7$?$,$C$F!"$"$J$?$,=jM-$9$k(B
$B%U%!%$%k$r<B9T$9$k$K$OJL$N%Q!<%_%C%7%g%s$,I,MW$H$J$j$^$9!#(B
$BDL>o!"(B<code>nobody</code> $B$,<B9T$9$k$N$K==J,$J%Q!<%_%C%7%g%s$rM?$($kJ}K!$O!"(B
$B%U%!%$%k$KC/$G$b<B9T2DG=$H$9$k%Q!<%_%C%7%g%s$rM?$($k$3$H$G$9(B:</p>
<p>サーバはあなたの権限で実行されていないのを忘れないように。
つまり、起動するとき、サーバは特権をもたないユーザ - 通常 <code>nobody</code>
<code>www</code> の権限で実行されます。したがって、あなたが所有する
ファイルを実行するには別のパーミッションが必要となります。
通常、<code>nobody</code> が実行するのに十分なパーミッションを与える方法は、
ファイルに誰でも実行可能とするパーミッションを与えることです:</p>
<example>
chmod a+x first.pl
</example>
<p>$B$^$?!"$b$7$"$J$?$N%W%m%0%i%`$,B>$N%U%!%$%k$rFI$_=q$-$9$k$J$i$P!"(B
$B$=$l$i$N%U%!%$%k$O!"$3$l$,2DG=$H$J$k@5$7$$%Q!<%_%C%7%g%s(B
$B$r;}$C$F$$$kI,MW$,$"$j$^$9!#(B</p>
<p>また、もしあなたのプログラムが他のファイルを読み書きするならば、
それらのファイルは、これが可能となる正しいパーミッション
を持っている必要があります。</p>
</section>
<section id="pathinformation">
<title>$B%Q%9>pJs$H4D6-(B</title>
<title>パス情報と環境</title>
<p>$B%3%^%s%I%i%$%s$+$i%W%m%0%i%`$r<B9T$9$k$H$-!"(B
$B0U<1$7$J$/$F$b%7%'%k$KEO$5$l$k>pJs$,$"$j$^$9!#(B
$BNc$($P!";2>H$9$k%U%!%$%k$N$?$a$K$I$3$r8!:w$7$?$i$h$$$+$r(B
$B%7%'%k$KEA$($k(B <code>PATH</code> $B$,$"$j$^$9!#(B</p>
<p>コマンドラインからプログラムを実行するとき、
意識しなくてもシェルに渡される情報があります。
例えば、参照するファイルのためにどこを検索したらよいかを
シェルに伝える <code>PATH</code> があります。</p>
<p>$B%W%m%0%i%`$,(B CGI $B%W%m%0%i%`$H$7$F%&%'%V%5!<%P$K$h$C$F<B9T$5$l$k$H$-!"(B
$B$=$l$OF1$8(B <code>PATH</code> $B$G$O$J$$$+$b$7$l$^$;$s!#(B
CGI $B%W%m%0%i%`Fb$G8F$S=P$9$"$i$f$k%W%m%0%i%`(B
($BNc$($P!"(B<code>sendmail</code> $B$N$h$&$J$b$N(B) $B$O!"(B
$B%U%k%Q%9$G;XDj$9$kI,MW$,$"$k$G$7$g$&!#$=$l$K$h$j!"(BCGI
$B%W%m%0%i%`$r<B9T$7$h$&$H$7$?$H$-!"(B
$B%7%'%k$O$=$N$h$&$J%W%m%0%i%`$r8+$D$1$k$3$H$,$G$-$^$9!#(B</p>
<p>プログラムが CGI プログラムとしてウェブサーバによって実行されるとき、
それは同じ <code>PATH</code> ではないかもしれません。
CGI プログラム内で呼び出すあらゆるプログラム
(例えば、<code>sendmail</code> のようなもの) は、
フルパスで指定する必要があるでしょう。それにより、CGI
プログラムを実行しようとしたとき、
シェルはそのようなプログラムを見つけることができます。</p>
<p>$BF1MM$J$3$H$O!"%9%/%j%W%H$N%$%s%?%W%j%?(B ($B$7$P$7$P(B <code>perl</code>)
$B$X$N%Q%9$G!"(BCGI $B%W%m%0%i%`$N(B 1 $B9TL\$K<!$N$h$&$K<($5$l$^$9(B:</p>
<p>同様なことは、スクリプトのインタプリタ (しばしば <code>perl</code>)
へのパスで、CGI プログラムの 1 行目に次のように示されます:</p>
<example>
#!/usr/bin/perl
</example>
<p>$B$3$l$,%$%s%?!<%W%j%?$X$N<B:]$N%Q%9$G$"$k$3$H$r3NG'$7$F$*$-$^$9!#(B</p>
<p>これがインタープリタへの実際のパスであることを確認しておきます。</p>
</section>
<p>$B$^$?!"(BCGI $B%W%m%0%i%`$,B>$N(B<a
href="#env">$B4D6-JQ?t(B</a>$B$K0MB8$7$F$$$k>l9g$O!"$=$N4D6-JQ?t$,(B
Apache $B$+$iEO$5$l$k$h$&$K$9$kI,MW$,$"$j$^$9!#(B</p>
<p>また、CGI プログラムが他の<a
href="#env">環境変数</a>に依存している場合は、その環境変数が
Apache から渡されるようにする必要があります。</p>
<section id="syntaxerrors">
<title>$B%W%m%0%i%`%(%i!<(B</title>
<title>プログラムエラー</title>
<p>CGI
$B%W%m%0%i%`$,<:GT$9$k$N$OBgDq!"%W%m%0%i%`<+?H$KLdBj$,$"$k>l9g$G$9!#(B
$B0lEY(B CGI $B$N;H$$J}$rM}2r$7!"A0=R$NFs$D$N8m$j$rHH$7$F$$$J$$$J$i$P!"(B
$B$^$:4V0c$$$J$/$=$&$G$7$g$&!#%V%i%&%6$r;H$C$F%F%9%H$9$kA0$K(B
$B$^$:3NG'$9$k$3$H$O!"%3%^%s%I%i%$%s$+$i%W%m%0%i%`$,<B9T$G$-$k$3$H$G$9!#(B
$BNc$($P!"0J2<$r<B9T$7$F$_$F$/$@$5$$(B:</p>
プログラムが失敗するのは大抵、プログラム自身に問題がある場合です。
一度 CGI の使い方を理解し、前述の二つの誤りを犯していないならば、
まず間違いなくそうでしょう。ブラウザを使ってテストする前に
まず確認することは、コマンドラインからプログラムが実行できることです。
例えば、以下を実行してみてください:</p>
<example>
cd /usr/local/apache2/cgi-bin<br/>
./first.pl
</example>
<p>(<code>perl</code> $B%$%s%?%W%j%?$O8F$P$J$$$G$/$@$5$$!#(B
$B%7%'%k$H(B Apache $B$,%9%/%j%W%H$N:G=i$N9T$N(B <a
href="#pathinformation">$B%Q%9>pJs(B</a> $B$r;H$C$F8+$D$1$^$9!#(B)</p>
<p>(<code>perl</code> インタプリタは呼ばないでください。
シェルと Apache がスクリプトの最初の行の <a
href="#pathinformation">パス情報</a> を使って見つけます。)</p>
<p>$B:G=i$K%W%m%0%i%`$+$i=PNO$5$l$k$N$O(B <code>Content-Type</code> $B$r4^$_!"(B
$B8e$K6u9T$NB3$/(B HTTP $B%X%C%@$G$J$1$l$P$J$j$^$;$s!#B>$N$b$N$,=PNO$5$l$F$$$k(B
$B>l9g$O!"(BApache $B$O$3$N%W%m%0%i%`$r%5!<%P7PM3$G<B9T$7$h$&$H$7$?$H$-$K$O(B
<code>Premature end of script headers</code> $B%(%i!<$r=PNO$7$^$9!#>\:Y$O(B
$B>e5-$N(B <a
href="#writing">CGI $B%W%m%0%i%`$r=q$/(B</a> $B$rFI$s$G$/$@$5$$!#(B</p>
<p>最初にプログラムから出力されるのは <code>Content-Type</code> を含み、
後に空行の続く HTTP ヘッダでなければなりません。他のものが出力されている
場合は、Apache はこのプログラムをサーバ経由で実行しようとしたときには
<code>Premature end of script headers</code> エラーを出力します。詳細は
上記の <a
href="#writing">CGI プログラムを書く</a> を読んでください。</p>
</section>
<section id="errorlogs">
<title>$B%(%i!<%m%0(B</title>
<title>エラーログ</title>
<p>$B%(%i!<%m%0$OM'C#$G$9!#(B
$BA4$F$N$&$^$/$$$+$J$$$3$H$O!"%(%i!<%m%0$K%a%C%;!<%8$r@8@.$7$^$9!#(B
$BI,$:$=$l$r:G=i$K8+$k$Y$-$G$9!#(B
$B$b$7!"$"$J$?$,%&%'%V%5%$%H$r<g:E$7$F$$$k>l=j$,(B
$B%(%i!<%m%0$N;2>H$r5v$7$F$$$J$$$J$i$P!"$-$C$HB>$N%5%$%H$G<g:E$9$k$Y$-$G$9!#(B
$B%(%i!<%m%0$NFI$_J}$r3X$V$3$H$G!"$[$H$s$IA4$F$NLdBj$,?WB.$K3NG'$5$l!"(B
$B?WB.$K2r7h$5$l$k$H$$$&$3$H$,J,$+$k$G$7$g$&!#(B</p>
<p>エラーログは友達です。
全てのうまくいかないことは、エラーログにメッセージを生成します。
必ずそれを最初に見るべきです。
もし、あなたがウェブサイトを主催している場所が
エラーログの参照を許していないならば、きっと他のサイトで主催するべきです。
エラーログの読み方を学ぶことで、ほとんど全ての問題が迅速に確認され、
迅速に解決されるということが分かるでしょう。</p>
</section>
<section id="suexec">
<title>Suexec</title>
<p><a href="../suexec.html">suexec</a> $B%5%]!<%H%W%m%0%i%`$O(B
$B%P!<%A%c%k%[%9%H$d%f!<%6$N%[!<%`%G%#%l%/%H%j$N>l=j$K0M$C$F(B
CGI $B%W%m%0%i%`$r0c$&%f!<%68"8B$N2<$GAv$i$;$k$3$H$r2DG=$K$7$^$9!#(B
Suexec $B$N8"8B$N%A%'%C%/$OHs>o$K87$7$/!"$=$l$rK~$?$5$J$$>l9g$O(B
CGI $B%W%m%0%i%`$,(B <code>Premature end of script headers</code> $B%(%i!<$G(B
$B<B9T$5$l$^$;$s!#(B</p>
<p><a href="../suexec.html">suexec</a> サポートプログラムは
バーチャルホストやユーザのホームディレクトリの場所に依って
CGI プログラムを違うユーザ権限の下で走らせることを可能にします。
Suexec の権限のチェックは非常に厳しく、それを満たさない場合は
CGI プログラムが <code>Premature end of script headers</code> エラーで
実行されません。</p>
<p>suexec $B$r;H$C$F$$$k$+$I$&$+$rD4$Y$?$a$K$O(B <code>apachectl
-V</code> $B$r<B9T$7$F!"(B<code>SUEXEC_BIN</code> $B$N>l=j$rD4$Y$F$/$@$5$$!#(B
Apache $B$,$=$3$K(B <program>suexec</program> $B$N%P%$%J%j$rH/8+$7$?>l9g$O!"(Bsuexec $B$,(B
$B;HMQ$5$l$^$9!#(B</p>
<p>suexec を使っているかどうかを調べためには <code>apachectl
-V</code> を実行して、<code>SUEXEC_BIN</code> の場所を調べてください。
Apache がそこに <program>suexec</program> のバイナリを発見した場合は、suexec が
使用されます。</p>
<p>suexec $B$r40A4$KM}2r$7$F$$$J$$8B$j!";H$&$Y$-$G$O$"$j$^$;$s!#(B
suexec $B$rL58z$K$9$k$K$O!"(B<code>SUEXEC_BIN</code> $B$+$i;X$5$l$F$$$k(B
<program>suexec</program> $B%P%$%J%j$r:o=|(B ($B$+L>A0$rJQ99(B) $B$9$k$@$1$G$9!#(B
<a href="../suexec.html">suexec</a> $B$rFI$s$@8e$G!"$^$@$=$l$r(B
$B;H$$$?$$$N$G$"$l$P!"(B<code>suexec -V</code> $B$r<B9T$7$F(B suexec $B$N(B
$B%m%0%U%!%$%k$N0LCV$rD4$Y!"$=$N%m%0%U%!%$%k$r;H$C$F%]%j%7!<0cH?$r(B
$B8+$D$1$F$/$@$5$$!#(B</p>
<p>suexec を完全に理解していない限り、使うべきではありません。
suexec を無効にするには、<code>SUEXEC_BIN</code> から指されている
<program>suexec</program> バイナリを削除 (か名前を変更) するだけです。
<a href="../suexec.html">suexec</a> を読んだ後で、まだそれを
使いたいのであれば、<code>suexec -V</code> を実行して suexec の
ログファイルの位置を調べ、そのログファイルを使ってポリシー違反を
見つけてください。</p>
</section>
</section>
<section id="behindscenes">
<title>$BN"$G2?$,5/$3$C$F$$$k$N$+(B?</title>
<title>裏で何が起こっているのか?</title>
<p>CGI $B%W%m%0%i%_%s%0$K=,=O$9$k$H!"(B
$BN"$G5/$3$C$F$$$k$3$H$K$D$$$F99$KM}2r$9$k$3$H$NLr$KN)$A$^$9!#(B
$B%V%i%&%6$H%5!<%P$,$I$N$h$&$KAj8_DL?.$9$k$+$K$D$$$F$OFC$K$=$&$G$9!#(B
$B$J$<$J$i!"(B"Hello, World."
$B$r0u;z$9$k%W%m%0%i%`$r=q$/$3$H$O$*$*$$$K7k9=$G$9$,!"(B
$B$=$l$OFC$KM-1W$G$O$"$j$^$;$s!#(B</p>
<p>CGI プログラミングに習熟すると、
裏で起こっていることについて更に理解することの役に立ちます。
ブラウザとサーバがどのように相互通信するかについては特にそうです。
なぜなら、"Hello, World."
を印字するプログラムを書くことはおおいに結構ですが、
それは特に有益ではありません。</p>
<section id="env">
<title>$B4D6-JQ?t(B</title>
<title>環境変数</title>
<p>$B4D6-JQ?t$O!"(B
$B$"$J$?$,%3%s%T%e!<%?$r;H$&$H$-$KJU$j$KB8:_$7$F$$$kCM$G$9!#(B
$B$=$l$i$O!"%Q%9(B
($B%3%^%s%I$r%?%$%W$7$?$H$-$K<B9T$9$k<B:]$N%U%!%$%k$rC5$7=P$9$H$3$m(B)$B!"(B
$B%f!<%6L>!"C<Kv7?$J$I$N$h$&$JJXMx$J$b$N$G$9!#(B
$BDL>o!"IaCJ;HMQ$7$F$$$k4D6-JQ?t$N40A4$J%j%9%H$rD4$Y$k$K$O!"(B
$B%3%^%s%I%W%m%s%W%H$G(B <code>env</code> $B$rF~NO$7$^$9!#(B</p>
<p>環境変数は、
あなたがコンピュータを使うときに辺りに存在している値です。
それらは、パス
(コマンドをタイプしたときに実行する実際のファイルを探し出すところ)、
ユーザ名、端末型などのような便利なものです。
通常、普段使用している環境変数の完全なリストを調べるには、
コマンドプロンプトで <code>env</code> を入力します。</p>
<p>CGI $B$N=hM}Cf!"%5!<%P$H%V%i%&%6$b4D6-JQ?t$r@_Dj$7!"(B
$B$=$l$K$h$jAj8_$KDL?.$9$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B
$B$=$N4D6-JQ?t$O!"%V%i%&%6%?%$%W(B (Netscape, IE, Lynx)$B!"%5!<%P%?%$%W(B
(Apache, IIS, WebSite)$B!"<B9T$5$l$F$$$k(B CGI
$B%W%m%0%i%`$NL>A0$J$I$G$9!#(B</p>
<p>CGI の処理中、サーバとブラウザも環境変数を設定し、
それにより相互に通信することができるようになります。
その環境変数は、ブラウザタイプ (Netscape, IE, Lynx)、サーバタイプ
(Apache, IIS, WebSite)、実行されている CGI
プログラムの名前などです。</p>
<p>$B$3$l$i$NJQ?t$O(B CGI $B%W%m%0%i%^$,;HMQ$G$-$^$9!#(B
$B$=$7$F!"$=$l$O%/%i%$%"%s%H$H%5!<%P$NDL?.$NOC$NH>J,$G$9!#(B
$BI,MW$JJQ?t$N40A4$J%j%9%H$O(B <a
<p>これらの変数は CGI プログラマが使用できます。
そして、それはクライアントとサーバの通信の話の半分です。
必要な変数の完全なリストは <a
href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html"
>http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a> $B$K$"$j$^$9!#(B</p>
>http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a> にあります。</p>
<p>$B0J2<$NC1=c$J(B Perl CGI
$B%W%m%0%i%`$O!"EO$5$l$kA4$F$N4D6-JQ?t$rI=<($7$^$9!#F1MM$N%W%m%0%i%`$O!"(B
Apache $B%G%#%9%H%j%S%e!<%7%g%s$N(B <code>cgi-bin</code>
$B%G%#%l%/%H%j$KFs$D4^$^$l$F$$$^$9!#(B
$B$$$/$D$+$NJQ?t$,I,?\$G$"$j!"$$$/$D$+$OG$0U$G$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B
$B$=$7$F!"8x<0$N%j%9%H$K$O$J$$$$$/$D$+$NJQ?t$,I=<($5$l$F$$$k$+$b$7$l$^$;$s!#(B
$B$5$i$K!"(BApache $B$O%G%U%)%k%H$GMQ0U$5$l$F$$$k4pK\E*$J$b$N$K(B
<a href="../env.html">$B$"$J$?<+?H$N4D6-JQ?t$r2C$($k(B</a>$B$?$a$N!"(B
$BB?$/$N0[$J$kJ}K!$rMQ0U$7$F$7$^$9!#(B</p>
<p>以下の単純な Perl CGI
プログラムは、渡される全ての環境変数を表示します。同様のプログラムは、
Apache ディストリビューションの <code>cgi-bin</code>
ディレクトリに二つ含まれています。
いくつかの変数が必須であり、いくつかは任意であることに注意してください。
そして、公式のリストにはないいくつかの変数が表示されているかもしれません。
さらに、Apache はデフォルトで用意されている基本的なものに
<a href="../env.html">あなた自身の環境変数を加える</a>ための、
多くの異なる方法を用意してします。</p>
<example>
#!/usr/bin/perl<br />
@@ -463,95 +463,95 @@
</section>
<section id="stdin">
<title>STDIN $B$H(B STDOUT</title>
<title>STDIN STDOUT</title>
<p>$B%5!<%P$H%/%i%$%"%s%H4V$N$b$&0l$D$NDL?.$O!"I8=`F~NO(B
(<code>STDIN</code>)$B$HI8=`=PNO(B (<code>STDOUT</code>)
$B$rDL$8$F9T$J$o$l$^$9!#DL>o$NJ8L.$K$*$$$F!"(B<code>STDIN</code>
$B$O%-!<%\!<%I$d%W%m%0%i%`$,F0:n$9$k$?$a$KM?$($i$l$k%U%!%$%k$r0UL#$7!"(B
<code>STDOUT</code> $B$ODL>o%3%s%=!<%k$^$?$O%9%/%j!<%s$r0UL#$7$^$9!#(B</p>
<p>サーバとクライアント間のもう一つの通信は、標準入力
(<code>STDIN</code>)と標準出力 (<code>STDOUT</code>)
を通じて行なわれます。通常の文脈において、<code>STDIN</code>
はキーボードやプログラムが動作するために与えられるファイルを意味し、
<code>STDOUT</code> は通常コンソールまたはスクリーンを意味します。</p>
<p>$B%&%'%V%U%)!<%`$+$i(B CGI $B%W%m%0%i%`$X(B<code>POST</code>
$B$7$?$H$-!"%U%)!<%`$N%G!<%?$OFCJL$J%U%)!<%^%C%H$GB+$M$i$l!"(B
<code>STDIN</code> $B$rDL$7$F!"(BCGI $B%W%m%0%i%`$K0z$-EO$5$l$^$9!#(B
$B%W%m%0%i%`$O%G!<%?$,%-!<%\!<%I(B
$B$b$7$/$O%U%!%$%k$+$iMh$F$$$?$+$N$h$&$K=hM}$9$k$3$H$,$G$-$^$9!#(B</p>
<p>ウェブフォームから CGI プログラムへ<code>POST</code>
したとき、フォームのデータは特別なフォーマットで束ねられ、
<code>STDIN</code> を通して、CGI プログラムに引き渡されます。
プログラムはデータがキーボード
もしくはファイルから来ていたかのように処理することができます。</p>
<p>$B!VFCJL$J%U%)!<%^%C%H!W$O$H$F$bC1=c$G$9!#%U%#!<%k%IL>$HCM$O%$%3!<%k(B
(=) $B$G7k$P$l$^$9!#$=$7$FCM$NAH$O%"%s%Q%5%s%I(B (&amp;) $B$G7k$P$l$^$9!#(B
$B%9%Z!<%9!"%"%s%Q%5%s%I!"%$%3!<%k$N$h$&$JLLE]$JJ8;z$O!"(B
$B$=$l$i$,F0:n$rBLL\$K$7$J$$$h$&$K$=$NJ8;z$KAjEv$9$k(B 16 $B?J$KJQ49$5$l$^$9!#(B
$BA4%G!<%?J8;zNs$O!"0J2<$N$h$&$K$J$j$^$9(B:
<p>「特別なフォーマット」はとても単純です。フィールド名と値はイコール
(=) で結ばれます。そして値の組はアンパサンド (&amp;) で結ばれます。
スペース、アンパサンド、イコールのような面倒な文字は、
それらが動作を駄目にしないようにその文字に相当する 16 進に変換されます。
全データ文字列は、以下のようになります:
</p>
<example>
name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
</example>
<p>$B;~!9!"$3$N$h$&$JJ8;zNs$,(B URL
$B$KIU2C$5$l$k$N$r8+$k$G$7$g$&!#$=$N>l9g!"%5!<%P$O(B
<code>QUERY_STRING</code> $B$H$$$&4D6-JQ?t$K$=$NJ8;zNs$rF~$l$^$9!#$=$l$O(B
<code>GET</code> $B%j%/%(%9%H$H8F$P$l$^$9!#(B
HTML $B%U%)!<%`$G$O!"%G!<%?$rEO$9$?$a$K(B <code>GET</code> $B$H(B
<code>POST</code> $B$N$I$A$i$r;HMQ$9$k$+$r!"(B<code>FORM</code> $B%?%0$N(B
<code>METHOD</code> $BB0@-$N@_Dj$G;XDj$7$^$9!#(B</p>
<p>時々、このような文字列が URL
に付加されるのを見るでしょう。その場合、サーバは
<code>QUERY_STRING</code> という環境変数にその文字列を入れます。それは
<code>GET</code> リクエストと呼ばれます。
HTML フォームでは、データを渡すために <code>GET</code>
<code>POST</code> のどちらを使用するかを、<code>FORM</code> タグの
<code>METHOD</code> 属性の設定で指定します。</p>
<p>CGI $B%W%m%0%i%`$O!"$=$NJ8;zNs$rLr$KN)$D>pJs$KJ,3d$9$k@UG$$,$"$j$^$9!#(B
$B9,$$$K$b!"$=$N%G!<%?=hM}$r=u$1$k%i%$%V%i%j$d%b%8%e!<%k$,B8:_$7$^$9!#(B
$B$3$l$i$O!"(BCGI $B%W%m%0%i%`$NB>$NLL$G$bF1MM$KLr$KN)$A$^$9!#(B</p>
<p>CGI プログラムは、その文字列を役に立つ情報に分割する責任があります。
幸いにも、そのデータ処理を助けるライブラリやモジュールが存在します。
これらは、CGI プログラムの他の面でも同様に役に立ちます。</p>
</section>
</section>
<section id="libraries">
<title>CGI $B%b%8%e!<%k(B/$B%i%$%V%i%j(B</title>
<title>CGI モジュール/ライブラリ</title>
<p>CGI $B%W%m%0%i%`$r=q$/$H$-!"LLE]$J;E;v$NBgItJ,$r$7$F$/$l$k(B
$B%3!<%I%i%$%V%i%j$^$?$O%b%8%e!<%k$r;H$&$3$H$r8!F$$9$Y$-$G$9!#(B
$B$3$l$O%(%i!<$r8:$i$7!"Aa$$3+H/$K$D$J$,$j$^$9!#(B</p>
<p>CGI プログラムを書くとき、面倒な仕事の大部分をしてくれる
コードライブラリまたはモジュールを使うことを検討すべきです。
これはエラーを減らし、早い開発につながります。</p>
<p>Perl $B$G(B CGI $B%W%m%0%i%`$r=q$$$F$$$k$J$i!"%b%8%e!<%k$O(B <a
href="http://www.cpan.org/">CPAN</a> $B$GDs6!$5$l$F$$$^$9!#(B
$B$3$NL\E*$N$?$a$N:G$bIa5Z$7$F$$$k%b%8%e!<%k$O(B <code>CGI.pm</code> $B$G$9!#(B
<code>CGI::Lite</code> $B$b8!F$$7$^$7$g$&!#$3$l$O!"$[$H$s$I$N%W%m%0%i%`(B
$B$K$*$$$FI,MW$H$9$k$9$Y$F$N5!G=$N:G>.%;%C%H$N<BAu$G$9!#(B</p>
<p>Perl で CGI プログラムを書いているなら、モジュールは <a
href="http://www.cpan.org/">CPAN</a> で提供されています。
この目的のための最も普及しているモジュールは <code>CGI.pm</code> です。
<code>CGI::Lite</code> も検討しましょう。これは、ほとんどのプログラム
において必要とするすべての機能の最小セットの実装です。</p>
<p>C $B$G(B CGI $B%W%m%0%i%`$r=q$$$F$$$k$J$i!"$$$m$$$m$J(B
$B%*%W%7%g%s$,$"$j$^$9!#$3$l$i$NFb$N0l$D$O(B <a
<p>C で CGI プログラムを書いているなら、いろいろな
オプションがあります。これらの内の一つは <a
href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>
$B$GDs6!$5$l$F$$$k(B <code>CGIC</code> $B%i%$%V%i%j$G$9!#(B</p>
で提供されている <code>CGIC</code> ライブラリです。</p>
</section>
<section id="moreinfo">
<title>$B99$J$k>pJs(B</title>
<title>更なる情報</title>
<p>CGI $B$K4X$9$k>pJs$O%&%'%V$G?tB?$/Ds6!$5$l$F$$$^$9!#(BCGI
$B$NLdBj$K$D$$$F$O(B Usenet $B$N(B <a href="news:comp.infosystems.www.authoring.cgi"
>comp.infosystems.www.authoring.cgi</a> $B$G!"(B
$BB>$N%f!<%6$HO@5D$9$k$3$H$,$G$-$^$9!#(BHTML Writers Guide $B$N(B
-servers $B%a!<%j%s%0%j%9%H$O!"$"$J$?$N<ALd$K2sEz$7$F$/$l$k0NBg$J%j%=!<%9$G$9!#(B
<p>CGI に関する情報はウェブで数多く提供されています。CGI
の問題については Usenet の <a href="news:comp.infosystems.www.authoring.cgi"
>comp.infosystems.www.authoring.cgi</a> で、
他のユーザと論議することができます。HTML Writers Guide
-servers メーリングリストは、あなたの質問に回答してくれる偉大なリソースです。
<a href="http://www.hwg.org/lists/hwg-servers/"
>http://www.hwg.org/lists/hwg-servers/</a>
$B$G99$KB?$/$rC5$7=P$9$3$H$,$G$-$^$9!#(B</p>
で更に多くを探し出すことができます。</p>
<p>$B$=$7$F$b$A$m$s!"$*$=$i$/(B CGI
$B%W%m%0%i%`$NF0:n$K4X$9$k>\:Y$NA4$F$,5-=R$5$l$F$$$k(B
CGI $B$N;EMM$rFI$`$Y$-$G$9!#%*%j%8%J%k%P!<%8%g%s$r(B
<p>そしてもちろん、おそらく CGI
プログラムの動作に関する詳細の全てが記述されている
CGI の仕様を読むべきです。オリジナルバージョンを
<a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>
$B$G!"%"%C%W%G!<%H$5$l$?%I%i%U%H$r(B
で、アップデートされたドラフトを
<a href="http://web.golux.com/coar/cgi/">Common Gateway Interface RFC
$B%W%m%8%'%/%H(B</a>$B$G;2>H$9$k$3$H$,$G$-$^$9!#(B</p>
プロジェクト</a>で参照することができます。</p>
<p>CGI $B$NLdBj$K$D$$$F!"2C$o$C$F$$$k%a!<%j%s%0%j%9%H$^$?$O%K%e!<%9(B
$B%0%k!<%W$K<ALd$rAw$k$H$-!"5/$3$C$?$b$N!"5/$3$C$F$[$7$$$3$H!"(B
$B<B:]$K5/$3$C$?$3$H$,$I$&0c$&$+!";HMQ$7$F$$$k%5!<%P!"(B
CGI $B%W%m%0%i%`$r5-=R$7$F$$$k8@8l$K4X$9$k==J,$J>pJs$H!"(B
$B2DG=$G$"$l$PLdBj$N%3!<%I$rDs6!$9$k$h$&$K$7$F$/$@$5$$!#(B
$B$=$&$9$k$3$H$G!"LdBj$,$h$j4VC1$K8+$D$+$k$h$&$K$J$j$^$9!#(B</p>
<p>CGI の問題について、加わっているメーリングリストまたはニュース
グループに質問を送るとき、起こったもの、起こってほしいこと、
実際に起こったことがどう違うか、使用しているサーバ、
CGI プログラムを記述している言語に関する十分な情報と、
可能であれば問題のコードを提供するようにしてください。
そうすることで、問題がより間単に見つかるようになります。</p>
<p>Apache $B$N%=!<%9%3!<%I$K$*$$$FLdBj$rH/8+$7$?$3$H$r3N?.$7$F$$$J$$8B$j!"(B
CGI $B$NLdBj$K4X$9$k<ALd$r(B Apache
$B%P%0%G!<%?%Y!<%9$K(B<strong>$BAw$k$Y$-$G$J$$(B</strong>
$B$3$H$KCmL\$7$F$/$@$5$$!#(B</p>
<p>Apache のソースコードにおいて問題を発見したことを確信していない限り、
CGI の問題に関する質問を Apache
バグデータベースに<strong>送るべきでない</strong>
ことに注目してください。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990:574882 (outdated) -->
@@ -21,16 +21,16 @@
-->
<manualpage metafile="htaccess.xml.meta">
<parentdocument href="./">How-To / $B%A%e!<%H%j%"%k(B</parentdocument>
<parentdocument href="./">How-To / チュートリアル</parentdocument>
<title>Apache $B%A%e!<%H%j%"%k(B: .htaccess $B%U%!%$%k(B</title>
<title>Apache チュートリアル: .htaccess ファイル</title>
<summary>
<p><code>.htaccess</code> $B%U%!%$%k$O%G%#%l%/%H%jKh$K@_Dj$rJQ99$9$kJ}K!$r(B
$BDs6!$7$^$9!#(B</p>
<p><code>.htaccess</code> ファイルはディレクトリ毎に設定を変更する方法を
提供します。</p>
</summary>
<section id="related"><title>.htaccess $B%U%!%$%k(B</title>
<section id="related"><title>.htaccess ファイル</title>
<related>
<modulelist>
<module>core</module>
@@ -58,106 +58,106 @@
</section>
<section id="what">
<title>.htaccess $B%U%!%$%k$H$O2?$+(B/$B$=$N;H$$J}(B</title>
<title>.htaccess ファイルとは何か/その使い方</title>
<p><code>.htaccess</code> $B%U%!%$%k(B ($B!VJ,;6@_Dj%U%!%$%k!W(B) $B$O(B
$B%G%#%l%/%H%jKh$K@_Dj$rJQ99$9$kJ}K!$rDs6!$7$^$9!#%G%#%l%/%F%#%V$N(B
$B=q$+$l$?%U%!%$%k$r%G%#%l%/%H%j$KCV$/$3$H$G!"$=$N%G%#%l%/%H%j$H$=$N(B
$B%5%V%G%#%l%/%H%j$9$Y$F$K%G%#%l%/%F%#%V$rE,MQ$5$;$k$3$H$,$G$-$^$9!#(B</p>
<p><code>.htaccess</code> ファイル (「分散設定ファイル」) は
ディレクトリ毎に設定を変更する方法を提供します。ディレクティブの
書かれたファイルをディレクトリに置くことで、そのディレクトリとその
サブディレクトリすべてにディレクティブを適用させることができます。</p>
<note><title>$BCm(B:</title>
<p><code>.htaccess</code> $B%U%!%$%k$rJL$NL>A0$K$7$?$$>l9g$O!"(B
<directive module="core">AccessFileName</directive> $B%G%#%l%/%F%#%V$r(B
$B;H$C$FJQ99$9$k$3$H$,$G$-$^$9!#Nc$($P!"$=$N%U%!%$%k$r(B <code>.config</code>
$B$H$$$&L>A0$K$7$?$$>l9g$O!"0J2<$N@_Dj$r%5!<%P@_Dj%U%!%$%k$KF~$l$k$3$H$,(B
$B$G$-$^$9(B:</p>
<note><title>:</title>
<p><code>.htaccess</code> ファイルを別の名前にしたい場合は、
<directive module="core">AccessFileName</directive> ディレクティブを
使って変更することができます。例えば、そのファイルを <code>.config</code>
という名前にしたい場合は、以下の設定をサーバ設定ファイルに入れることが
できます:</p>
<example>
AccessFileName .config
</example>
</note>
<p>$B0lHL$K!"(B<code>.htaccess</code> $B%U%!%$%k$N9=J8$O(B
<a href="../configuring.html#syntax">$B<g@_Dj%U%!%$%k(B</a>
$B$HF1$8$G$9!#$3$l$i$N%U%!%$%k$K=q$/$3$H$N$G$-$k%G%#%l%/%F%#%V$O(B <directive
module="core">AllowOverride</directive> $B%G%#%l%/%F%#%V$K$h$j7h$^$j$^$9!#(B
$B$3$N%G%#%l%/%F%#%V$O!"(B<code>.htaccess</code> $B%U%!%$%k$K(B
$B=q$+$l$?%G%#%l%/%F%#%V$NCf$G!"!"(B
$B$I$N%G%#%l%/%F%#%V$,E,MQ$5$l$k$+$r%+%F%4%j!<C10L$G;XDj$7$^$9!#(B
<code>.htaccess</code> $B$K=q$/$3$H$N$G$-$k%G%#%l%/%F%#%V$G$"$l$P!"(B
$B@bL@J8=q$K$O!V>e=q$-!W$H$$$&9`L\$,$"$j!"(B.htaccess $B$K=q$/$3$H$,$G$-$k$h$&$K(B
$B$J$k$?$a$N(B <directive
module="core">AllowOverride</directive> $B$NCM$,;XDj$5$l$F$$$^$9!#(B</p>
<p>一般に、<code>.htaccess</code> ファイルの構文は
<a href="../configuring.html#syntax">主設定ファイル</a>
と同じです。これらのファイルに書くことのできるディレクティブは <directive
module="core">AllowOverride</directive> ディレクティブにより決まります。
このディレクティブは、<code>.htaccess</code> ファイルに
書かれたディレクティブの中で、、
どのディレクティブが適用されるかをカテゴリー単位で指定します。
<code>.htaccess</code> に書くことのできるディレクティブであれば、
説明文書には「上書き」という項目があり、.htaccess に書くことができるように
なるための <directive
module="core">AllowOverride</directive> の値が指定されています。</p>
<p>$BNc$($P!"(B<directive
module="core">AddDefaultCharset</directive> $B%G%#%l%/%F%#%V$N@bL@$r(B
$B8+$k$H!"(B<code>.htaccess</code> $B%U%!%$%k$G$N;HMQ$,5v2D$5$l$F$$$k$3$H$,(B
$B$o$+$j$^$9!#(B ($B%G%#%l%/%F%#%V$N35MW$N=j$K$"$k!V%3%s%F%-%9%H!W$H=q$+$l$F$$$k(B
$B9T$r8+$F$/$@$5$$!#(B) <a
href="../mod/directive-dict.html#Context">$B>e=q$-(B</a>$B$H=q$+$l$F$$$k9T$K$O(B
<code>FileInfo</code> $B$H$"$j$^$9!#$G$9$+$i!"(B<code>.htaccess</code> $BCf$N(B
$B$3$N%G%#%l%/%F%#%V$,M-8z$K$J$k$?$a$K$O!">/$J$/$H$b(B
<code>AllowOverride FileInfo</code> $B$,@_Dj$5$l$F$$$kI,MW$,$"$j$^$9!#(B</p>
<p>例えば、<directive
module="core">AddDefaultCharset</directive> ディレクティブの説明を
見ると、<code>.htaccess</code> ファイルでの使用が許可されていることが
わかります。 (ディレクティブの概要の所にある「コンテキスト」と書かれている
行を見てください。) <a
href="../mod/directive-dict.html#Context">上書き</a>と書かれている行には
<code>FileInfo</code> とあります。ですから、<code>.htaccess</code> 中の
このディレクティブが有効になるためには、少なくとも
<code>AllowOverride FileInfo</code> が設定されている必要があります。</p>
<example><title>$BNc(B:</title>
<example><title>:</title>
<table>
<tr>
<td><a
href="../mod/directive-dict.html#Context">$B%3%s%F%-%9%H(B:</a></td>
<td>$B%5!<%P@_Dj%U%!%$%k(B,$B%P!<%A%c%k%[%9%H(B,$B%G%#%l%/%H%j(B,.htaccess</td>
href="../mod/directive-dict.html#Context">コンテキスト:</a></td>
<td>サーバ設定ファイル,バーチャルホスト,ディレクトリ,.htaccess</td>
</tr>
<tr>
<td><a
href="../mod/directive-dict.html#Override">$B>e=q$-(B:</a></td>
href="../mod/directive-dict.html#Override">上書き:</a></td>
<td>FileInfo</td>
</tr>
</table>
</example>
<p>$B$"$k%G%#%l%/%F%#%V$r(B <code>.htaccess</code> $B%U%!%$%k$K=q$/$3$H$,$G$-$k$+(B
$B$I$&$+$o$+$i$J$$$H$-$O!"$=$N%G%#%l%/%F%#%V$N@bL@$rC5$7$F!"(B".htaccess"
$B$N$?$a$N!V%3%s%F%-%9%H!W$N9T$rD4$Y$F$/$@$5$$!#(B</p>
<p>あるディレクティブを <code>.htaccess</code> ファイルに書くことができるか
どうかわからないときは、そのディレクティブの説明を探して、".htaccess"
のための「コンテキスト」の行を調べてください。</p>
</section>
<section id="when"><title>$B$$$D(B .htaccess $B%U%!%$%k$r;H$&(B($B;H$o$J$$(B)$B$+!#(B</title>
<section id="when"><title>いつ .htaccess ファイルを使う(使わない)か。</title>
<p>$B0lHLE*$K!"%5!<%P$N<g@_Dj%U%!%$%k$K%"%/%;%9$G$-$J$$>l9g$r=|$$$F!"(B
<code>.htaccess</code> $B%U%!%$%k$N;HMQ$O6KNOHr$1$F$/$@$5$$!#(B
$B@$$NCf$K$O!"Nc$($P!"%f!<%6G'>Z$O>o$K(B <code>.htaccess</code> $B%U%!%$%k$G(B
$B9T$J$o$J$1$l$P$J$i$J$$!"$H$$$&8m2r$,9-$^$C$F$$$^$9$,!"$^$C$?$/$=$s$J$3$H$O(B
$B$"$j$^$;$s!#%f!<%6G'>Z$N@_Dj$O%5!<%P<g@_Dj%U%!%$%k$K=q$/$3$H$,$G$-!"(B
$B<B:]!"$=$NJ}$,$h$jNI$$@_DjJ}K!$G$9!#(B</p>
<p>一般的に、サーバの主設定ファイルにアクセスできない場合を除いて、
<code>.htaccess</code> ファイルの使用は極力避けてください。
世の中には、例えば、ユーザ認証は常に <code>.htaccess</code> ファイルで
行なわなければならない、という誤解が広まっていますが、まったくそんなことは
ありません。ユーザ認証の設定はサーバ主設定ファイルに書くことができ、
実際、その方がより良い設定方法です。</p>
<p><code>.htaccess</code> $B%U%!%$%k$O%3%s%F%s%DDs6!<T$,%G%#%l%/%H%jKh$N(B
$B@_Dj$r9T$J$$$?$$$1$l$I!"%5!<%P%7%9%F%`$N(B root $B%"%/%;%98"8B$r;}$C$F$$$J$$(B
$B$H$$$&>l9g$K$N$_;H$&$Y$-$b$N$G$9!#%5!<%P4IM}<T$,IQHK$K@_DjJQ99$r9T$J$$$?$/$O(B
$B$J$$!"$H$$$&$H$-$K$O8D!9$N%f!<%6$,(B <code>.htaccess</code> $B%U%!%$%k$r;H$C$F(B
$B<+J,$G@_Dj$NJQ99$r9T$J$&$3$H$r5v2D$7$?J}$,NI$$$H$-$b$"$k$G$7$g$&!#(B
$B$3$l$OFC$K!"(BISP $B$,J#?t$N%f!<%6$N%5%$%H$r0l$D$N%^%7%s$G%[%9%H$7$F$$$F!"(B
$B3F%f!<%6$,@_Dj$NJQ99$r$G$-$k$h$&$K$7$?$$$h$&$J$H$-$K$"$F$O$^$j$^$9!#(B</p>
<p><code>.htaccess</code> ファイルはコンテンツ提供者がディレクトリ毎の
設定を行ないたいけれど、サーバシステムの root アクセス権限を持っていない
という場合にのみ使うべきものです。サーバ管理者が頻繁に設定変更を行ないたくは
ない、というときには個々のユーザが <code>.htaccess</code> ファイルを使って
自分で設定の変更を行なうことを許可した方が良いときもあるでしょう。
これは特に、ISP が複数のユーザのサイトを一つのマシンでホストしていて、
各ユーザが設定の変更をできるようにしたいようなときにあてはまります。</p>
<p>$B$7$+$7!"IaDL$O2DG=$G$"$l$P(B <code>.htaccess</code> $B%U%!%$%k$N;HMQ$O(B
$BHr$1$F$/$@$5$$!#(B<code>.htaccess</code> $B%U%!%$%k$K=q$3$&$H9M$($k$h$&$J(B
$B$9$Y$F$N@_Dj$O!"%5!<%P$N<g@_Dj%U%!%$%k$N(B <directive module="core"
type="section">Directory</directive> $B%;%/%7%g%s$GF1$8$h$&$K9T$J$&$3$H$,(B
$B$G$-$^$9!#(B</p>
<p>しかし、普通は可能であれば <code>.htaccess</code> ファイルの使用は
避けてください。<code>.htaccess</code> ファイルに書こうと考えるような
すべての設定は、サーバの主設定ファイルの <directive module="core"
type="section">Directory</directive> セクションで同じように行なうことが
できます。</p>
<p><code>.htaccess</code> $B%U%!%$%k$N;HMQ$rHr$1$kM}M3$O<g$KFs$D$"$j$^$9!#(B</p>
<p><code>.htaccess</code> ファイルの使用を避ける理由は主に二つあります。</p>
<p>$B0l$DL\$O%5!<%P$N@-G=$NLdBj$G$9!#(B<directive
module="core">AllowOverride</directive> $B%G%#%l%/%F%#%V$,(B
<code>.htaccess</code> $B%U%!%$%k$N@_Dj$r5v2D$7$F$$$k>l9g$O!"(BApache $B$O(B
$B3F%G%#%l%/%H%j$G(B <code>.htaccess</code> $B%U%!%$%k$rC5$7$^$9!#(B
$B$G$9$+$i!"(B<code>.htaccess</code> $B%U%!%$%k$r5v2D$9$k$H!"<B:]$K;HMQ$7$F$$$k$+(B
$B$I$&$+$K4X$o$i$:!"@-G=$NDc2<$r>7$/$3$H$K$J$j$^$9(B! $B$^$?!"(B<code>.htaccess</code>
$B%U%!%$%k$OJ8=q$,%j%/%(%9%H$5$l$kEY$KFI$_9~$^$l$^$9!#(B</p>
<p>一つ目はサーバの性能の問題です。<directive
module="core">AllowOverride</directive> ディレクティブが
<code>.htaccess</code> ファイルの設定を許可している場合は、Apache は
各ディレクトリで <code>.htaccess</code> ファイルを探します。
ですから、<code>.htaccess</code> ファイルを許可すると、実際に使用しているか
どうかに関わらず、性能の低下を招くことになります! また、<code>.htaccess</code>
ファイルは文書がリクエストされる度に読み込まれます。</p>
<p>$B$5$i$K!"(BApache $B$OE,MQ$9$Y$-%G%#%l%/%F%#%V$r=8$a$k$?$a$K!"$9$Y$F$N(B
$B>e0L$N%G%#%l%/%H%j$N(B <code>.htaccess</code> $B%U%!%$%k$rC5$9I,MW$,$"$k$3$H$K$b(B
$BCm0U$7$F$/$@$5$$!#(B(<a href="#how">$B%G%#%l%/%F%#%V$,E,MQ$5$l$kJ}K!(B</a>$B$r(B
$B;2>H$7$F$/$@$5$$!#(B)$B$G$9$+$i!"(B<code>/www/htdocs/example</code> $B$K$"$k(B
$B%U%!%$%k$,%j%/%(%9%H$5$l$?$H$-$O!"(BApache $B$O0J2<$N%U%!%$%k$rD4$Y$^$9!#(B</p>
<p>さらに、Apache は適用すべきディレクティブを集めるために、すべての
上位のディレクトリの <code>.htaccess</code> ファイルを探す必要があることにも
注意してください。(<a href="#how">ディレクティブが適用される方法</a>を
参照してください。)ですから、<code>/www/htdocs/example</code> にある
ファイルがリクエストされたときは、Apache は以下のファイルを調べます。</p>
<example>
/.htaccess<br />
@@ -166,37 +166,37 @@
/www/htdocs/example/.htaccess
</example>
<p>$B$G$9$+$i!"$=$N%G%#%l%/%H%j$N$=$l$>$l$N%U%!%$%k$X$N%"%/%;%9$KBP$7$F!"(B
$B>e$NNc$N%U%!%$%k$,$^$C$?$/B8:_$7$J$$$H$-$G$b!"DI2C$N%U%!%$%k%7%9%F%`$N(B
$B%"%/%;%9$,9T$J$o$l$k$3$H$K$J$j$^$9!#(B($B$3$l$O!"(B<code>.htaccess</code> $B$,(B
<code>/</code> $B$KBP$7$FM-8z$K$J$C$F$$$k$H$-$N>l9g$G!"IaDL$O$=$&$J$C$F(B
$B$$$J$$$3$H$KCm0U$7$F$/$@$5$$!#(B)</p>
<p>ですから、そのディレクトリのそれぞれのファイルへのアクセスに対して、
上の例のファイルがまったく存在しないときでも、追加のファイルシステムの
アクセスが行なわれることになります。(これは、<code>.htaccess</code>
<code>/</code> に対して有効になっているときの場合で、普通はそうなって
いないことに注意してください。)</p>
<p>$BFs$DL\$O%;%-%e%j%F%#$G$9!#%f!<%6$K%5!<%P$N@_Dj$rJQ99$9$k$3$H$r(B
$B5v2D$9$k$3$H$K$J$j$^$9$N$G!"$"$J$?<+?H$,4IM}$G$-$J$$JQ99$r$5$l$k(B
$B62$l$,$"$j$^$9!#%f!<%6$K$3$NFC8"$rM?$($k$N$,NI$$$N$+$I$&$+!"==J,(B
$B8!F$$7$F$/$@$5$$!#$^$?!"%f!<%6$KM?$($k8"8B$,I,MW$J$b$N$h$j$b>/$J$9$.$k$H!"(B
$BM>J,$J5;=Q%5%]!<%HJs9p$r<u$1<h$k$h$&$K$J$k2DG=@-$,9b$$$3$H$K$b(B
$BCm0U$7$F$/$@$5$$!#3N<B$K!"%f!<%6$K$I$NDxEY$N8"8B$rM?$($?$+L@3N$K9p$2$k$h$&$K(B
$B$7$F$/$@$5$$!#(B<directive module="core">AllowOverride</directive> $B$K(B
$B2?$r@_Dj$7$?$+$H$$$&$3$H$H!"4XO"$9$kJ8=q$r<($9$3$H$G!"(B
$B8e!9$N:.Mp$r$0$C$H8:$i$9$3$H$,(B
$B$G$-$^$9!#(B</p>
<p>二つ目はセキュリティです。ユーザにサーバの設定を変更することを
許可することになりますので、あなた自身が管理できない変更をされる
恐れがあります。ユーザにこの特権を与えるのが良いのかどうか、十分
検討してください。また、ユーザに与える権限が必要なものよりも少なすぎると、
余分な技術サポート報告を受け取るようになる可能性が高いことにも
注意してください。確実に、ユーザにどの程度の権限を与えたか明確に告げるように
してください。<directive module="core">AllowOverride</directive>
何を設定したかということと、関連する文書を示すことで、
後々の混乱をぐっと減らすことが
できます。</p>
<p>$B$H$3$m$G!"%G%#%l%/%F%#%V$N=q$+$l$?(B <code>.htaccess</code> $B$r(B
<code>/www/htdocs/example</code> $B$KCV$/$3$H$H!"F1$8%G%#%l%/%F%#%V$r(B
$B<g%5!<%P@_Dj$N(B Directory $B%;%/%7%g%s(B
<code>&lt;Directory /www/htdocs/example&gt;</code> $B$K=q$/$3$H$O(B
$B40A4$KEy2A$G$9(B:</p>
<p>ところで、ディレクティブの書かれた <code>.htaccess</code>
<code>/www/htdocs/example</code> に置くことと、同じディレクティブを
主サーバ設定の Directory セクション
<code>&lt;Directory /www/htdocs/example&gt;</code> に書くことは
完全に等価です:</p>
<p><code>/www/htdocs/example</code> $B$N(B <code>.htaccess</code> $B%U%!%$%k(B:</p>
<p><code>/www/htdocs/example</code> <code>.htaccess</code> ファイル:</p>
<example><title><code>/www/htdocs/example</code> $B$N(B .htaccess $B%U%!%$%k$N(B
$BFbMF(B</title>
<example><title><code>/www/htdocs/example</code> .htaccess ファイルの
内容</title>
AddType text/example .exm
</example>
<example><title><code>httpd.conf $B$N%;%/%7%g%s(B</code>
<example><title><code>httpd.conf のセクション</code>
file</title>
&lt;Directory /www/htdocs/example&gt;<br />
<indent>
@@ -205,60 +205,60 @@
&lt;/Directory&gt;
</example>
<p>$B$7$+$7!"$3$N@_Dj$O%5!<%P@_Dj%U%!%$%k$K=q$$$?J}$,%Q%U%)!<%^%s%9$N(B
$BDc2<$,>/$J$/$J$j$^$9!#%U%!%$%k$,%j%/%(%9%H$5$l$kEY$K(B
$BFI$_9~$^$l$kBe$o$j$K!"(BApache $B$N5/F0;~$K(B 1 $B2s$@$1FI$_9~$a$P(B
$B$h$/$J$k$+$i$G$9!#(B</p>
<p>しかし、この設定はサーバ設定ファイルに書いた方がパフォーマンスの
低下が少なくなります。ファイルがリクエストされる度に
読み込まれる代わりに、Apache の起動時に 1 回だけ読み込めば
よくなるからです。</p>
<p><directive module="core">AllowOverride</directive> $B%G%#%l%/%F%#%V$N(B
$BCM$r(B <code>none</code> $B$K@_Dj$9$k$3$H$G(B <code>.htaccess</code> $B%U%!%$%k(B
$B$N;HMQ$r40A4$KL58z$K$9$k$3$H$,$G$-$^$9!#(B</p>
<p><directive module="core">AllowOverride</directive> ディレクティブの
値を <code>none</code> に設定することで <code>.htaccess</code> ファイル
の使用を完全に無効にすることができます。</p>
<example>
AllowOverride None
</example>
</section>
<section id="how"><title>$B%G%#%l%/%F%#%V$NE,MQ$N$5$lJ}(B</title>
<section id="how"><title>ディレクティブの適用のされ方</title>
<p><code>.htaccess</code> $B%U%!%$%k$N@_Dj%G%#%l%/%F%#%V$O(B <code>.htaccess</code>
$B%U%!%$%k$NB8:_$9$k%G%#%l%/%H%j$H!"$=$N%5%V%G%#%l%/%H%j$9$Y$F$KE,MQ$5$l$^$9!#(B
$B$7$+$7!">e$N3,AX$N%G%#%l%/%H%j$K$b(B <code>.htaccess</code> $B%U%!%$%k$,(B
$BB8:_$9$k$+$b$7$l$J$$$3$H$r3P$($F$*$/$3$H$OBg@Z$G$9!#%G%#%l%/%F%#%V$O8=$l$k(B
$B=gHV$KE,MQ$5$l$^$9!#$G$9$+$i!"$"$k%G%#%l%/%H%j$N(B <code>.htaccess</code> $B$O(B
$B%G%#%l%/%H%j%D%j!<$N$h$j>e$N3,AX$N(B <code>.htaccess</code> $B%U%!%$%k$N(B
$B@_Dj$r>e=q$-$9$k$+$b$7$l$^$;$s!#$=$7$F!"$=$N(B <code>.htaccess</code> $B$b(B
$B$h$j>e$N3,AX$G=q$+$l$?%G%#%l%/%F%#%V$r>e=q$-$7$?$j!"<g%5!<%P@_Dj%U%!%$%k(B
$B$=$N$b$N$N@_Dj$r>e=q$-$7$?$j$7$F$$$k$+$b$7$l$^$;$s!#(B</p>
<p><code>.htaccess</code> ファイルの設定ディレクティブは <code>.htaccess</code>
ファイルの存在するディレクトリと、そのサブディレクトリすべてに適用されます。
しかし、上の階層のディレクトリにも <code>.htaccess</code> ファイルが
存在するかもしれないことを覚えておくことは大切です。ディレクティブは現れる
順番に適用されます。ですから、あるディレクトリの <code>.htaccess</code>
ディレクトリツリーのより上の階層の <code>.htaccess</code> ファイルの
設定を上書きするかもしれません。そして、その <code>.htaccess</code>
より上の階層で書かれたディレクティブを上書きしたり、主サーバ設定ファイル
そのものの設定を上書きしたりしているかもしれません。</p>
<p>$BNc(B:</p>
<p>:</p>
<p>$B%G%#%l%/%H%j(B <code>/www/htdocs/example1</code> $B$K0J2<$NFbMF$N(B
<code>.htaccess</code> $B%U%!%$%k$,$"$j$^$9(B:</p>
<p>ディレクトリ <code>/www/htdocs/example1</code> に以下の内容の
<code>.htaccess</code> ファイルがあります:</p>
<example>
Options +ExecCGI
</example>
<p>($BCm(B: <code>.htaccess</code>
$B%U%!%$%k$G(B "<directive
module="core">Options</directive>" $B%G%#%l%/%F%#%V$,M-8z$K$J$k$?$a$K$O!"(B
"<code>AllowOverride Options</code>" $B$rM-8z$K$9$kI,MW$,$"$j$^$9!#(B)</p>
<p>(: <code>.htaccess</code>
ファイルで "<directive
module="core">Options</directive>" ディレクティブが有効になるためには、
"<code>AllowOverride Options</code>" を有効にする必要があります。)</p>
<p>$B%G%#%l%/%H%j(B <code>/www/htdocs/example1/example2</code> $B$K$O(B
$B0J2<$N$h$&$J(B <code>.htaccess</code> $B%U%!%$%k$,$"$j$^$9(B:</p>
<p>ディレクトリ <code>/www/htdocs/example1/example2</code> には
以下のような <code>.htaccess</code> ファイルがあります:</p>
<example>
Options Includes
</example>
<p>$BFs$D$a$N(B <code>.htaccess</code> $B$K$h$j!"%G%#%l%/%H%j(B
<code>/www/htdocs/example1/example2</code> $B$G$O(B CGI $B$N<B9T$O(B
$B5v2D$5$l$^$;$s!#$3$l$O!"(B<code>Options Includes</code> $B$N$_$,(B
$B8zNO$r;}$A!"$=$l$,$9$Y$F$N0JA0$N@_Dj$r>e=q$-$9$k$+$i$G$9!#(B</p>
<p>二つめの <code>.htaccess</code> により、ディレクトリ
<code>/www/htdocs/example1/example2</code> では CGI の実行は
許可されません。これは、<code>Options Includes</code> のみが
効力を持ち、それがすべての以前の設定を上書きするからです。</p>
<section id="merge"><title>$B%a%$%s@_Dj%U%!%$%k$KBP$9$k(B
.htaccess $B$N%^!<%8(B</title>
<section id="merge"><title>メイン設定ファイルに対する
.htaccess のマージ</title>
<p>As discussed in the documentation on <a
href="../sections.html">Configuration Sections</a>,
@@ -271,18 +271,18 @@
module="core">AllowOverride</directive> setting. For example, to
prevent script execution while allowing anything else to be set in
<code>.htaccess</code> you can use:</p>
<p><a href="../sections.html">$B%;%/%7%g%s$N@_Dj(B</a>
$B$K5-:\$5$l$F$$$k$h$&$K!"(B<code>.htaccess</code> $B%U%!%$%k$r;H$C$F(B
<p><a href="../sections.html">セクションの設定</a>
に記載されているように、<code>.htaccess</code> ファイルを使って
<directive type="section" module="core">Directory</directive>
$B%;%/%7%g%s$N@_Dj$r%G%#%l%/%H%jKh$K>e=q$-$G$-$^$9$,!"(B
$B%a%$%s@_Dj%U%!%$%kCf$K$"$k!"B>$N<oN`$N@_Dj%;%/%7%g%s$K$h$C$F(B
$B$5$i$K>e=q$-$5$l$k$3$H$b$"$j$^$9!#(B
$B$3$NFCD'$r;H$C$F!"(B
セクションの設定をディレクトリ毎に上書きできますが、
メイン設定ファイル中にある、他の種類の設定セクションによって
さらに上書きされることもあります。
この特徴を使って、
<directive module="core">AllowOverride</directive>
$B$G<+M3EY$N9b$$@_Dj$,$"$C$?$H$7$F$b!"$"$kFCDj$N@_Dj$,3N<B$K(B
$BH?1G$5$l$k$h$&$K$G$-$^$9!#Nc$($P!"(BCGI $B%9%/%j%W%H$N<B9T$O(B
$BIT5v2D$K!"$+$D!"(B<code>.htaccess</code> $B$G$=$NB>$N9`L\$O(B
$B@_Dj$G$-$k$h$&$K!"$H$$$&>l9g$O<!$N$h$&$K$G$-$^$9(B :</p>
で自由度の高い設定があったとしても、ある特定の設定が確実に
反映されるようにできます。例えば、CGI スクリプトの実行は
不許可に、かつ、<code>.htaccess</code> でその他の項目は
設定できるように、という場合は次のようにできます :</p>
<example>
&lt;Directory /&gt;<br />
@@ -301,24 +301,24 @@ Options +IncludesNoExec -ExecCGI<br />
</section>
<section id="auth"><title>$BG'>Z$NNc(B</title>
<section id="auth"><title>認証の例</title>
<p>$B$b$7G'>Z$NJ}K!$rCN$k$?$a$K$3$NItJ,$KD>@\Mh$?$N$G$"$l$P!"<!$N$3$H$r(B
$BCN$C$F$*$/$3$H$,=EMW$G$9!#$h$/$"$k8m2r$K!"%Q%9%o!<%IG'>Z$r9T$J$&$?$a$K$O(B
<code>.htaccess</code> $B%U%!%$%k$r;H$&I,MW$,$"$k!"$H$$$&$b$N$,$"$j$^$9!#(B
$B$3$l$O@5$7$/$"$j$^$;$s!#<g%5!<%P@_Dj%U%!%$%k$N(B <directive
module="core" type="section">Directory</directive> $B%;%/%7%g%s$K(B
$BG'>ZMQ$N%G%#%l%/%F%#%V$r=q$/J}$,?d>)$5$l$kJ}K!$G!"(B<code>.htaccess</code>
$B%U%!%$%k$O<g%5!<%P@_Dj%U%!%$%k$rJQ99$G$-$J$$$H$-$K$N$_;HMQ$9$Y$-$G$9!#(B
$B$$$D(B <code>.htaccess</code> $B%U%!%$%k$r;H$&$Y$-$G!"$$$D;H$&$Y$-$G$O$J$$$+$K(B
$B$D$$$F$O(B <a
href="#when">$B>e(B</a>$B$r;2>H$7$F$/$@$5$$!#(B</p>
<p>もし認証の方法を知るためにこの部分に直接来たのであれば、次のことを
知っておくことが重要です。よくある誤解に、パスワード認証を行なうためには
<code>.htaccess</code> ファイルを使う必要がある、というものがあります。
これは正しくありません。主サーバ設定ファイルの <directive
module="core" type="section">Directory</directive> セクションに
認証用のディレクティブを書く方が推奨される方法で、<code>.htaccess</code>
ファイルは主サーバ設定ファイルを変更できないときにのみ使用すべきです。
いつ <code>.htaccess</code> ファイルを使うべきで、いつ使うべきではないかに
ついては <a
href="#when">上</a>を参照してください。</p>
<p>$B0J>e$N$3$H$r$U$^$($?>e$G!"$b$7(B <code>.htaccess</code> $B$N;HMQ$,(B
$B$^$@I,MW$@$H;W$&>l9g$O!"<!$N$h$&$J$b$N$,K>$_$N$3$H$r$7$F$/$l$k$+$b(B
$B$7$l$^$;$s!#(B</p>
<p>以上のことをふまえた上で、もし <code>.htaccess</code> の使用が
まだ必要だと思う場合は、次のようなものが望みのことをしてくれるかも
しれません。</p>
<p><code>.htaccess</code> $B%U%!%$%k$NFbMF(B:</p>
<p><code>.htaccess</code> ファイルの内容:</p>
<example>
AuthType Basic<br />
@@ -328,20 +328,20 @@ Options +IncludesNoExec -ExecCGI<br />
Require Group admins
</example>
<p>$B$3$l$i$N%G%#%l%/%F%#%V$,M-8z$K$J$k$?$a$K$O!"(B
<code>AllowOverride AuthConfig</code> $B$,M-8z$G$J$/$F$O$J$i$J$$$3$H$K(B
$BCm0U$7$F$/$@$5$$!#(B</p>
<p>これらのディレクティブが有効になるためには、
<code>AllowOverride AuthConfig</code> が有効でなくてはならないことに
注意してください。</p>
<p>$BG'>Z$H>5G'$K$D$$$F$O(B <a href="auth.html">$BG'>Z%A%e!<%H%j%"%k(B</a>$B$r(B
$B;2>H$7$F$/$@$5$$!#(B</p>
<p>認証と承認については <a href="auth.html">認証チュートリアル</a>を
参照してください。</p>
</section>
<section id="ssi"><title>SSI $B$NNc(B</title>
<section id="ssi"><title>SSI の例</title>
<p>$B$b$&0l$D$N(B <code>.htaccess</code> $B%U%!%$%k$N$h$/$"$kMxMQK!$O(B
$BFCDj$N%G%#%l%/%H%j$G(B SSI $B$rM-8z$K$9$k$3$H$G$9!#$3$l$O!"K>$_$N%G%#%l%/%H%j$N(B
<code>.htaccess</code> $B%U%!%$%k$K0J2<$N@_Dj%G%#%l%/%F%#%V$r=q$/$3$H$G(B
$BC#@.$G$-$^$9(B:</p>
<p>もう一つの <code>.htaccess</code> ファイルのよくある利用法は
特定のディレクトリで SSI を有効にすることです。これは、望みのディレクトリの
<code>.htaccess</code> ファイルに以下の設定ディレクティブを書くことで
達成できます:</p>
<example>
Options +Includes<br />
@@ -349,59 +349,59 @@ Options +IncludesNoExec -ExecCGI<br />
AddHandler server-parsed shtml
</example>
<p>$B$3$l$i$N%G%#%l%/%F%#%V$,M-8z$K$J$k$?$a$K$O!"(B
<code>AllowOverride Options</code> $B$H(B <code>AllowOverride
FileInfo</code> $B$,M-8z$K$J$C$F$$$kI,MW$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
<p>これらのディレクティブが有効になるためには、
<code>AllowOverride Options</code> <code>AllowOverride
FileInfo</code> が有効になっている必要があることに注意してください。</p>
<p>$B$h$j$^$H$^$C$?(B SSI $B$N@bL@$O(B <a href="ssi.html">SSI $B%A%e!<%H%j%"%k(B</a>$B$r(B
$B;2>H$7$F$/$@$5$$!#(B</p>
<p>よりまとまった SSI の説明は <a href="ssi.html">SSI チュートリアル</a>を
参照してください。</p>
</section>
<section id="cgi"><title>CGI $B$NNc(B</title>
<section id="cgi"><title>CGI の例</title>
<p>$B:G8e$K!"FCDj$N%G%#%l%/%H%j$G(B CGI $B%W%m%0%i%`$N<B9T$r5v2D$7$?$$$3$H$,(B
$B$"$k$G$7$g$&!#$3$l$O0J2<$N@_Dj$G9T$J$&$3$H$,$G$-$^$9(B:</p>
<p>最後に、特定のディレクトリで CGI プログラムの実行を許可したいことが
あるでしょう。これは以下の設定で行なうことができます:</p>
<example>
Options +ExecCGI<br />
AddHandler cgi-script cgi pl
</example>
<p>$B$b$7$/$O!"$"$k%G%#%l%/%H%j$N$9$Y$F$N%U%!%$%k$,(B CGI $B%W%m%0%i%`$H(B
$B$_$J$5$l$k$h$&$K$7$?$$$J$i!"0J2<$N@_Dj$G<B8=$9$k$3$H$,$G$-$^$9(B:</p>
<p>もしくは、あるディレクトリのすべてのファイルが CGI プログラムと
みなされるようにしたいなら、以下の設定で実現することができます:</p>
<example>
Options +ExecCGI<br />
SetHandler cgi-script
</example>
<p>$B$3$l$i$N%G%#%l%/%F%#%V$,M-8z$K$J$k$?$a$K$O!"(B
<code>AllowOverride Options</code> $B$H(B <code>AllowOverride
FileInfo</code> $B$,M-8z$G$"$kI,MW$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
<p>これらのディレクティブが有効になるためには、
<code>AllowOverride Options</code> <code>AllowOverride
FileInfo</code> が有効である必要があることに注意してください。</p>
<p>CGI $B%W%m%0%i%`$H@_Dj$N$h$j$^$H$^$C$?@bL@$O(B <a
href="cgi.html">CGI $B%A%e!<%H%j%"%k(B</a>$B$r;2>H$7$F$/$@$5$$!#(B</p>
<p>CGI プログラムと設定のよりまとまった説明は <a
href="cgi.html">CGI チュートリアル</a>を参照してください。</p>
</section>
<section id="troubleshoot"><title>$BLdBj2r7h(B</title>
<section id="troubleshoot"><title>問題解決</title>
<p>$B@_Dj%G%#%l%/%F%#%V$r(B <code>.htaccess</code> $B%U%!%$%k$K=q$$$?$1$l$I$b!"(B
$B4|BT$7$?8z2L$,F@$i$l$J$$$H$-$K$O!"$$$/$D$+$N860x$,9M$($i$l$^$9!#(B</p>
<p>設定ディレクティブを <code>.htaccess</code> ファイルに書いたけれども、
期待した効果が得られないときには、いくつかの原因が考えられます。</p>
<p>$B0lHV$h$/$"$k$3$H$O!"@_Dj%G%#%l%/%F%#%V$,9MN8$5$l$k$h$&$K$O(B
<directive module="core">AllowOverride</directive> $B$,@_Dj$5$l$F$$$J$$(B
$B$H$$$&$b$N$G$9!#3:Ev$N%U%!%$%k$N%9%3!<%W$K(B <code>AllowOverride None</code>
$B$,@_Dj$5$l$F$$$J$$$3$H$r3NG'$7$F$/$@$5$$!#$3$l$rD4$Y$k$?$a$NNI$$J}K!$O!"(B
<code>.htaccess</code> $B%U%!%$%k$K$4$_$r=q$$$F!"%j%m!<%I$9$k$3$H$G$9!#(B
$B%5!<%P$N%(%i!<$,@8@.$5$l$J$$$H$-$O!"$[$\3N<B$K(B <code>AllowOverride
None</code> $B$,@_Dj$5$l$F$$$k>uBV$K$J$C$F$$$^$9!#(B</p>
<p>一番よくあることは、設定ディレクティブが考慮されるようには
<directive module="core">AllowOverride</directive> が設定されていない
というものです。該当のファイルのスコープに <code>AllowOverride None</code>
が設定されていないことを確認してください。これを調べるための良い方法は、
<code>.htaccess</code> ファイルにごみを書いて、リロードすることです。
サーバのエラーが生成されないときは、ほぼ確実に <code>AllowOverride
None</code> が設定されている状態になっています。</p>
<p>$B$=$&$G$O$J$/!"J8=q$r%"%/%;%9$7$h$&$H$7$?$H$-$K%(%i!<$,H/@8$7$F$$$k(B
$B$H$-$O!"(BApache $B$N%(%i!<%m%0$rD4$Y$F$/$@$5$$!#(B<code>.htaccess</code> $B%U%!%$%k$G(B
$B;HMQ$5$l$?%G%#%l%/%F%#%V$,5v2D$5$l$F$$$J$$!"$H$$$&$3$H$rCN$i$;$F$$$k(B
$B2DG=@-$,9b$$$G$9!#$^$?$O!"9=J8$N4V0c$$$,$"$k$3$H$r=R$Y$F$$$k$+$b$7$l$^$;$s!#(B
$B$=$N>l9g$K$O$^$:$=$l$r=$@5$9$kI,MW$,$"$j$^$9!#(B</p>
<p>そうではなく、文書をアクセスしようとしたときにエラーが発生している
ときは、Apache のエラーログを調べてください。<code>.htaccess</code> ファイルで
使用されたディレクティブが許可されていない、ということを知らせている
可能性が高いです。または、構文の間違いがあることを述べているかもしれません。
その場合にはまずそれを修正する必要があります。</p>
</section>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -23,74 +23,74 @@
<manualpage metafile="index.xml.meta">
<parentdocument href="../"/>
<title>How-To / $B%A%e!<%H%j%"%k(B</title>
<title>How-To / チュートリアル</title>
<section id="howto">
<title>How-To / $B%A%e!<%H%j%"%k(B</title>
<title>How-To / チュートリアル</title>
<dl>
<dt>$BG'>Z(B</dt>
<dt>認証</dt>
<dd>
<p>$BG'>Z$H$O!"C/$+$,<+J,$OC/$G$"$k$+$rL>>h$C$F$$$k$b$N$r8!>Z$9$k(B
$B=hM}$N$3$H$G$9!#>5G'$H$O!"C/$+$,K>$_$N>l=j$KC)$jCe$1$?$j!"(B
$BK>$_$N>pJs$r<j$KF~$l$?$j$9$k$3$H$r5v2D$9$k=hM}$N$3$H$G$9!#(B</p>
<p>認証とは、誰かが自分は誰であるかを名乗っているものを検証する
処理のことです。承認とは、誰かが望みの場所に辿り着けたり、
望みの情報を手に入れたりすることを許可する処理のことです。</p>
<p>$B;2>H(B: <a href="auth.html">$BG'>Z!">5G'!"%"%/%;%9@)8f(B</a></p>
<p>参照: <a href="auth.html">認証、承認、アクセス制御</a></p>
</dd>
</dl>
<dl>
<dt>CGI $B$K$h$kF0E*%3%s%F%s%D(B</dt>
<dt>CGI による動的コンテンツ</dt>
<dd>
<p>CGI (Common Gateway Interface) $B$O%&%'%V%5!<%P$,30It$N%3%s%F%s%D(B
$B@8@.%W%m%0%i%`$H$I$N$h$&$KAj8_F0:n$r$9$k$+$rDj5A$7$^$9!#(B
$B$=$N30It%W%m%0%i%`$ODL>o(B CGI $B%W%m%0%i%`$d(B CGI $B%9%/%j%W%H$H8F$P$l$^$9!#(B
CGI $B$O%&%'%V%5%$%H$KF0E*$J%3%s%F%s%D$rDI2C$9$k$?$a$N!"(B
$B0lHVC1=c$G$h$/;H$o$l$F$$$kJ}K!$G$9!#$3$NJ8=q$O(B Apache $B%&%'%V%5!<%P$K(B
CGI $B$r@_Dj$7!"(BCGI $B%W%m%0%i%`$r=q$-;O$a$k$?$a$N%$%s%H%m%@%/%7%g%s$G$9!#(B</p>
<p>CGI (Common Gateway Interface) はウェブサーバが外部のコンテンツ
生成プログラムとどのように相互動作をするかを定義します。
その外部プログラムは通常 CGI プログラムや CGI スクリプトと呼ばれます。
CGI はウェブサイトに動的なコンテンツを追加するための、
一番単純でよく使われている方法です。この文書は Apache ウェブサーバに
CGI を設定し、CGI プログラムを書き始めるためのイントロダクションです。</p>
<p>$B;2>H(B: <a href="cgi.html">CGI: $BF0E*%3%s%F%s%D(B</a></p>
<p>参照: <a href="cgi.html">CGI: 動的コンテンツ</a></p>
</dd>
</dl>
<dl>
<dt><code>.htaccess</code> $B%U%!%$%k(B</dt>
<dt><code>.htaccess</code> ファイル</dt>
<dd>
<p><code>.htaccess</code> $B%U%!%$%k$O%G%#%l%/%H%jKh$K@_Dj$rJQ99$9$k$?$a$N(B
$BJ}K!$rDs6!$7$^$9!#@_Dj%G%#%l%/%F%#%V$,=q$+$l$?%U%!%$%k$,!"$"$k%I%-%e%a%s%H(B
$B%G%#%l%/%H%j$KCV$+$l$k$H!"%G%#%l%/%F%#%V$O$=$N%G%#%l%/%H%j$H(B
$B$9$Y$F$N%5%V%G%#%l%/%H%j$KE,MQ$5$l$^$9!#(B</p>
<p><code>.htaccess</code> ファイルはディレクトリ毎に設定を変更するための
方法を提供します。設定ディレクティブが書かれたファイルが、あるドキュメント
ディレクトリに置かれると、ディレクティブはそのディレクトリと
すべてのサブディレクトリに適用されます。</p>
<p>$B;2>H(B: <a href="htaccess.html"><code>.htaccess</code> $B%U%!%$%k(B</a></p>
<p>参照: <a href="htaccess.html"><code>.htaccess</code> ファイル</a></p>
</dd>
</dl>
<dl>
<dt>Server Side Includes $B%$%s%H%m%@%/%7%g%s(B</dt>
<dt>Server Side Includes イントロダクション</dt>
<dd>
<p>SSI (Server Side Includes) $B$O(B HTML $B%Z!<%8Cf$K=q$+$l$k%G%#%l%/%F%#%V$G!"(B
$B%Z!<%8$,Aw$i$l$k;~$K%5!<%P$K$h$jI>2A$5$l$^$9!#$3$l$K$h$j!"%Z!<%8A4BN$r(B
CGI $B%W%m%0%i%`$G@8@.$7$?$j!"B>$NF0E*$J5;=Q$r;H$&$3$H$J$/!"4{B8$N(B HTML
$B%Z!<%8$KF0E*$K@8@.$5$l$?FbMF$rIU2C$9$k$3$H$,$G$-$^$9!#(B</p>
<p>SSI (Server Side Includes) は HTML ページ中に書かれるディレクティブで、
ページが送られる時にサーバにより評価されます。これにより、ページ全体を
CGI プログラムで生成したり、他の動的な技術を使うことなく、既存の HTML
ページに動的に生成された内容を付加することができます。</p>
<p>$B;2>H(B: <a href="ssi.html">Server Side Includes (SSI)</a></p>
<p>参照: <a href="ssi.html">Server Side Includes (SSI)</a></p>
</dd>
</dl>
<dl>
<dt>$B%f!<%6Kh$N%&%'%V%G%#%l%/%H%j(B</dt>
<dt>ユーザ毎のウェブディレクトリ</dt>
<dd>
<p>$BJ#?t%f!<%6$NB8:_$9$k%7%9%F%`$G$O!"$=$l$>$l$N%f!<%6$O(B <directive
module="mod_userdir">UserDir</directive> $B%G%#%l%/%F%#%V$r;H$&$3$H$K$h$C$F(B
$B%[!<%`%G%#%l%/%H%j>e$K%&%'%V%5%$%H$r:n@.$9$k$3$H$,$G$-$^$9!#(B
URL <code>http://example.com/~username/</code> $B$rK,$l$??M$O(B
$B%f!<%6(B "<code>username</code>" $B$N%[!<%`%G%#%l%/%H%j$N!"(B<directive
module="mod_userdir">UserDir</directive> $B%G%#%l%/%F%#%V$G;XDj$5$l$?(B
$B%5%V%G%#%l%/%H%j$+$i%3%s%F%s%D$rF@$k$3$H$K$J$j$^$9!#(B</p>
<p>複数ユーザの存在するシステムでは、それぞれのユーザは <directive
module="mod_userdir">UserDir</directive> ディレクティブを使うことによって
ホームディレクトリ上にウェブサイトを作成することができます。
URL <code>http://example.com/~username/</code> を訪れた人は
ユーザ "<code>username</code>" のホームディレクトリの、<directive
module="mod_userdir">UserDir</directive> ディレクティブで指定された
サブディレクトリからコンテンツを得ることになります。</p>
<p>$B;2>H(B: <a href="public_html.html"
>$B%f!<%6%&%'%V%G%#%l%/%H%j(B (<code>public_html</code>)</a></p>
<p>参照: <a href="public_html.html"
>ユーザウェブディレクトリ (<code>public_html</code>)</a></p>
</dd>
</dl>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:659902 (outdated) -->
@@ -21,24 +21,24 @@
-->
<manualpage metafile="public_html.xml.meta">
<parentdocument href="./">How-To / $B%A%e!<%H%j%"%k(B</parentdocument>
<parentdocument href="./">How-To / チュートリアル</parentdocument>
<title>$B%f!<%6Kh$N%&%'%V%G%#%l%/%H%j(B</title>
<title>ユーザ毎のウェブディレクトリ</title>
<summary>
<p>$BJ#?t$N%f!<%6$N$$$k%7%9%F%`$G$O!"(B<directive
module="mod_userdir">UserDir</directive> $B%G%#%l%/%F%#%V$r;H$C$F(B
$B3F%f!<%6$,%[!<%`%G%#%l%/%H%j$K%&%'%V%5%$%H$r9=C[$G$-$k$h$&$K@_Dj$9$k$3$H$,(B
$B2DG=$G$9!#(BURL <code>http://example.com/~username/</code> $B$rK,$l$??M$O(B
"<code>username</code>" $B$H$$$&%f!<%6$N(B <directive
module="mod_userdir">UserDir</directive> $B%G%#%l%/%F%#%V$G;XDj$5$l$?(B
$B%5%V%G%#%l%/%H%j$+$i%3%s%F%s%D$rF@$k$3$H$K$J$j$^$9!#(B</p>
<p>複数のユーザのいるシステムでは、<directive
module="mod_userdir">UserDir</directive> ディレクティブを使って
各ユーザがホームディレクトリにウェブサイトを構築できるように設定することが
可能です。URL <code>http://example.com/~username/</code> を訪れた人は
"<code>username</code>" というユーザの <directive
module="mod_userdir">UserDir</directive> ディレクティブで指定された
サブディレクトリからコンテンツを得ることになります。</p>
</summary>
<seealso><a href="../urlmapping.html">URL $B$+$i%U%!%$%k%7%9%F%`$X$N%^%C%T%s%0(B</a></seealso>
<seealso><a href="../urlmapping.html">URL からファイルシステムへのマッピング</a></seealso>
<section id="related">
<title>$B%f!<%6Kh$N%&%'%V%G%#%l%/%H%j(B</title>
<title>ユーザ毎のウェブディレクトリ</title>
<related>
<modulelist>
<module>mod_userdir</module>
@@ -52,77 +52,77 @@
</section>
<section id="userdir">
<title>UserDir $B$r;H$C$F%U%!%$%k$N%Q%9$r@_Dj$9$k(B</title>
<title>UserDir を使ってファイルのパスを設定する</title>
<p><directive module="mod_userdir">UserDir</directive> $B%G%#%l%/%F%#%V$O(B
$B%f!<%6Kh$N%3%s%F%s%D$,FI$_9~$^$l$k%G%#%l%/%H%j$r;XDj$7$^$9!#(B
$B$3$N%G%#%l%/%F%#%V$O$$$m$$$m0c$C$?7A<0$r<h$k$3$H$,$G$-$^$9!#(B</p>
<p><directive module="mod_userdir">UserDir</directive> ディレクティブは
ユーザ毎のコンテンツが読み込まれるディレクトリを指定します。
このディレクティブはいろいろ違った形式を取ることができます。</p>
<p>$B%9%i%C%7%e$G;O$^$i$J$$%Q%9$,M?$($i$l$?$H$-$O!"%f!<%6$N%[!<%`%G%#%l%/%H%j(B
$B$+$i$NAjBP%Q%9$H$_$J$5$l$^$9!#<!$N@_Dj$,$"$C$?$H$-$K(B:</p>
<p>スラッシュで始まらないパスが与えられたときは、ユーザのホームディレクトリ
からの相対パスとみなされます。次の設定があったときに:</p>
<example>
UserDir public_html
</example>
<p>URL <code>http://example.com/~rbowen/file.html</code> $B$O(B
$B%Q%9(B <code>/home/rbowen/public_html/file.html</code> $B$X(B
$BJQ49$5$l$^$9!#(B</p>
<p>URL <code>http://example.com/~rbowen/file.html</code>
パス <code>/home/rbowen/public_html/file.html</code>
変換されます。</p>
<p>$B%Q%9$,%9%i%C%7%e$G;O$^$k$H$-$O!"%G%#%l%/%H%j%Q%9$O$=$N%Q%9$K(B
$B%f!<%6L>$r2C$($?$b$N$+$i$J$j$^$9!#<!$N@_Dj$N$H$-(B:</p>
<p>パスがスラッシュで始まるときは、ディレクトリパスはそのパスに
ユーザ名を加えたものからなります。次の設定のとき:</p>
<example>
UserDir /var/html
</example>
<p>URL <code>http://example.com/~rbowen/file.html</code> $B$O(B
$B%Q%9(B <code>/var/html/rbowen/file.html</code> $B$XJQ49$5$l$^$9!#(B</p>
<p>URL <code>http://example.com/~rbowen/file.html</code>
パス <code>/var/html/rbowen/file.html</code> へ変換されます。</p>
<p>$B%"%9%?%j%9%/(B (*) $B$r4^$`%Q%9$,;XDj$5$l$?$H$-$O!"%"%9%?%j%9%/$r(B
$B%f!<%6L>$GCV49$7$?$b$N$,;HMQ$5$l$^$9!#$3$N$h$&$J@_Dj$@$H(B:</p>
<p>アスタリスク (*) を含むパスが指定されたときは、アスタリスクを
ユーザ名で置換したものが使用されます。このような設定だと:</p>
<example>
UserDir /var/www/*/docs
</example>
<p>URL <code>http://example.com/~rbowen/file.html</code> $B$O(B
$B%Q%9(B <code>/var/www/rbowen/docs/file.html</code> $B$XJQ49$5$l$^$9!#(B</p>
<p>URL <code>http://example.com/~rbowen/file.html</code>
パス <code>/var/www/rbowen/docs/file.html</code> へ変換されます。</p>
</section>
<section id="enable">
<title>$B$3$N5!G=$r;HMQ$G$-$k%f!<%6$r@)8B$9$k(B</title>
<title>この機能を使用できるユーザを制限する</title>
<p>UserDir $B$N%I%-%e%a%s%H$K<($5$l$F$$$k9=J8$r;H$&$3$H$G!"(B
$B$I$N%f!<%6$,$3$N5!G=$r;H$&$3$H$,$G$-$k$+$r@)8B$9$k$3$H$,$G$-$^$9(B:</p>
<p>UserDir のドキュメントに示されている構文を使うことで、
どのユーザがこの機能を使うことができるかを制限することができます:</p>
<example>
UserDir enabled<br />
UserDir disabled root jro fish
</example>
<p>$B>e$N@_Dj$O(B <code>dissabled</code> $BJ8$N%f!<%60J30$N$9$Y$F$N%f!<%6$K(B
$BBP$7$F(B UserDir $B$N5!G=$rM-8z$K$7$^$9!#F1MM$K$7$F!"0J2<$N$h$&$K(B
$B?tL>$N%f!<%60J30$KBP$7$F$3$N5!G=$rL58z$K$9$k$3$H$b$G$-$^$9(B:</p>
<p>上の設定は <code>dissabled</code> 文のユーザ以外のすべてのユーザに
対して UserDir の機能を有効にします。同様にして、以下のように
数名のユーザ以外に対してこの機能を無効にすることもできます:</p>
<example>
UserDir disabled<br />
UserDir enabled rbowen krietz
</example>
<p>$BB>$NNc$O(B <directive module="mod_userdir">UserDir</directive>
$B$N@bL@$r;2>H$7$F$/$@$5$$!#(B</p>
<p>他の例は <directive module="mod_userdir">UserDir</directive>
の説明を参照してください。</p>
</section>
<section id="cgi">
<title>$B%f!<%6Kh$N(B CGI $B%G%#%l%/%H%j(B</title>
<title>ユーザ毎の CGI ディレクトリ</title>
<p>$B$=$l$>$l$N%f!<%6$K@lMQ$N(B cgi-bin $B%G%#%l%/%H%j$rM?$($k$?$a$K!"(B
<p>それぞれのユーザに専用の cgi-bin ディレクトリを与えるために、
<directive module="core" type="section">Directory</directive>
$B$r;H$C$F%f!<%6$N%[!<%`%G%#%l%/%H%j$N;XDj$5$l$?NN0h$KBP$7$F(B CGI $B$rM-8z$K(B
$B$9$k$3$H$,$G$-$^$9!#(B</p>
を使ってユーザのホームディレクトリの指定された領域に対して CGI を有効に
することができます。</p>
<example>
&lt;Directory /home/*/public_html/cgi-bin/&gt;<br />
@@ -131,10 +131,10 @@
&lt;/Directory&gt;
</example>
<p>$B$=$7$F!"(B<code>UserDir</code> $B$,(B
<code>public_html</code> $B$K@_Dj$5$l$F$$$k$H2>Dj$9$k$H!"(B
$B$=$N%G%#%l%/%H%j$N(B CGI $B%W%m%0%i%`(B <code>example.cgi</code>
$B$O0J2<$NMM$K8F$S=P$5$l$k$3$H$,$G$-$^$9(B:</p>
<p>そして、<code>UserDir</code>
<code>public_html</code> に設定されていると仮定すると、
そのディレクトリの CGI プログラム <code>example.cgi</code>
は以下の様に呼び出されることができます:</p>
<example>
http://example.com/~rbowen/cgi-bin/example.cgi
@@ -143,15 +143,15 @@
</section>
<section id="htaccess">
<title>$B%f!<%6$K$h$k@_DjJQ99$r5v2D(B</title>
<title>ユーザによる設定変更を許可</title>
<p>$B%f!<%6$KH`$i$N%&%'%V6u4V$G$N%5!<%P$N@_Dj$NJQ99$r5v2D$9$k>l9g!"(B
$B%f!<%6$O(B <code>.htaccess</code> $B%U%!%$%k$r;H$C$F@_Dj$rJQ99$9$kI,MW$,$"$j$^$9!#(B
<directive module="core">AllowOverride</directive> $B$NCM$r(B
$B%f!<%6$,JQ99$9$k$3$H$r5v2D$7$?$$%G%#%l%/%F%#%V$KBP$7$F==J,$J$b$N$K(B
$B@_Dj$7$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#$3$N5!G=$,$I$N$h$&$K$7$FF0:n$7$F$$$k$+(B
$B$N>\:Y$O(B <a href="htaccess.html">.htaccess $B%A%e!<%H%j%"%k(B</a> $B$rFI$s$G(B
$B$/$@$5$$!#(B</p>
<p>ユーザに彼らのウェブ空間でのサーバの設定の変更を許可する場合、
ユーザは <code>.htaccess</code> ファイルを使って設定を変更する必要があります。
<directive module="core">AllowOverride</directive> の値を
ユーザが変更することを許可したいディレクティブに対して十分なものに
設定していることを確認してください。この機能がどのようにして動作しているか
の詳細は <a href="htaccess.html">.htaccess チュートリアル</a> を読んで
ください。</p>
</section>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 659902 -->
@@ -21,16 +21,16 @@
-->
<manualpage metafile="ssi.xml.meta">
<parentdocument href="./">How-To / $B%A%e!<%H%j%"%k(B</parentdocument>
<parentdocument href="./">How-To / チュートリアル</parentdocument>
<title>Apache $B%A%e!<%H%j%"%k(B: Server Side Includes $BF~Lg(B</title>
<title>Apache チュートリアル: Server Side Includes 入門</title>
<summary>
<p>$B%5!<%P%5%$%I%$%s%/%k!<%I$K$h$C$F!"4{B8$N(B HTML
$B%I%-%e%a%s%H$KF0E*$J%3%s%F%s%D$rDI2C$9$k$3$H$,$G$-$^$9!#(B</p>
<p>サーバサイドインクルードによって、既存の HTML
ドキュメントに動的なコンテンツを追加することができます。</p>
</summary>
<section id="related"><title>$B$O$8$a$K(B</title>
<section id="related"><title>はじめに</title>
<related>
<modulelist>
<module>mod_include</module>
@@ -47,149 +47,149 @@
</directivelist>
</related>
<p>$B$3$N5-;v$O!"DL>o$OC1$K(B SSI $B$H8F$P$l$k(B Server Side Includes
$B$r07$$$^$9!#$3$N5-;v$K$*$$$F$O!"%5!<%P$G$N(B SSI $B$r5v2D$9$k$?$a$N@_Dj$H!"(B
$B8=:_$N(B HTML $B%Z!<%8$KF0E*$J%3%s%F%s%D$r2C$($k$?$a$N$$$/$D$+$N4pK\E*$J(B
SSI $B5;=Q$r>R2p$7$^$9!#(B</p>
<p>この記事は、通常は単に SSI と呼ばれる Server Side Includes
を扱います。この記事においては、サーバでの SSI を許可するための設定と、
現在の HTML ページに動的なコンテンツを加えるためのいくつかの基本的な
SSI 技術を紹介します。</p>
<p>$B5-;v$N8eH>$G$O!"(BSSI $B%G%#%l%/%F%#%V$G(B SSI
$B$H6&$K<B9T$9$k$3$H$,$G$-$k>r7oJ8$N$h$&$J(B
$B4vJ,9bEY$J;vJA$K$D$$$F=R$Y$F$$$^$9!#(B</p>
<p>記事の後半では、SSI ディレクティブで SSI
と共に実行することができる条件文のような
幾分高度な事柄について述べています。</p>
</section>
<section id="what"><title>SSI $B$H$O(B ?</title>
<section id="what"><title>SSI とは ?</title>
<p>SSI (Server Side Includes) $B$O!"(BHTML
$B%Z!<%8Cf$KG[CV$5$l$k%G%#%l%/%F%#%V$G$"$j!"(B
$B%5!<%P$G%Z!<%8$rDs6!$9$k;~$KI>2A$5$l$^$9!#(BSSI $B$O!"(BCGI
$B%W%m%0%i%`$d$=$NB>$NF0E*$J5;=Q$GA4$F$N%Z!<%8$rDs6!$;$:$K!"(B
$BF0E*$K@8@.$5$l$?%3%s%F%s%D$r8=:_$N(B HTML $B%Z!<%8$K2C$($^$9!#(B</p>
<p>SSI (Server Side Includes) は、HTML
ページ中に配置されるディレクティブであり、
サーバでページを提供する時に評価されます。SSI は、CGI
プログラムやその他の動的な技術で全てのページを提供せずに、
動的に生成されたコンテンツを現在の HTML ページに加えます。</p>
<p>$B$I$&$$$&>l9g$K(B SSI $B$r;H$$!"$I$&$$$&>l9g$K%W%m%0%i%`$G(B
$B%Z!<%8$r40A4$K@8@.$9$k$+$O!"%Z!<%8$N$&$A$I$NDxEY$,@EE*$G$"$j!"(B
$B%Z!<%8$,Ds6!$5$l$k$?$S$K:F7W;;$9$kI,MW$,$I$NDxEY$"$k$+$GDL>o$O7hDj$7$^$9!#(B
SSI $B$O8=:_;~9o$N$h$&$J>.$5$$>pJs$r2C$($k$K$O$&$C$F$D$1$NJ}K!$G$9!#(B
$B$7$+$7!"$=$N%Z!<%8$N$[$H$s$I$NItJ,$,Ds6!;~$K@8@.$5$l$k>l9g$O!"(B
$BB>$NJ}K!$rC5$9I,MW$,$"$j$^$9!#(B</p>
<p>どういう場合に SSI を使い、どういう場合にプログラムで
ページを完全に生成するかは、ページのうちどの程度が静的であり、
ページが提供されるたびに再計算する必要がどの程度あるかで通常は決定します。
SSI は現在時刻のような小さい情報を加えるにはうってつけの方法です。
しかし、そのページのほとんどの部分が提供時に生成される場合は、
他の方法を探す必要があります。</p>
</section>
<section id="configuring">
<title>SSI $B$r5v2D$9$k$?$a$N%5!<%P$N@_Dj(B</title>
<title>SSI を許可するためのサーバの設定</title>
<p>$B%5!<%P$G(B SSI $B$r5v2D$9$k$K$O!"(B<code>httpd.conf</code>
$B%U%!%$%k$^$?$O(B <code>.htaccess</code>
$B%U%!%$%k$K<!$N%G%#%l%/%F%#%V$r;XDj$9$kI,MW$,$"$j$^$9(B:</p>
<p>サーバで SSI を許可するには、<code>httpd.conf</code>
ファイルまたは <code>.htaccess</code>
ファイルに次のディレクティブを指定する必要があります:</p>
<example>
Options +Includes
</example>
<p>$B$3$N;XDj$O!"%U%!%$%k$r(B SSI
$B%G%#%l%/%F%#%V$G2r@O$5$;$k$3$H$r5v2D$9$k$H$$$&$3$H$r(B Apache
$B$KEA$($^$9!#$[$H$s$I$N@_Dj$G$O$*8_$$$r>e=q$-$G$-$k!"J#?t$N(B
<directive module="core">Options</directive> $B$,$"$k$3$H$K(B
$BCm0U$7$F$/$@$5$$!#$*$=$i$/!"@_Dj$,:G8e$KI>2A$5$l$k$3$H$r(B
$BJ]>Z$5$l$k$?$a$K!"(BSSI $B$r;HMQ$7$?$$%G%#%l%/%H%j$K(B <code>Options</code>
$B%G%#%l%/%F%#%V$rE,MQ$9$kI,MW$,$"$k$G$7$g$&!#(B</p>
<p>この指定は、ファイルを SSI
ディレクティブで解析させることを許可するということを Apache
に伝えます。ほとんどの設定ではお互いを上書きできる、複数の
<directive module="core">Options</directive> があることに
注意してください。おそらく、設定が最後に評価されることを
保証されるために、SSI を使用したいディレクトリに <code>Options</code>
ディレクティブを適用する必要があるでしょう。</p>
<p>$BA4$F$N%U%!%$%k$,(B SSI
$B%G%#%l%/%F%#%V$G2r@O$5$l$k$H$$$&$o$1$G$O$"$j$^$;$s!#(B
$B$I$N%U%!%$%k$,2r@O$5$l$k$+$r(B Apache $B$KEA$($kI,MW$,$"$j$^$9!#(B
$B$3$l$r9T$J$&$K$OFs$DJ}K!$,$"$j$^$9!#(B
$B<!$N%G%#%l%/%F%#%V$r;H$&$3$H$G!"Nc$($P(B <code>.shtml</code>
$B$N$h$&$JFCJL$J%U%!%$%k3HD%;R$r;}$D%U%!%$%k$r2r@O$9$k$h$&(B
Apache $B$KEA$($k$3$H$,$G$-$^$9(B:</p>
<p>全てのファイルが SSI
ディレクティブで解析されるというわけではありません。
どのファイルが解析されるかを Apache に伝える必要があります。
これを行なうには二つ方法があります。
次のディレクティブを使うことで、例えば <code>.shtml</code>
のような特別なファイル拡張子を持つファイルを解析するよう
Apache に伝えることができます:</p>
<example>
AddType text/html .shtml<br />
AddOutputFilter INCLUDES .shtml
</example>
<p>$B$3$NJ}K!$N7gE@$O!"$b$78=:_$N%Z!<%8$K(B SSI $B%G%#%l%/%F%#%V$r2C$($?$$>l9g!"(B
$B$=$l$i$N%G%#%l%/%F%#%V$,<B9T$5$l$k$h$&$K(B
<code>.shtml</code> $B3HD%;R$K$9$k$?$a!"$=$N%Z!<%8$NL>A0$H!"(B
$B$=$N%Z!<%8$X$NA4$F$N%j%s%/$rJQ99$7$J$1$l$P$J$i$J$$$3$H$G$9!#(B</p>
<p>この方法の欠点は、もし現在のページに SSI ディレクティブを加えたい場合、
それらのディレクティブが実行されるように
<code>.shtml</code> 拡張子にするため、そのページの名前と、
そのページへの全てのリンクを変更しなければならないことです。</p>
<p>$B$b$&0l$D$NJ}K!$O!"(B<directive module="mod_include">XBitHack</directive>
$B%G%#%l%/%F%#%V$r;HMQ$9$k$3$H$G$9(B:</p>
<p>もう一つの方法は、<directive module="mod_include">XBitHack</directive>
ディレクティブを使用することです:</p>
<example>
XBitHack on
</example>
<p><directive module="mod_include">XBitHack</directive>
$B$O!"%U%!%$%k$N<B9T%S%C%H$,N)$C$F$$$k>l9g!"(B
SSI $B%G%#%l%/%F%#%V$K$h$j2r@O$9$k$3$H$r(B Apache $B$KEA$($^$9!#(B
$B=>$C$F!"(BSSI $B%G%#%l%/%F%#%V$r8=:_$N%Z!<%8$K2C$($k$?$a$K$O!"(B
$B%U%!%$%kL>$rJQ99$7$J$/$F$b$h$/!"C1$K(B <code>chmod</code>
$B$r;HMQ$7$F%U%!%$%k$r<B9T2DG=$K$9$k$@$1$G:Q$_$^$9!#(B</p>
は、ファイルの実行ビットが立っている場合、
SSI ディレクティブにより解析することを Apache に伝えます。
従って、SSI ディレクティブを現在のページに加えるためには、
ファイル名を変更しなくてもよく、単に <code>chmod</code>
を使用してファイルを実行可能にするだけで済みます。</p>
<example>
chmod +x pagename.html
</example>
<p>$B9T$J$&$Y$-$G$O$J$$$3$H$K4X$9$kC;$$%3%a%s%H!#;~!9C/$+$,!"A4$F$N(B
<code>.html</code> $B%U%!%$%k$r(B SSI $B$G2r@O$9$k$h$&(B Apache $B$KEA$($l$P!"(B
$B$o$6$o$6(B <code>.shtml</code> $B$H$$$&%U%!%$%kL>$K$9$kI,MW$,$J$$$H$$$C$F(B
$BA&$a$k$N$r8+$k$3$H$G$7$g$&!#$3$&$$$&?M$?$A$O!"$*$=$i$/(B
<p>行なうべきではないことに関する短いコメント。時々誰かが、全ての
<code>.html</code> ファイルを SSI で解析するよう Apache に伝えれば、
わざわざ <code>.shtml</code> というファイル名にする必要がないといって
薦めるのを見ることでしょう。こういう人たちは、おそらく
<directive module="mod_include">XBitHack</directive>
$B$K$D$$$FJ9$$$?$3$H$,$J$$$N$G$7$g$&!#(B
$B$3$NJ}K!$K$D$$$FCm0U$9$k$3$H$O!"$?$H$((B SSI
$B%G%#%l%/%F%#%V$rA4$/4^$^$J$$>l9g$G$b!"(BApache $B$,%/%i%$%"%s%H$K(B
$BAw$kA4$F$N%U%!%$%k$r:G8e$^$GFI$_9~$^$;$k$3$H$K$J$j$^$9!#(B
$B$3$NJ}K!$O$+$J$j=hM}$rCY$/$9$k$b$N$G$"$j!"NI$/$J$$%"%$%G%"$G$9!#(B</p>
について聞いたことがないのでしょう。
この方法について注意することは、たとえ SSI
ディレクティブを全く含まない場合でも、Apache がクライアントに
送る全てのファイルを最後まで読み込ませることになります。
この方法はかなり処理を遅くするものであり、良くないアイデアです。</p>
<p>$B$b$A$m$s!"(BWindows $B$G$O$=$N$h$&$J<B9T%S%C%H$r%;%C%H(B
$B$9$k$h$&$J$b$N$O$"$j$^$;$s$N$G%*%W%7%g%s$,>/$7@)8B$5$l$F$$$^$9!#(B</p>
<p>もちろん、Windows ではそのような実行ビットをセット
するようなものはありませんのでオプションが少し制限されています。</p>
<p>$B%G%U%)%k%H$N@_Dj$G$O!"(BApache $B$O(B SSI $B%Z!<%8$K$D$$$F:G=*JQ99;~9o$d(B
$B%3%s%F%s%D$ND9$5$r(B HTTP $B%X%C%@$KAw$j$^$;$s!#(B
$BF0E*$J%3%s%F%s%D$G$"$k$?$a!"$=$l$i$NCM$r7W;;$9$k$N$,Fq$7$$$+$i$G$9!#(B
$B$3$N$?$a%I%-%e%a%s%H$,%-%c%C%7%e$5$l$J$/$J$j!"(B
$B7k2L$H$7$F%/%i%$%"%s%H$N@-G=$,CY$/$J$C$?$h$&$K46$8$5$;$k$3$H$K$J$j$^$9!#(B
$B$3$l$r2r7h$9$kJ}K!$,Fs$D$"$j$^$9(B:</p>
<p>デフォルトの設定では、Apache は SSI ページについて最終変更時刻や
コンテンツの長さを HTTP ヘッダに送りません。
動的なコンテンツであるため、それらの値を計算するのが難しいからです。
このためドキュメントがキャッシュされなくなり、
結果としてクライアントの性能が遅くなったように感じさせることになります。
これを解決する方法が二つあります:</p>
<ol>
<li><code>XBitHack Full</code> $B@_Dj$r;HMQ$9$k!#(B
$B$3$N@_Dj$K$h$j!"$b$H$b$HMW5a$5$l$?%U%!%$%k$N;~9o$r;2>H$7!"(B
$BFI$_9~$^$l$k%U%!%$%k$NJQ99;~9o$rL5;k$7$F:G=*JQ99;~9o$r7hDj$9$k$h$&(B
Apache $B$KEA$($^$9!#(B</li>
<li><code>XBitHack Full</code> 設定を使用する。
この設定により、もともと要求されたファイルの時刻を参照し、
読み込まれるファイルの変更時刻を無視して最終変更時刻を決定するよう
Apache に伝えます。</li>
<li><a href="../mod/mod_expires.html">mod_expires</a>
$B$GDs6!$5$l$F$$$k%G%#%l%/%F%#%V$r;HMQ$7$F!"(B
$B%U%!%$%k$,L58z$K$J$k;~9o$rL@<($7$^$9!#$3$l$K$h$j!"(B
$B%V%i%&%6$H%W%m%-%7$K%-%c%C%7%e$,M-8z$G$"$k$3$H$rDLCN$7$^$9!#(B</li>
で提供されているディレクティブを使用して、
ファイルが無効になる時刻を明示します。これにより、
ブラウザとプロキシにキャッシュが有効であることを通知します。</li>
</ol>
</section>
<section id="basic"><title>$B4pK\E*$J(B SSI $B%G%#%l%/%F%#%V(B</title>
<section id="basic"><title>基本的な SSI ディレクティブ</title>
<p>SSI $B%G%#%l%/%F%#%V$O0J2<$NJ8K!$G5-=R$7$^$9(B:</p>
<p>SSI ディレクティブは以下の文法で記述します:</p>
<example>
&lt;!--#element attribute=value attribute=value ... --&gt;
</example>
<p>HTML $B$N%3%a%s%H$N$h$&$J=q<0$r$7$F$$$k$N$G!"$b$7(B SSI
$B$r@5$7$/F0:n2DG=$K$7$J$1$l$P!"%V%i%&%6$O$=$l$rL5;k$9$k$G$7$g$&!#(B
$B$7$+$7!"(BHTML $B%=!<%9Cf$G$O8+$($^$9!#$b$7(B SSI $B$r@5$7$/@_Dj$7$?$J$i!"(B
$B%G%#%l%/%F%#%V$O$=$N7k2L$HCV$-49$($i$l$^$9!#(B</p>
<p>HTML のコメントのような書式をしているので、もし SSI
を正しく動作可能にしなければ、ブラウザはそれを無視するでしょう。
しかし、HTML ソース中では見えます。もし SSI を正しく設定したなら、
ディレクティブはその結果と置き換えられます。</p>
<p>element $B$O$?$/$5$s$"$k$b$N$+$i0l$D;XDj$9$k$3$H$,$G$-$^$9!#(B
$B;XDj$G$-$k$b$N$NBgB??t$K$D$$$F$O!"<!2s$b$&>/$7>\$7$/@bL@$7$^$9!#(B
$B$3$3$G$O!"(BSSI $B$G9T$J$&$3$H$,$G$-$kNc$r$$$/$D$+<($7$^$9!#(B</p>
<p>element はたくさんあるものから一つ指定することができます。
指定できるものの大多数については、次回もう少し詳しく説明します。
ここでは、SSI で行なうことができる例をいくつか示します。</p>
<section id="todaysdate"><title>$B:#F|$NF|IU(B</title>
<section id="todaysdate"><title>今日の日付</title>
<example>
&lt;!--#echo var="DATE_LOCAL" --&gt;
</example>
<p><code>echo</code> $BMWAG$OC1$KJQ?t$NCM$r=PNO$7$^$9!#(B
CGI $B%W%m%0%i%`$KMxMQ2DG=$J4D6-JQ?t$NA4$F$N(B
$B%;%C%H$r4^$`B?$/$NI8=`JQ?t$,$"$j$^$9!#$^$?!"(B<code>set</code>
$BMWAG$rMQ$$$k$3$H$G!"FH<+$NJQ?t$rDj5A$9$k$3$H$,$G$-$^$9!#(B
<p><code>echo</code> 要素は単に変数の値を出力します。
CGI プログラムに利用可能な環境変数の全ての
セットを含む多くの標準変数があります。また、<code>set</code>
要素を用いることで、独自の変数を定義することができます。
</p>
<p>$B=PNO$5$l$kF|IU$N=q<0$,9%$-$G$O$J$$>l9g!"$=$N=q<0$r=$@5$9$k$?$a$K!"(B
<code>config</code> $BMWAG$K(B <code>timefmt</code>
$BB0@-$r;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
<p>出力される日付の書式が好きではない場合、その書式を修正するために、
<code>config</code> 要素に <code>timefmt</code>
属性を使用することができます。</p>
<example>
&lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
@@ -197,21 +197,21 @@
</example>
</section>
<section id="lastmodified"><title>$B%U%!%$%k$NJQ99F|(B</title>
<section id="lastmodified"><title>ファイルの変更日</title>
<example>
This document last modified &lt;!--#flastmod file="index.html" --&gt;
</example>
<p>$B$3$NMWAG$b(B <code>timefmt</code>
$B%U%)!<%^%C%H$N@_Dj$K=>$$$^$9!#(B</p>
<p>この要素も <code>timefmt</code>
フォーマットの設定に従います。</p>
</section>
<section id="cgi"><title>CGI $B%W%m%0%i%`$N7k2L$r<h$j9~$`(B</title>
<section id="cgi"><title>CGI プログラムの結果を取り込む</title>
<p>$B$3$l$O!"A4$F$N?M$N$*5$$KF~$j$G$"$k(B ``$B%R%C%H%+%&%s%?(B'' $B$N$h$&$J(B
CGI $B%W%m%0%i%`$N7k2L$r=PNO$9$k(B SSI
$B$N$h$j0lHLE*$J;HMQ$N$&$A$N0l$D$G$9!#(B</p>
<p>これは、全ての人のお気に入りである ``ヒットカウンタ'' のような
CGI プログラムの結果を出力する SSI
のより一般的な使用のうちの一つです。</p>
<example>
&lt;!--#include virtual="/cgi-bin/counter.pl" --&gt;
@@ -221,187 +221,187 @@
</section>
<section id="additionalexamples">
<title>$BDI2C$NNc(B</title>
<title>追加の例</title>
<p>$B0J2<$O!"(BSSI $B$r;HMQ$7$F(B HTML
$B%I%-%e%a%s%H$K$*$$$F$G$-$k$3$H$N$$$/$D$+$NFCJL$JNc$G$9!#(B</p>
<p>以下は、SSI を使用して HTML
ドキュメントにおいてできることのいくつかの特別な例です。</p>
<section id="docmodified"><title>$B$$$D$3$N%I%-%e%a%s%H$O=$@5$5$l$?$N$+(B
<section id="docmodified"><title>いつこのドキュメントは修正されたのか
?</title>
<p>$B@h$K!"%I%-%e%a%s%H$,:G8e$KJQ99$5$l$?$N$O$$$D$+$r(B
$B%f!<%6$KDLCN$9$k$?$a$K(B SSI $B$r;HMQ$9$k$3$H$,$G$-$k$3$H$r=R$Y$^$7$?!#(B
$B$7$+$7$J$,$i!"<B:]$NJ}K!$O!"$$$/$V$sLdBj$N$^$^$K$7$F$*$-$^$7$?!#(B
HTML $B%I%-%e%a%s%H$KG[CV$5$l$?<!$N%3!<%I$O!"%Z!<%8$K$=$N$h$&$J(B
$B%?%$%`%9%?%s%W$rF~$l$k$G$7$g$&!#$b$A$m$s!">e=R$N$h$&$K!"(B
SSI $B$r@5$7$/F0:n2DG=$K$7$F$*$/I,MW$,$"$j$^$9!#(B</p>
<p>先に、ドキュメントが最後に変更されたのはいつかを
ユーザに通知するために SSI を使用することができることを述べました。
しかしながら、実際の方法は、いくぶん問題のままにしておきました。
HTML ドキュメントに配置された次のコードは、ページにそのような
タイムスタンプを入れるでしょう。もちろん、上述のように、
SSI を正しく動作可能にしておく必要があります。</p>
<example>
&lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
This file last modified &lt;!--#flastmod file="ssi.shtml" --&gt;
</example>
<p>$B$b$A$m$s!"(B<code>ssi.shtml</code>
$B$NItJ,$r<B:]$NEv3:%U%!%$%kL>$HCV$-49$($kI,MW$,$"$j$^$9!#(B
$B$b$7!"$"$i$f$k%U%!%$%k$KD%$k$3$H$,$G$-$k0lHLE*$J%3!<%I$rC5$7$F$$$k$J$i!"(B
$B$3$l$OITJX$G$"$k$+$b$7$l$^$;$s!#$*$=$i$/$=$N>l9g$O!"(B
$B$=$&$9$kBe$o$j$KJQ?t(B <code>LAST_MODIFIED</code>
$B$r;HMQ$7$?$$$H9M$($k$G$7$g$&(B:</p>
<p>もちろん、<code>ssi.shtml</code>
の部分を実際の当該ファイル名と置き換える必要があります。
もし、あらゆるファイルに張ることができる一般的なコードを探しているなら、
これは不便であるかもしれません。おそらくその場合は、
そうする代わりに変数 <code>LAST_MODIFIED</code>
を使用したいと考えるでしょう:</p>
<example>
&lt;!--#config timefmt="%D" --&gt;<br />
This file last modified &lt;!--#echo var="LAST_MODIFIED" --&gt;
</example>
<p><code>timefmt</code>
$B=q<0$K$D$$$F$N$h$j>\:Y$K$D$$$F$O!"$*9%$_$N8!:w%5%$%H$K9T$-!"(B
<code>strftime</code> $B$G8!:w$7$F$_$F$/$@$5$$!#J8K!$OF1$8$G$9!#(B</p>
書式についてのより詳細については、お好みの検索サイトに行き、
<code>strftime</code> で検索してみてください。文法は同じです。</p>
</section>
<section id="standard-footer">
<title>$BI8=`$N%U%C%?$rA^F~$9$k(B</title>
<title>標準のフッタを挿入する</title>
<p>$B$b$7?t%Z!<%8$rD6$($k%Z!<%8$r;}$D%5%$%H$r4IM}$7$F$$$k$J$i$P!"(B
$BA4%Z!<%8$KBP$7$FJQ9`$r9T$J$&$3$H$,K\Ev$K6lDK$H$J$jF@$k$3$H$,(B
$BJ,$+$k$G$7$g$&!#A4$F$N%Z!<%8$KEO$C$F$"$k<o$NI8=`E*$J304Q$r(B
$B0];}$7$h$&$H$7$F$$$k$J$i$PFC$K$=$&$G$7$g$&!#(B</p>
<p>もし数ページを超えるページを持つサイトを管理しているならば、
全ページに対して変項を行なうことが本当に苦痛となり得ることが
分かるでしょう。全てのページに渡ってある種の標準的な外観を
維持しようとしているならば特にそうでしょう。</p>
<p>$B%X%C%@$d%U%C%?MQ$NA^F~MQ%U%!%$%k$r;HMQ$9$k$3$H$G!"(B
$B$3$N$h$&$J99?7$K$+$+$kIiC4$r8:$i$9$3$H$,$G$-$^$9!#(B
$B0l$D$N%U%C%?%U%!%$%k$r:n@.$7!"$=$l$r(B <code>include</code>
SSI $B%3%^%s%I$G3F%Z!<%8$KF~$l$k$@$1$G:Q$_$^$9!#(B<code>include</code>
$BMWAG$O!"(B<code>file</code> $BB0@-$^$?$O(B <code>virtual</code>
$BB0@-$N$$$:$l$+$r;HMQ$7$F$I$N%U%!%$%k$rA^F~$9$k$+$r7h$a$k$3$H$,$G$-$^$9!#(B
<code>file</code> $BB0@-$O!"(B<em>$B%+%l%s%H%G%#%l%/%H%j$+$i$NAjBP%Q%9$G<($5$l$?(B
</em>$B%U%!%$%k%Q%9$G$9!#(B
$B$=$l$O(B / $B$G;O$^$k@dBP%U%!%$%k%Q%9$K$O$G$-$:!"$^$?!"$=$N%Q%9$N0lIt$K(B ../
$B$r4^$`$3$H$,$G$-$J$$$3$H$r0UL#$7$^$9!#(B<code>virtual</code>
$BB0@-$O!"$*$=$i$/$h$jJXMx$@$H;W$$$^$9$,!"Ds6!$9$k%I%-%e%a%s%H$+$i$NAjBP(B
URL $B$G;XDj$9$Y$-$G$9!#$=$l$O(B / $B$G;O$a$k$3$H$,$G$-$^$9$,!"(B
$BDs6!$9$k%U%!%$%k$HF1$8%5!<%P>e$KB8:_$7$J$/$F$O$J$j$^$;$s!#(B</p>
<p>ヘッダやフッタ用の挿入用ファイルを使用することで、
このような更新にかかる負担を減らすことができます。
一つのフッタファイルを作成し、それを <code>include</code>
SSI コマンドで各ページに入れるだけで済みます。<code>include</code>
要素は、<code>file</code> 属性または <code>virtual</code>
属性のいずれかを使用してどのファイルを挿入するかを決めることができます。
<code>file</code> 属性は、<em>カレントディレクトリからの相対パスで示された
</em>ファイルパスです。
それは / で始まる絶対ファイルパスにはできず、また、そのパスの一部に ../
を含むことができないことを意味します。<code>virtual</code>
属性は、おそらくより便利だと思いますが、提供するドキュメントからの相対
URL で指定すべきです。それは / で始めることができますが、
提供するファイルと同じサーバ上に存在しなくてはなりません。</p>
<example>
&lt;!--#include virtual="/footer.html" --&gt;
</example>
<p>$B;d$O:G8e$NFs$D$rAH$_9g$o$;$F!"(B<code>LAST_MODIFIED</code>
$B%G%#%l%/%F%#%V$r%U%C%?%U%!%$%k$NCf$KCV$/$3$H$,$h$/$"$j$^$9!#(B
SSI $B%G%#%l%/%F%#%V$O!"A^F~MQ$N%U%!%$%k$K4^$^$;$?$j!"(B
$BA^F~%U%!%$%k$N%M%9%H$r$7$?$j$9$k$3$H$,$G$-$^$9!#$9$J$o$A!"(B
$BA^F~MQ$N%U%!%$%k$OB>$N%U%!%$%k$r:F5"E*$KA^F~$9$k$3$H$,$G$-$^$9!#(B</p>
<p>私は最後の二つを組み合わせて、<code>LAST_MODIFIED</code>
ディレクティブをフッタファイルの中に置くことがよくあります。
SSI ディレクティブは、挿入用のファイルに含ませたり、
挿入ファイルのネストをしたりすることができます。すなわち、
挿入用のファイルは他のファイルを再帰的に挿入することができます。</p>
</section>
</section>
<section id="config">
<title>$BB>$K2?$,@_Dj$G$-$k$N$+(B ?</title>
<title>他に何が設定できるのか ?</title>
<p>$B;~9o=q<0$r(B <code>config</code> $B$G@_Dj$G$-$k$3$H$K2C$($F!"(B
$B99$KFs$D(B <code>config</code> $B$G@_Dj$9$k$3$H$,$G$-$^$9!#(B</p>
<p>時刻書式を <code>config</code> で設定できることに加えて、
更に二つ <code>config</code> で設定することができます。</p>
<p>$BDL>o!"(BSSI $B%G%#%l%/%F%#%V$G2?$+$,$&$^$/$$$+$J$$$H$-$O!"(B
$B<!$N%a%C%;!<%8$,=PNO$5$l$^$9!#(B</p>
<p>通常、SSI ディレクティブで何かがうまくいかないときは、
次のメッセージが出力されます。</p>
<example>
[an error occurred while processing this directive]
</example>
<p>$B$3$N%a%C%;!<%8$rB>$N$b$N$K$7$?$$>l9g!"(B<code>config</code>
$BMWAG$N(B <code>errmsg</code> $BB0@-$GJQ99$9$k$3$H$,$G$-$^$9(B:</p>
<p>このメッセージを他のものにしたい場合、<code>config</code>
要素の <code>errmsg</code> 属性で変更することができます:</p>
<example>
&lt;!--#config errmsg="[It appears that you don't know how to use SSI]" --&gt;
</example>
<p>$B$*$=$i$/!"%(%s%I%f!<%6$O$3$N%a%C%;!<%8$r7h$7$F8+$k$3$H$O$"$j$^$;$s!#(B
$B$J$<$J$i!"$=$N%5%$%H$,@8$-$?>uBV$K$J$kA0$K(B SSI $B%G%#%l%/%F%#%V$K4X$9$k(B
$BA4$F$NLdBj$r2r7h$7$F$$$k$O$:$@$+$i$G$9!#(B($B$=$&$G$9$h$M(B?)</p>
<p>おそらく、エンドユーザはこのメッセージを決して見ることはありません。
なぜなら、そのサイトが生きた状態になる前に SSI ディレクティブに関する
全ての問題を解決しているはずだからです。(そうですよね?)</p>
<p>$B$=$7$F!"(B<code>config</code> $B$K$*$$$F(B <code>sizefmt</code>
$BB0@-$r;HMQ$9$k$3$H$G!"(B
$BJV$5$l$k%U%!%$%k%5%$%:$N=q<0$r@_Dj$9$k$3$H$,$G$-$^$9!#(B
$B%P%$%H?t$K$O(B <code>bytes</code> $B$r!"E,Ev$K(B Kb $B$d(B Mb
$B$KC;=L$5$;$k$K$O(B <code>abbrev</code> $B$r;XDj$9$k$3$H$,$G$-$^$9!#(B</p>
<p>そして、<code>config</code> において <code>sizefmt</code>
属性を使用することで、
返されるファイルサイズの書式を設定することができます。
バイト数には <code>bytes</code> を、適当に Kb や Mb
に短縮させるには <code>abbrev</code> を指定することができます。</p>
</section>
<section id="exec">
<title>$B%3%^%s%I$N<B9T(B</title>
<title>コマンドの実行</title>
<p>$B:#8e?t%v7n$N$&$A$K!">.$5$J(B CGI $B%W%m%0%i%`$H(B SSI
$B$r;HMQ$9$k5-;v$r=P$7$?$$$H9M$($F$$$^$9!#$3$3$G$O$=$l$H$OJL$K!"(B
<code>exec</code> $BMWAG$K$h$C$F9T$J$&$3$H$,$G$-$k$3$H$r<($7$^$9!#(B
SSI $B$K%7%'%k(B ($B@53N$K$O(B <code>/bin/sh</code>$B!#(BWin32 $B$J$i$P(B DOS $B%7%'%k(B)
$B$r;HMQ$7$F%3%^%s%I$r<B9T$5$;$k$3$H$,$G$-$^$9!#(B
$B2<5-$NNc$G$O!"%G%#%l%/%H%j%j%9%H=PNO$r9T$J$$$^$9!#(B</p>
<p>今後数ヶ月のうちに、小さな CGI プログラムと SSI
を使用する記事を出したいと考えています。ここではそれとは別に、
<code>exec</code> 要素によって行なうことができることを示します。
SSI にシェル (正確には <code>/bin/sh</code>。Win32 ならば DOS シェル)
を使用してコマンドを実行させることができます。
下記の例では、ディレクトリリスト出力を行ないます。</p>
<example>
&lt;pre&gt;<br />
&lt;!--#exec cmd="ls" --&gt;<br />
&lt;/pre&gt;
</example>
<p>Windows $B>e$G$O!"(B</p>
<p>Windows 上では、</p>
<example>
&lt;pre&gt;<br />
&lt;!--#exec cmd="dir" --&gt;<br />
&lt;/pre&gt;
</example>
<p>Windows $B>e$G$O!"$3$N%G%#%l%/%F%#%V$K$h$C$F$$$/$D$+$N4qL/$J(B
$B=q<0$K5$$E$/$G$7$g$&!#$J$<$J$i(B <code>dir</code> $B$N=PNO$,J8;zNs(B
``&lt;<code>dir</code>&gt;'' $B$r4^$_!"%V%i%&%6$r:.Mp$5$;$k$+$i$G$9!#(B</p>
<p>Windows 上では、このディレクティブによっていくつかの奇妙な
書式に気づくでしょう。なぜなら <code>dir</code> の出力が文字列
``&lt;<code>dir</code>&gt;'' を含み、ブラウザを混乱させるからです。</p>
<p>$B$3$N5!G=$OHs>o$K4m81$G$"$j!"$I$s$J%3!<%I$G$b(B <code>exec</code>
$B%?%0$KKd$a9~$^$l$F$7$^$($P<B9T$9$k$3$H$KCm0U$7$F$/$@$5$$!#Nc$($P(B
`` $B%2%9%H%V%C%/(B '' $B$N$h$&$K!"$b$7!"(B
$B%f!<%6$,%Z!<%8$NFbMF$rJT=8$G$-$k>u67$K$"$k$J$i$P!"(B
$B$3$N5!G=$r3N<B$KM^@)$7$F$/$@$5$$!#(B<code>Options</code>
$B%G%#%l%/%F%#%V$N(B <code>IncludesNOEXEC</code> $B0z?t$r;XDj$9$k$3$H$G!"(B
SSI $B$O5v2D$9$k$1$l$I(B <code>exec</code>
$B5!G=$O5v2D$7$J$$$h$&$K$9$k$3$H$,$G$-$^$9!#(B</p>
<p>この機能は非常に危険であり、どんなコードでも <code>exec</code>
タグに埋め込まれてしまえば実行することに注意してください。例えば
`` ゲストブック '' のように、もし、
ユーザがページの内容を編集できる状況にあるならば、
この機能を確実に抑制してください。<code>Options</code>
ディレクティブの <code>IncludesNOEXEC</code> 引数を指定することで、
SSI は許可するけれど <code>exec</code>
機能は許可しないようにすることができます。</p>
</section>
<section id="advanced">
<title>$B9bEY$J(B SSI $B%F%/%K%C%/(B</title>
<title>高度な SSI テクニック</title>
<p>$B%3%s%F%s%D$r=PNO$9$k$3$H$K2C$(!"(BApache SSI $B$OJQ?t$r@_Dj$7!"(B
$B$=$7$FHf3S$H>r7oJ,4t$K$=$NJQ?t$r;HMQ$G$-$k5!G=$rDs6!$7$F$$$^$9!#(B
<p>コンテンツを出力することに加え、Apache SSI は変数を設定し、
そして比較と条件分岐にその変数を使用できる機能を提供しています。
</p>
<section id="caveat"><title>$B7Y9p(B</title>
<section id="caveat"><title>警告</title>
<p>$B$3$N5-;v$G=R$Y$?BgItJ,$N5!G=$O!"(BApache 1.2
$B0J9_$r;HMQ$7$F$$$k>l9g$N$_MxMQ2DG=$G$9!#$b$A$m$s!"$b$7(B Apache 1.2
$B0J9_$r;HMQ$7$F$J$$>l9g!"D>$A$K%"%C%W%0%l!<%I$9$kI,MW$,$"$j$^$9!#(B
$B$5$!!":#$=$l$r9T$J$$$J$5$$!#$=$l$^$GBT$C$F$$$^$9!#(B</p>
<p>この記事で述べた大部分の機能は、Apache 1.2
以降を使用している場合のみ利用可能です。もちろん、もし Apache 1.2
以降を使用してない場合、直ちにアップグレードする必要があります。
さぁ、今それを行ないなさい。それまで待っています。</p>
</section>
<section id="variables"><title>$BJQ?t$r@_Dj$9$k(B</title>
<section id="variables"><title>変数を設定する</title>
<p><code>set</code> $B%G%#%l%/%F%#%V$r;HMQ$7$F!"(B
$B8e$G;HMQ$9$k$?$a$KJQ?t$r@_Dj$9$k$3$H$,$G$-$^$9!#(B
$B$3$l$O8e$N@bL@$GI,MW$K$J$k$N$G!"$3$3$G$=$l$K$D$$$F=R$Y$F$$$^$9!#(B
$BJ8K!$O0J2<$N$H$*$j$G$9(B:</p>
<p><code>set</code> ディレクティブを使用して、
後で使用するために変数を設定することができます。
これは後の説明で必要になるので、ここでそれについて述べています。
文法は以下のとおりです:</p>
<example>
&lt;!--#set var="name" value="Rich" --&gt;
</example>
<p>$B$3$N$h$&$KC1=c$KJ8;z$I$*$j$K@_Dj$9$k$3$H$K2C$(!"(B
<a href="../env.html">$B4D6-JQ?t(B</a>$B$d>e5-$NJQ?t(B
($BNc$($P(B <code>LAST_MODIFIED</code> $B$N$h$&$J(B)
$B$r4^$`B>$N$"$i$f$kJQ?t$rCM$r@_Dj$9$k$N$K;HMQ$9$k$3$H$,$G$-$^$9!#(B
$BJQ?tL>$NA0$K%I%k5-9f(B ($) $B$r;HMQ$9$k$3$H$G!"(B
$B$=$l$,%j%F%i%kJ8;zNs$G$O$J$/$FJQ?t$G$"$k$3$H$r<($7$^$9!#(B</p>
<p>このように単純に文字どおりに設定することに加え、
<a href="../env.html">環境変数</a>や上記の変数
(例えば <code>LAST_MODIFIED</code> のような)
を含む他のあらゆる変数を値を設定するのに使用することができます。
変数名の前にドル記号 ($) を使用することで、
それがリテラル文字列ではなくて変数であることを示します。</p>
<example>
&lt;!--#set var="modified" value="$LAST_MODIFIED" --&gt;
</example>
<p>$B%I%k5-9f(B ($) $B$rJ8;z$H$7$FJQ?t$NCM$KF~$l$k$K$O!"(B
$B%P%C%/%9%i%C%7%e$K$h$C$F%I%k5-9f$r%(%9%1!<%W$9$kI,MW$,$"$j$^$9!#(B</p>
<p>ドル記号 ($) を文字として変数の値に入れるには、
バックスラッシュによってドル記号をエスケープする必要があります。</p>
<example>
&lt;!--#set var="cost" value="\$100" --&gt;
</example>
<p>$B:G8e$K$J$j$^$9$,!"D9$$J8;zNs$NCf$KJQ?t$rCV$-$?$$>l9g$G!"(B
$BJQ?tL>$,B>$NJ8;z$H$V$D$+$k2DG=@-$,$"$j!"(B
$B$=$l$i$NJ8;z$K$D$$$F:.Mp$7$F$7$^$&>l9g!"$3$N:.Mp$r<h$j=|$/$?$a!"(B
$BJQ?tL>$rCf3g8L$G0O$`$3$H$,$G$-$^$9(B
($B$3$l$K$D$$$F$NNI$$Nc$r<($9$N$OFq$7$$$N$G$9$,!"(B
$B$*$=$i$/J,$+$C$F$$$?$@$1$k$G$7$g$&(B)$B!#(B
<p>最後になりますが、長い文字列の中に変数を置きたい場合で、
変数名が他の文字とぶつかる可能性があり、
それらの文字について混乱してしまう場合、この混乱を取り除くため、
変数名を中括弧で囲むことができます
(これについての良い例を示すのは難しいのですが、
おそらく分かっていただけるでしょう)。
</p>
<example>
&lt;!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --&gt;
@@ -409,18 +409,18 @@
</section>
<section id="conditional">
<title>$B>r7o<0(B</title>
<title>条件式</title>
<p>$B$5$F!"JQ?t$r;}$C$F$$$F!"(B
$B$=$l$i$NCM$r@_Dj$7$FHf3S$9$k$3$H$,$G$-$k$N$G$9$+$i!"(B
$B>r7o$rI=$9$?$a$K$=$l$i$r;HMQ$9$k$3$H$,$G$-$^$9!#$3$l$K$h$j(B
SSI $B$O$"$k<o$N>.$5$J%W%m%0%i%_%s%08@8l$K$J$C$F$$$^$9!#(B
<module>mod_include</module> $B$O>r7o$rI=8=$9$k$?$a$K(B <code>if</code>,
<p>さて、変数を持っていて、
それらの値を設定して比較することができるのですから、
条件を表すためにそれらを使用することができます。これにより
SSI はある種の小さなプログラミング言語になっています。
<module>mod_include</module> は条件を表現するために <code>if</code>,
<code>elif</code>, <code>else</code>, <code>endif</code>
$B9=B$$rDs6!$7$F$$$^$9!#$3$l$K$h$C$F!"(B
$B0l$D$N<B:]$N%Z!<%8$+$iJ#?t$NO@M}%Z!<%8$r8z2LE*$K@8@.$9$k$3$H$,$G$-$^$9!#(B</p>
構造を提供しています。これによって、
一つの実際のページから複数の論理ページを効果的に生成することができます。</p>
<p>$B>r7o9=B$$O0J2<$N$H$*$j$G$9(B:</p>
<p>条件構造は以下のとおりです:</p>
<example>
&lt;!--#if expr="test_condition" --&gt;<br />
&lt;!--#elif expr="test_condition" --&gt;<br />
@@ -429,24 +429,24 @@
</example>
<p><em>test_condition</em>
$B$O$"$i$f$k<oN`$NO@M}E*Hf3S$r$9$k$3$H$,$G$-$^$9!#(B
$BCM$rHf3S$7$?$j!"$=$NCM$,(B ``$B??(B'' $B$+$I$&$+$rI>2A$7$^$9(B
($B6u$G$J$$$J$iM?$($i$l$?J8;zNs$O??$G$9(B)$B!#(B
$BMxMQ2DG=$JHf3S1i;;;R$NA4$F$N%j%9%H$K$D$$$F$O!"(B
<module>mod_include</module> $B%I%-%e%a%s%F!<%7%g%s$r;2>H$7$F$/$@$5$$!#(B
$B$3$3$G$O!"$3$N9=B$$r$I$&;HMQ$9$k$+$NNc$r$$$/$D$+<($7$^$9!#(B</p>
はあらゆる種類の論理的比較をすることができます。
値を比較したり、その値が ``真'' かどうかを評価します
(空でないなら与えられた文字列は真です)。
利用可能な比較演算子の全てのリストについては、
<module>mod_include</module> ドキュメンテーションを参照してください。
ここでは、この構造をどう使用するかの例をいくつか示します。</p>
<p>$B@_Dj%U%!%$%k$G<!$N9T$r5-=R$7$^$9(B:</p>
<p>設定ファイルで次の行を記述します:</p>
<example>
BrowserMatchNoCase macintosh Mac<br />
BrowserMatchNoCase MSIE InternetExplorer
</example>
<p>$B$3$l$O%/%i%$%"%s%H$,(B Macintosh
$B>e$G%$%s%?!<%M%C%H%(%/%9%W%m!<%i$,F0$$$F$$$k>l9g!"4D6-JQ?t(B
``Mac'' $B$H(B ``InternetExplorer'' $B$r??$H@_Dj$7$^$9!#(B</p>
<p>これはクライアントが Macintosh
上でインターネットエクスプローラが動いている場合、環境変数
``Mac'' ``InternetExplorer'' を真と設定します。</p>
<p>$B<!$K!"(BSSI $B$,2DG=$K$J$C$?%I%-%e%a%s%H$G0J2<$r9T$J$$$^$9(B:
<p>次に、SSI が可能になったドキュメントで以下を行ないます:
</p>
<example>
&lt;!--#if expr="${Mac} &amp;&amp; ${InternetExplorer}" --&gt;<br />
@@ -456,26 +456,26 @@
&lt;!--#endif --&gt;
</example>
<p>Mac $B>e$N(B IE $B$KBP$7$F2?$+;W$&$H$3$m$,$"$k$o$1$G$"$j$^$;$s!#(B
$BB>$G$O<B9T$G$-$F$$$k$$$/$D$+$N(B JavaScript $B$r(B Mac $B>e$N(B IE
$B$G<B9T$5$;$k$N$K!"@h=5?t;~4V6lO+$7$?$H$$$&$@$1$N$3$H$G$9!#(B
$B>e$NNc$O$=$N;CDjE*$JBP=hJ}K!$G$9!#(B</p>
<p>Mac 上の IE に対して何か思うところがあるわけでありません。
他では実行できているいくつかの JavaScript を Mac 上の IE
で実行させるのに、先週数時間苦労したというだけのことです。
上の例はその暫定的な対処方法です。</p>
<p>$BB>$N$I$s$JJQ?t(B ($B$"$J$?$,Dj5A$9$k$b$N!"(B
$B$^$?$OIaDL$N4D6-JQ?t$N$$$:$l$+(B) $B$b!">r7oJ8$K;HMQ$9$k$3$H$,$G$-$^$9!#(B
Apache $B$O(B <code>SetEnvIf</code> $B%G%#%l%/%F%#%V$dB>$N4XO"(B
$B%G%#%l%/%F%#%V$r;HMQ$7$F4D6-JQ?t$r@_Dj$9$k$3$H$,$G$-$^$9!#(B
$B$3$N5!G=$K$h$j!"(BCGI
$B$KMj$k$3$H$J$/$+$J$jJ#;($JF0E*$J$3$H$r$5$;$k$3$H$,$G$-$^$9!#(B</p>
<p>他のどんな変数 (あなたが定義するもの、
または普通の環境変数のいずれか) も、条件文に使用することができます。
Apache <code>SetEnvIf</code> ディレクティブや他の関連
ディレクティブを使用して環境変数を設定することができます。
この機能により、CGI
に頼ることなくかなり複雑な動的なことをさせることができます。</p>
</section>
</section>
<section id="conclusion"><title>$B=*$o$j$K(B</title>
<section id="conclusion"><title>終わりに</title>
<p>SSI $B$O3N$+$K(B CGI
$B$dF0E*$J%&%'%V%Z!<%8$r@8@.$9$kB>$N5;=Q$KBe$o$k$b$N$G$O$"$j$^$;$s!#(B
$B$7$+$7!"$?$/$5$s$NM>J,$J:n6H$r$;$:$K!"(B
$B>/NL$NF0E*$J%3%s%F%s%D$r2C$($k$K$O$9$0$l$?J}K!$G$9!#(B</p>
<p>SSI は確かに CGI
や動的なウェブページを生成する他の技術に代わるものではありません。
しかし、たくさんの余分な作業をせずに、
少量の動的なコンテンツを加えるにはすぐれた方法です。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE indexpage SYSTEM "./style/sitemap.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 420993:636028 (outdated) -->
@@ -23,71 +23,71 @@
<indexpage metafile="index.xml.meta">
<parentdocument href="http://httpd.apache.org/docs-project/" />
<title>Apache HTTP $B%5!<%P(B $B%P!<%8%g%s(B &httpd.major;.&httpd.minor;
$B%I%-%e%a%s%H(B</title>
<title>Apache HTTP サーバ バージョン &httpd.major;.&httpd.minor;
ドキュメント</title>
<category id="release"><title>$B%j%j!<%9%N!<%H(B</title>
<page href="new_features_2_4.html">Apache 2.3/2.4 $B$N?75!G=(B</page>
<page href="new_features_2_2.html">Apache 2.1/2.2 $B$N?75!G=(B</page>
<page href="new_features_2_0.html">Apache 2.0 $B$N?75!G=(B</page>
<page href="upgrading.html">2.2 $B$+$i(B 2.4 $B$X$N%"%C%W%0%l!<%I(B</page>
<page href="license.html">Apache $B%i%$%;%s%9(B</page>
<category id="release"><title>リリースノート</title>
<page href="new_features_2_4.html">Apache 2.3/2.4 の新機能</page>
<page href="new_features_2_2.html">Apache 2.1/2.2 の新機能</page>
<page href="new_features_2_0.html">Apache 2.0 の新機能</page>
<page href="upgrading.html">2.2 から 2.4 へのアップグレード</page>
<page href="license.html">Apache ライセンス</page>
</category>
<category id="manual"><title>$B%j%U%!%l%s%9%^%K%e%"%k(B</title>
<page href="install.html">$B%3%s%Q%$%k$H%$%s%9%H!<%k(B</page>
<page href="invoking.html">$B5/F0(B</page>
<page href="stopping.html">$B=*N;$H:F5/F0(B</page>
<page href="mod/directives.html">$B<B9T$N@_DjMQ%G%#%l%/%F%#%V(B</page>
<page href="mod/quickreference.html">$B%G%#%l%/%F%#%V(B $B%/%$%C%/%j%U%!%l%s%9(B</page>
<page href="mod/">$B%b%8%e!<%k(B</page>
<page href="mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)</page>
<page href="filter.html">$B%U%#%k%?(B</page>
<page href="handler.html">$B%O%s%I%i(B</page>
<page href="programs/">$B%5!<%P$H%5%]!<%H%W%m%0%i%`(B</page>
<page href="glossary.html">$BMQ8l=8(B</page>
<category id="manual"><title>リファレンスマニュアル</title>
<page href="install.html">コンパイルとインストール</page>
<page href="invoking.html">起動</page>
<page href="stopping.html">終了と再起動</page>
<page href="mod/directives.html">実行の設定用ディレクティブ</page>
<page href="mod/quickreference.html">ディレクティブ クイックリファレンス</page>
<page href="mod/">モジュール</page>
<page href="mpm.html">マルチプロセッシングモジュール (MPM)</page>
<page href="filter.html">フィルタ</page>
<page href="handler.html">ハンドラ</page>
<page href="programs/">サーバとサポートプログラム</page>
<page href="glossary.html">用語集</page>
</category>
<category id="usersguide"><title>$B%f!<%6$N<j0z(B</title>
<page href="bind.html">$B%"%I%l%9$H%]!<%H$N%P%$%s%I(B</page>
<page href="configuring.html">$B@_Dj%U%!%$%k(B</page>
<page href="sections.html">$B%;%/%7%g%s$N@_Dj(B</page>
<page href="caching.html">$B%-%c%C%7%e5!G=(B</page>
<page href="content-negotiation.html">$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</page>
<page href="dso.html">$BF0E*6&M-%*%V%8%'%/%H(B (DSO)</page>
<page href="env.html">$B4D6-JQ?t(B</page>
<page href="logs.html">$B%m%0%U%!%$%k(B</page>
<page href="urlmapping.html">URL $B$r%U%!%$%k%7%9%F%`$K%^%C%W$9$k(B</page>
<page href="misc/perf-tuning.html">$B@-G=$K4X$9$kD4@0(B</page>
<page href="misc/security_tips.html">$B%;%-%e%j%F%#>pJs(B</page>
<page href="server-wide.html">$B%5!<%PA4BN$N@_Dj(B</page>
<page href="ssl/">SSL/TLS $B$K$h$k0E9f2=(B</page>
<page href="suexec.html">CGI $B$N(B Suexec $B<B9T(B</page>
<page href="rewrite/">URL Rewriting $B$N<j0z$-(B</page>
<page href="vhosts/">$B%P!<%A%c%k%[%9%H(B</page>
<category id="usersguide"><title>ユーザの手引</title>
<page href="bind.html">アドレスとポートのバインド</page>
<page href="configuring.html">設定ファイル</page>
<page href="sections.html">セクションの設定</page>
<page href="caching.html">キャッシュ機能</page>
<page href="content-negotiation.html">コンテントネゴシエーション</page>
<page href="dso.html">動的共有オブジェクト (DSO)</page>
<page href="env.html">環境変数</page>
<page href="logs.html">ログファイル</page>
<page href="urlmapping.html">URL をファイルシステムにマップする</page>
<page href="misc/perf-tuning.html">性能に関する調整</page>
<page href="misc/security_tips.html">セキュリティ情報</page>
<page href="server-wide.html">サーバ全体の設定</page>
<page href="ssl/">SSL/TLS による暗号化</page>
<page href="suexec.html">CGI の Suexec 実行</page>
<page href="rewrite/">URL Rewriting の手引き</page>
<page href="vhosts/">バーチャルホスト</page>
</category>
<category id="howto"><title>How-To / $B%A%e!<%H%j%"%k(B</title>
<page href="howto/auth.html">$BG'>Z!">5G'!"%"%/%;%9@)8f(B
<category id="howto"><title>How-To / チュートリアル</title>
<page href="howto/auth.html">認証、承認、アクセス制御
</page>
<page href="howto/cgi.html">CGI: $BF0E*%3%s%F%s%D(B</page>
<page href="howto/htaccess.html">.htaccess $B%U%!%$%k(B</page>
<page href="howto/cgi.html">CGI: 動的コンテンツ</page>
<page href="howto/htaccess.html">.htaccess ファイル</page>
<page href="howto/ssi.html">Server Side Includes (SSI)</page>
<page href="howto/public_html.html">$B%f!<%6@lMQ%G%#%l%/%H%j(B
<page href="howto/public_html.html">ユーザ専用ディレクトリ
(public_html)</page>
</category>
<category id="platform"><title>$B%W%i%C%H%U%)!<%`8GM-$N>pJs(B</title>
<category id="platform"><title>プラットフォーム固有の情報</title>
<page href="platform/windows.html">Microsoft Windows</page>
<page href="platform/netware.html">Novell NetWare</page>
<page href="platform/ebcdic.html">EBCDIC $BHG(B</page>
<page href="platform/ebcdic.html">EBCDIC </page>
</category>
<category id="other"><title>$B$=$NB>(B</title>
<page href="faq/">$B$h$/$"$k<ALd(B (FAQ)</page>
<page href="sitemap.html">$B%5%$%H%^%C%W(B</page>
<page href="developer/">$B3+H/<T$N$?$a$N%I%-%e%a%s%H(B</page>
<page href="misc/">$B$=$NB>(B</page>
<category id="other"><title>その他</title>
<page href="faq/">よくある質問 (FAQ)</page>
<page href="sitemap.html">サイトマップ</page>
<page href="developer/">開発者のためのドキュメント</page>
<page href="misc/">その他</page>
</category>
</indexpage>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 395228:527129 (outdated) -->
@@ -22,45 +22,45 @@
<manualpage metafile="install.xml.meta">
<title>$B%3%s%Q%$%k$H%$%s%9%H!<%k(B</title>
<title>コンパイルとインストール</title>
<summary>
<p>$B$3$NJ8=q$G07$&HO0O$O!"(BUnix $B$d(B Unix $B$KN`;w$7$?%7%9%F%`$G$N(B
Apache $B$N%3%s%Q%$%k$H%$%s%9%H!<%k$G$9!#(B Windows $B$K$*$1$k(B
$B%3%s%Q%$%k$H%$%s%9%H!<%k$K4X$7$F$O!V(B<a
<p>この文書で扱う範囲は、Unix や Unix に類似したシステムでの
Apache のコンパイルとインストールです。 Windows における
コンパイルとインストールに関しては「<a
href="platform/windows.html">Microsoft
Windows $B$G(B Apache $B$r;H$&(B</a>$B!W$r$4Mw2<$5$$!#(B
$B$=$NB>$N%W%i%C%H%[!<%`$K4X$7$F$O!V(B<a
href="platform/">$B%W%i%C%H%[!<%`(B</a>$B!W$r$4Mw2<$5$$!#(B</p>
Windows で Apache を使う</a>」をご覧下さい。
その他のプラットホームに関しては「<a
href="platform/">プラットホーム</a>」をご覧下さい。</p>
<p>Apache 2.0 $B$G$OB>$N(B Open Source $B%W%m%8%'%/%H$HF1MM!"(B
$B%S%k%I4D6-9=C[$K(B <code>libtool</code> $B$H(B <code>autoconf</code>
$B$r;H$&$h$&$K$J$C$F$$$^$9!#(B</p>
<p>Apache 2.0 では他の Open Source プロジェクトと同様、
ビルド環境構築に <code>libtool</code> <code>autoconf</code>
を使うようになっています。</p>
<p>$B%^%$%J!<%P!<%8%g%s$+$i$=$N<!$N%P!<%8%g%s$K%"%C%W%0%l!<%I$9$k(B
(2.2.50 $B$+$i(B 2.2.51 $B$XEy(B) $B>l9g$O!"$^$:(B <a href="#upgrading">
$B%"%C%W%0%l!<%I(B</a>$B$r$4Mw2<$5$$!#(B</p>
<p>マイナーバージョンからその次のバージョンにアップグレードする
(2.2.50 から 2.2.51 へ等) 場合は、まず <a href="#upgrading">
アップグレード</a>をご覧下さい。</p>
</summary>
<seealso><a href="programs/configure.html">$B%=!<%9%D%j!<$N@_Dj(B</a></seealso>
<seealso><a href="invoking.html">Apache$B$N5/F0(B</a></seealso>
<seealso><a href="stopping.html">Apache$B$NDd;_$H:F5/F0(B</a></seealso>
<seealso><a href="programs/configure.html">ソースツリーの設定</a></seealso>
<seealso><a href="invoking.html">Apacheの起動</a></seealso>
<seealso><a href="stopping.html">Apacheの停止と再起動</a></seealso>
<section id="overview"><title>$B35MW(B ($B$;$C$+$A$J?M8~$1(B)</title>
<section id="overview"><title>概要 (せっかちな人向け)</title>
<table>
<columnspec><column width=".13"/><column width=".80"/></columnspec>
<tr>
<td><a href="#download">$B%@%&%s%m!<%I(B</a></td>
<td><a href="#download">ダウンロード</a></td>
<td><code>$ lynx http://httpd.apache.org/download.cgi</code>
</td>
</tr>
<tr>
<td><a href="#extract">$BE83+(B</a></td>
<td><a href="#extract">展開</a></td>
<td><code>$ gzip -d httpd-<em>NN</em>.tar.gz<br />
$ tar xvf httpd-<em>NN</em>.tar<br />
@@ -68,198 +68,198 @@
</tr>
<tr>
<td><a href="#configure">$B@_Dj(B</a></td>
<td><a href="#configure">設定</a></td>
<td><code>$ ./configure --prefix=<em>PREFIX</em></code>
</td>
</tr>
<tr>
<td><a href="#compile">$B%3%s%Q%$%k(B</a></td>
<td><a href="#compile">コンパイル</a></td>
<td><code>$ make</code> </td>
</tr>
<tr>
<td><a href="#install">$B%$%s%9%H!<%k(B</a></td>
<td><a href="#install">インストール</a></td>
<td><code>$ make install</code> </td>
</tr>
<tr>
<td><a href="#customize">$B%+%9%?%^%$%:(B</a></td>
<td><a href="#customize">カスタマイズ</a></td>
<td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td>
</tr>
<tr>
<td><a href="#test">$B%F%9%H(B</a></td>
<td><a href="#test">テスト</a></td>
<td><code>$ <em>PREFIX</em>/bin/apachectl -k start</code>
</td>
</tr>
</table>
<p><em>NN</em> $B$O:G?7$N%P!<%8%g%s%J%s%P!<$K!"(B
<em>PREFIX</em> $B$O%$%s%9%H!<%k$9$k%5!<%P$G$N%U%!%$%k%7%9%F%`$N%Q%9$K!"(B
$BCV$-49$($F$/$@$5$$!#(B<em>PREFIX</em> $B$r;XDj$7$J$+$C$?>l9g$O!"(B
$B%G%U%)%k%H$N(B <code>/usr/local/apache2</code> $B$K$J$j$^$9!#(B</p>
<p><em>NN</em> は最新のバージョンナンバーに、
<em>PREFIX</em> はインストールするサーバでのファイルシステムのパスに、
置き換えてください。<em>PREFIX</em> を指定しなかった場合は、
デフォルトの <code>/usr/local/apache2</code> になります。</p>
<p>Apache httpd $B$N%3%s%Q%$%k$H%$%s%9%H!<%k$KI,MW$J$b$N$r$O$8$a$H$7$F!"(B
$B%3%s%Q%$%k$H%$%s%9%H!<%k$K$D$$$F$O!"<!$K>\$7$/5-=R$5$l$F$$$^$9!#(B</p>
<p>Apache httpd のコンパイルとインストールに必要なものをはじめとして、
コンパイルとインストールについては、次に詳しく記述されています。</p>
</section>
<section id="requirements"><title>$BI,MW$J$b$N(B</title>
<section id="requirements"><title>必要なもの</title>
<p>Apache $B$N%S%k%I$K$O<!$N$b$N$,I,MW$G$9(B:</p>
<p>Apache のビルドには次のものが必要です:</p>
<dl>
<dt>$B%G%#%9%/%9%Z!<%9(B</dt>
<dd>$B%G%#%9%/$K>/$J$/$H$b(B 50 MB $B$N0l;~E*$J6u$-MFNL$,$"$k$h$&$K(B
$B5$$rIU$1$F$/$@$5$$!#%$%s%9%H!<%k8e$O(B Apache $B$O(B 10 MB $BDxEY$N(B
$B%G%#%9%/%9%Z!<%9$r@j$a$^$9!#<B:]$KI,MW$K$J$k%G%#%9%/%9%Z!<%9$O!"(B
$B@_Dj%*%W%7%g%s$d%5!<%I%Q!<%F%#!<@=%b%8%e!<%k$r$I$&A*Br$9$k$+$K$h$C$F(B
$BBg$-$/JQ$o$k$G$7$g$&!#(B</dd>
<dt>ディスクスペース</dt>
<dd>ディスクに少なくとも 50 MB の一時的な空き容量があるように
気を付けてください。インストール後は Apache は 10 MB 程度の
ディスクスペースを占めます。実際に必要になるディスクスペースは、
設定オプションやサードパーティー製モジュールをどう選択するかによって
大きく変わるでしょう。</dd>
<dt>ANSI-C $B%3%s%Q%$%i$H%S%k%I%7%9%F%`(B</dt>
<dd>ANSI-C $B%3%s%Q%$%i$r%$%s%9%H!<%k$7$F$*$$$F2<$5$$!#$*A&$a$O(B <a
<dt>ANSI-C コンパイラとビルドシステム</dt>
<dd>ANSI-C コンパイラをインストールしておいて下さい。お薦めは <a
href="http://www.gnu.org/">Free Software Foundation (FSF)</a>
$B$K$h$k(B <a href="http://www.gnu.org/software/gcc/gcc.html">GNU C
compiler (GCC)</a> $B$G$9!#(BGCC $B$,$J$$>l9g$O!"(B
$B>/$J$/$H$bDs6!$5$l$F$$$k%3%s%Q%$%i$,(B ANSI $B=`5r$G$"$k$3$H$r3NG'$7$F$*$$$F2<$5$$!#(B
$B$=$l$+$i!"JQ?t(B <code>PATH</code> $B$K$O(B <code>make</code>
$B$H$$$C$?4pK\E*$J%S%k%I%D!<%k$,4^$^$l$F$$$kI,MW$,$"$j$^$9!#(B</dd>
による <a href="http://www.gnu.org/software/gcc/gcc.html">GNU C
compiler (GCC)</a> です。GCC がない場合は、
少なくとも提供されているコンパイラが ANSI 準拠であることを確認しておいて下さい。
それから、変数 <code>PATH</code> には <code>make</code>
といった基本的なビルドツールが含まれている必要があります。</dd>
<dt>$B;~9o$r@53N$K$9$k(B</dt>
<dd>HTTP $B%W%m%H%3%k$NMWAG$OF|;~$N;~9o$GI=8=$5$l$F$$$^$9!#$G$9$+$i!"(B
$B@53N$J;~9o$K%7%s%/%m$5$;$k5!G=$r%7%9%F%`$K@_Dj$9$k$3$H$r6cL#$7$F$_$F2<$5$$!#(B
Network Time Protocol (NTP) $B$r%Y!<%9$H$7$?(B ntpdate $B$d(B xntpd $B%W%m%0%i%`$,(B
$B$3$NL\E*$K$h$/MQ$$$i$l$^$9!#(BNTP $B%=%U%H%&%'%"$d8x3+(B NTP
$B%5!<%P$K4X$9$k>\:Y$O!"(B<a
href="http://www.ntp.org">NTP $B%[!<%`%Z!<%8(B</a> $B$r$4Mw2<$5$$!#(B</dd>
<dt>時刻を正確にする</dt>
<dd>HTTP プロトコルの要素は日時の時刻で表現されています。ですから、
正確な時刻にシンクロさせる機能をシステムに設定することを吟味してみて下さい。
Network Time Protocol (NTP) をベースとした ntpdate や xntpd プログラムが
この目的によく用いられます。NTP ソフトウェアや公開 NTP
サーバに関する詳細は、<a
href="http://www.ntp.org">NTP ホームページ</a> をご覧下さい。</dd>
<dt><a href="http://www.perl.org/">Perl 5</a>
[$B%*%W%7%g%s(B]</dt>
<dd>$BDs6!$5$l$F$$$k%9%/%j%W%H4v$D$+!"Nc$($P(B <program>apxs</program> $B$d(B
<program>dbmmanage</program> $B$O(B
Perl $B$G=q$+$l$F$$$k$N$G!"(BPerl
5 $B%$%s%?%W%j%?$,I,MW$K$J$j$^$9(B (5.003 $B0J9_(B)$B!#(B
Perl $B%$%s%?%W%j%?$rJ#?t%$%s%9%H!<%k$7$F$$$k(B ($B$?$H$($PA4BN$N%7%9%F%`$N0lIt(B
$B$H$7$F%$%s%9%H!<%k$5$l$F$$$k(B Perl 4 $B$H!"<+J,$GDI2C$G%$%s%9%H!<%k$7$?(B
Perl 5 $B$,$"$k$J$I$N(B) $B>l9g!"(B<code>--with-perl</code> $B%*%W%7%g%s(B ($B2<5-;2>H(B)
$B$r;H$C$F(B <program>configure</program> $B$,0U?^$7$?$b$N$r;H$&$h$&$K(B
$BL@<(E*$K;XDj$9$k$HNI$$$G$7$g$&!#(B
<program>configure</program> $B%9%/%j%W%H$G(B Perl 5 $B%$%s%?%W%j%?$,(B
$B8+$D$+$i$J$$>l9g$O!"$3$N1F6A$r<u$1$k%5%]!<%H%9%/%j%W%H$,;H$($J$/$J$j$^$9!#(B
$B$b$A$m$s!"(BApache httpd $B$N%3%s%Q%$%k$H%$%s%9%H!<%k$OLdBj$J$/9T$($^$9!#(B</dd>
[オプション]</dt>
<dd>提供されているスクリプト幾つか、例えば <program>apxs</program>
<program>dbmmanage</program>
Perl で書かれているので、Perl
5 インタプリタが必要になります (5.003 以降)。
Perl インタプリタを複数インストールしている (たとえば全体のシステムの一部
としてインストールされている Perl 4 と、自分で追加でインストールした
Perl 5 があるなどの) 場合、<code>--with-perl</code> オプション (下記参照)
を使って <program>configure</program> が意図したものを使うように
明示的に指定すると良いでしょう。
<program>configure</program> スクリプトで Perl 5 インタプリタが
見つからない場合は、この影響を受けるサポートスクリプトが使えなくなります。
もちろん、Apache httpd のコンパイルとインストールは問題なく行えます。</dd>
</dl>
</section>
<section id="download"><title>$B%@%&%s%m!<%I(B</title>
<section id="download"><title>ダウンロード</title>
<p>Apache HTTP $B%5!<%P$O(B <a
<p>Apache HTTP サーバは <a
href="http://httpd.apache.org/download.cgi">Apache HTTP
$B%5!<%P%@%&%s%m!<%I%5%$%H(B</a>$B$+$i%@%&%s%m!<%I$G$-$^$9$7!"(B
$BF1$8>l=j$K4v$D$+$N%_%i!<%5%$%H$b%j%9%H$7$F$$$^$9!#(B
UNIX $B$KN`;w$9$k%7%9%F%`$G(B Apache $B$r;H$&%f!<%6$O!"%=!<%9$r(B
$B%@%&%s%m!<%I$7$F%S%k%I$7$?$[$&$,NI$$$G$7$g$&!#(B
$B%S%k%I$N<j=g!J2<5-!K$O4JC1$G$9$7!"$=$N$*$+$2$G%K!<%:$K(B
$B8+9g$C$?%+%9%?%^%$%:$r4JC1$K$G$-$^$9!#(B
$B$5$i$K!"%P%$%J%j$N%j%j!<%9$O%=!<%9%j%j!<%9$h$j$b(B
$BCY$l$F$$$k$3$H$,$h$/$"$j$^$9!#(B
$B$=$l$G$b%P%$%J%j$r%@%&%s%m!<%I$7$?$N$G$"$l$P!"(B
$B%G%#%9%H%j%S%e!<%7%g%s$NCf$K$"$k(B <code>INSSTALL.bindist</code>
$B%U%!%$%k$N@bL@$K=>$C$F$/$@$5$$!#(B</p>
サーバダウンロードサイト</a>からダウンロードできますし、
同じ場所に幾つかのミラーサイトもリストしています。
UNIX に類似するシステムで Apache を使うユーザは、ソースを
ダウンロードしてビルドしたほうが良いでしょう。
ビルドの手順(下記)は簡単ですし、そのおかげでニーズに
見合ったカスタマイズを簡単にできます。
さらに、バイナリのリリースはソースリリースよりも
遅れていることがよくあります。
それでもバイナリをダウンロードしたのであれば、
ディストリビューションの中にある <code>INSSTALL.bindist</code>
ファイルの説明に従ってください。</p>
<p>$B%@%&%s%m!<%I8e!"%@%&%s%m!<%I$7$?$b$N$,(B Apache HTTP
$B%5!<%P$N40A4$G2~cb$5$l$F$$$J$$%P!<%8%g%s$G$"$k$3$H$r(B
$B8!>Z$9$k$3$H$,=EMW$G$9!#$3$l$O%@%&%s%m!<%I$7$?(B tarball $B$N(B PGP $B=pL>$r(B
$B%F%9%H$9$k$3$H$K$h$C$F8!>Z$7$^$9!#(B
$B$3$N<j=g$N>\:Y$O(B <a
href="http://httpd.apache.org/download.cgi#verify">$B%@%&%s%m!<%I(B
$B%Z!<%8(B</a> $B$K$"$j!"$5$i$K>\$7$$Nc$O(B <a
href="http://httpd.apache.org/dev/verification.html">PGP $B$N;HMQ(B
</a> $B$K5-:\$5$l$F$$$^$9!#(B</p>
<p>ダウンロード後、ダウンロードしたものが Apache HTTP
サーバの完全で改竄されていないバージョンであることを
検証することが重要です。これはダウンロードした tarball の PGP 署名を
テストすることによって検証します。
この手順の詳細は <a
href="http://httpd.apache.org/download.cgi#verify">ダウンロード
ページ</a> にあり、さらに詳しい例は <a
href="http://httpd.apache.org/dev/verification.html">PGP の使用
</a> に記載されています。</p>
</section>
<section id="extract"><title>$BE83+(B</title>
<section id="extract"><title>展開</title>
<p>Apache HTTPD $B$N(B tarball
$B$+$i%=!<%9%U%!%$%k$rE83+$7$F<h$j=P$9$H$O!"(B
$BC1$J$k05=L$N2r=|$H(B tar $B$NE83+$G$9(B:</p>
<p>Apache HTTPD tarball
からソースファイルを展開して取り出すとは、
単なる圧縮の解除と tar の展開です:</p>
<example>
$ gzip -d httpd-<em>NN</em>.tar.gz<br />
$ tar xvf httpd-<em>NN</em>.tar
</example>
<p>$BG[I[MQ$N%=!<%9%3!<%I$,$"$k8=:_$$$k%G%#%l%/%H%j$N2<$K!"(B
$B?7$7$$%G%#%l%/%H%j$,:n$i$l$^$9!#(B
$B%5!<%P$r%3%s%Q%$%k$9$kCJ3,$K?J$`A0$K!"$=$N%G%#%l%/%H%j$K(B
<code>cd</code> $B$G0\F0$7$F$/$@$5$$!#(B</p>
<p>配布用のソースコードがある現在いるディレクトリの下に、
新しいディレクトリが作られます。
サーバをコンパイルする段階に進む前に、そのディレクトリに
<code>cd</code> で移動してください。</p>
</section>
<section id="configure"><title>$B%=!<%9%D%j!<$r@_Dj$9$k(B</title>
<section id="configure"><title>ソースツリーを設定する</title>
<p>$B<!$N%9%F%C%W$O!"$"$J$?$N%W%i%C%H%[!<%`$H(B
$B8D?ME*$JMW5a$K9g$&$h$&$K(B Apache
$B%=!<%9%D%j!<$r@_Dj$9$k$3$H$G$9!#(B
$B$3$l$OG[I[%G%#%l%/%H%j$N%k!<%H%G%#%l%/%H%j$K$"$k!"(B
<p>次のステップは、あなたのプラットホームと
個人的な要求に合うように Apache
ソースツリーを設定することです。
これは配布ディレクトリのルートディレクトリにある、
<program>configure</program>
$B%9%/%j%W%H$G9T$J$$$^$9!#(B
(Apache $B%=!<%9%D%j!<$NL$%j%j!<%9(B
$BHG$r%@%&%s%m!<%I$7$?3+H/<T$O!"<!$N%9%F%C%W$K?J$`A0$K(B
<code>autoconf</code> $B$H(B<code>libtool</code>
$B$r%$%s%9%H!<%k$7$F(B <code>buildconf</code>
$B$r<B9T$9$kI,MW$,$"$j$^$9!#(B
$B8x<0%j%j!<%9$G$O$3$N:n6H$OI,MW$"$j$^$;$s!#(B) </p>
スクリプトで行ないます。
(Apache ソースツリーの未リリース
版をダウンロードした開発者は、次のステップに進む前に
<code>autoconf</code> <code>libtool</code>
をインストールして <code>buildconf</code>
を実行する必要があります。
公式リリースではこの作業は必要ありません。) </p>
<p>$B%G%U%)%k%H%*%W%7%g%s$r;H$C$F%=!<%9%D%j!<$rA4$F@_Dj$9$k(B
$B$N$G$"$l$P!"C1=c$K(B <code>./configure</code> $B$H%?%$%W$7$F$/$@$5$$!#(B
$B%G%U%)%k%H%*%W%7%g%s$rJQ99$G$-$k$h$&$K!"(B<program>configure</program>
$B$K$OMM!9$JJQ?t$d%3%^%s%I%i%$%s%*%W%7%g%s$,MQ0U$5$l$F$$$^$9!#(B</p>
<p>デフォルトオプションを使ってソースツリーを全て設定する
のであれば、単純に <code>./configure</code> とタイプしてください。
デフォルトオプションを変更できるように、<program>configure</program>
には様々な変数やコマンドラインオプションが用意されています。</p>
<p>$B:G$b=EMW$J%*%W%7%g%s$O!"(BApache $B$,$3$N8e$G%$%s%9%H!<%k$5$l$k0LCV(B
<code>--prefix</code> $B$G$9!#(BApache $B$O!"$3$N%$%s%9%H!<%k0LCV$K(B
$B$*$$$F@5>o$KF0:n$9$k$h$&$K@_Dj$7$J$1$l$P$J$i$J$$$+$i$G$9!#(B
$B$5$i$K>\:Y$J%U%!%$%k0LCV$N@)8f$ODI2C$N(B <a
href="programs/configure.html#installationdirectories">$B@_Dj%*%W%7%g%s(B
</a> $B$G$G$-$^$9!#(B</p>
<p>最も重要なオプションは、Apache がこの後でインストールされる位置
<code>--prefix</code> です。Apache は、このインストール位置に
おいて正常に動作するように設定しなければならないからです。
さらに詳細なファイル位置の制御は追加の <a
href="programs/configure.html#installationdirectories">設定オプション
</a> でできます。</p>
<p>$B$3$N;~E@$G!"(B<a href="mod/">$B%b%8%e!<%k(B</a> $B$rM-8z$K$7$?$j(B
$BL58z$K$7$?$j$9$k$3$H$G(B Apache $BK\BN$K4^$^$l$k(B <a
href="programs/configure.html#optionalfeatures">$B5!G=(B</a>
$B$r;XDj$G$-$^$9!#(BApache $BK\BN$K$O%G%U%)%k%H$G!"%b%8%e!<%k$N(B <a
href="mod/module-dict.html#Status">Base</a> $B%;%C%H$,(B
$B4^$^$l$^$9!#$=$NB>$N%b%8%e!<%k$O(B
<code>--enable-<var>module</var></code> $B%*%W%7%g%s$G(B
$BM-8z$K$J$j$^$9!#$3$3$G(B <var>module</var> $B$O%b%8%e!<%k$NL>A0$G!"(B
$B$D$^$j$=$l$O%b%8%e!<%k$NL>A0$+$i(B <code>mod_</code> $BJ8;zNs$r<h$j=|$$$?8e$K(B
$B%"%s%@!<%9%3%"$r%@%C%7%e$GCV49$7$?J8;zNs$G$9!#(B
$B$3$l$H$OJL$NJ}K!$G(B <code>--enable-<var>module</var>=shared</code>
$B%*%W%7%g%s$r;H$C$F!"%b%8%e!<%k$r(B<a href="dso.html">
$B%7%'%"!<%I%*%V%8%'%/%H(B (DSO)</a> -- $B<B9T;~$K%m!<%I$7$?$j(B
$B%"%s%m!<%I$7$?$j$G$-$k7A<0(B -- $B$H$7$F%3%s%Q%$%k$9$k$3$H$b$G$-$^$9!#(B
$BF1MM$K!"(B<code>--disable-<var>module</var></code> $B%*%W%7%g%s$G(B
Base $B%b%8%e!<%k$rL58z2=$9$k$3$H$b$G$-$^$9!#(B
$B$3$l$i$N%*%W%7%g%s$r;H$C$F$$$k$H$-$K!"$b$7;XDj$7$?%b%8%e!<%k$,B8:_$7$J$/$F$b(B
<program>configure</program> $B$O7Y9p$r>e$2$k$3$H$J$/!"C1=c$K%*%W%7%g%s$r(B
$BL5;k$9$k$3$H$K5$$r$D$1$F$/$@$5$$!#(B</p>
<p>この時点で、<a href="mod/">モジュール</a> を有効にしたり
無効にしたりすることで Apache 本体に含まれる <a
href="programs/configure.html#optionalfeatures">機能</a>
を指定できます。Apache 本体にはデフォルトで、モジュールの <a
href="mod/module-dict.html#Status">Base</a> セットが
含まれます。その他のモジュールは
<code>--enable-<var>module</var></code> オプションで
有効になります。ここで <var>module</var> はモジュールの名前で、
つまりそれはモジュールの名前から <code>mod_</code> 文字列を取り除いた後に
アンダースコアをダッシュで置換した文字列です。
これとは別の方法で <code>--enable-<var>module</var>=shared</code>
オプションを使って、モジュールを<a href="dso.html">
シェアードオブジェクト (DSO)</a> -- 実行時にロードしたり
アンロードしたりできる形式 -- としてコンパイルすることもできます。
同様に、<code>--disable-<var>module</var></code> オプションで
Base モジュールを無効化することもできます。
これらのオプションを使っているときに、もし指定したモジュールが存在しなくても
<program>configure</program> は警告を上げることなく、単純にオプションを
無視することに気をつけてください。</p>
<p>$B>e5-$K2C$($F!"(B<program>configure</program> $B%9%/%j%W%H$K!"(B
$B%3%s%Q%$%i!"%i%$%V%i%j!"%X%C%@%U%!%$%k$N0LCV$rDI2C>pJs$H$7$FEO$9(B
$BI,MW$,$"$k>l9g$,$"$j$^$9!#$3$N$h$&$J>l9g$K$O!"4D6-JQ?t$"$k$$$O(B
$B%3%^%s%I%i%$%s%*%W%7%g%s$G(B <program>configure</program> $B$KEO$7$^$9!#(B
$B>\:Y$K4X$7$F$O(B <program>configure</program> $B%^%K%e%"%k%Z!<%8(B
$B$r$4Mw$/$@$5$$!#(B</p>
<p>上記に加えて、<program>configure</program> スクリプトに、
コンパイラ、ライブラリ、ヘッダファイルの位置を追加情報として渡す
必要がある場合があります。このような場合には、環境変数あるいは
コマンドラインオプションで <program>configure</program> に渡します。
詳細に関しては <program>configure</program> マニュアルページ
をご覧ください。</p>
<p>$B$A$g$C$H$I$s$J$3$H$,$G$-$k$+$r8+$;$^$7$g$&!#(B
$B$3$3$GE57?E*$JNc$H$7$F!"(B<code>/sw/pkg/apache</code>
$B$H$$$&%$%s%9%H!<%k%D%j!<$G%3%s%Q%$%i$H%U%i%0$r;XDj$7$F!"(B
$B$5$i$KFs$D$NDI2C%b%8%e!<%k(B <module>mod_rewrite</module> $B$H(B
<module>mod_speling</module> $B$r8e$G(B DSO
$B%a%+%K%:%`$G%m!<%I$9$k$h$&$K%3%s%Q%$%k$7$F$_$^$9(B:</p>
<p>ちょっとどんなことができるかを見せましょう。
ここで典型的な例として、<code>/sw/pkg/apache</code>
というインストールツリーでコンパイラとフラグを指定して、
さらに二つの追加モジュール <module>mod_rewrite</module>
<module>mod_speling</module> を後で DSO
メカニズムでロードするようにコンパイルしてみます:</p>
<example>
$ CC="pgcc" CFLAGS="-O2" \<br />
@@ -268,103 +268,103 @@ $ tar xvf httpd-<em>NN</em>.tar
--enable-speling=shared
</example>
<p><program>configure</program> $B$r<B9T$7$?$i!"%7%9%F%`$N5!G=$r(B
$B%F%9%H$7$?$j!"8e$G%5!<%P$r%3%s%Q%$%k$9$k$?$a$KI,MW$J(B Makefile
$B$r@8@.$7$?$j$9$k$N$K?tJ,4V$+$+$k$G$7$g$&!#(B</p>
<p><program>configure</program> を実行したら、システムの機能を
テストしたり、後でサーバをコンパイルするために必要な Makefile
を生成したりするのに数分間かかるでしょう。</p>
<p>$B8D!9$N(B <program>configure</program> $B%*%W%7%g%s$N>\:Y$K4X$7$F$O(B
<program>configure</program> $B%^%K%e%"%k%Z!<%8(B
$B$r$4Mw$/$@$5$$!#(B</p>
<p>個々の <program>configure</program> オプションの詳細に関しては
<program>configure</program> マニュアルページ
をご覧ください。</p>
</section>
<section id="compile"><title>$B%S%k%I(B</title>
<section id="compile"><title>ビルド</title>
<p>$B$3$l$G(B Apache $B$NMM!9$J%Q!<%D$r%S%k%I$9$k$3$H$,$G$-$^$9!#(B
$B<!$N%3%^%s%I$rC1=c$K<B9T$9$k$@$1$G$9(B:</p>
<p>これで Apache の様々なパーツをビルドすることができます。
次のコマンドを単純に実行するだけです:</p>
<example>$ make</example>
<p>$B4pK\E*$J@_Dj$r$9$k$N$K?tJ,$+$+$j$^$9$,!"(B
$B$"$i$+$8$a$4N;>5$/$@$5$$!#(B
$B$^$?!";~4V$O%O!<%I%&%'%"$dM-8z$K$7$?%b%8%e!<%k$N?t$K(B
$BBg$-$/0MB8$9$k$G$7$g$&!#(B</p>
<p>基本的な設定をするのに数分かかりますが、
あらかじめご了承ください。
また、時間はハードウェアや有効にしたモジュールの数に
大きく依存するでしょう。</p>
</section>
<section id="install"><title>$B%$%s%9%H!<%k(B</title>
<section id="install"><title>インストール</title>
<p>$B$5$F!"@_Dj$7$?%$%s%9%H!<%k(B <em>PREFIX</em>
($BA0=R$N(B <code>--prefix</code> $B%*%W%7%g%s$r;2>H(B)
$B0J2<$K%Q%C%1!<%8$r%$%s%9%H!<%k$9$kCJ3,$K$J$j$^$7$?!#(B
$B<!$N%3%^%s%I$r<B9T$7$F$/$@$5$$(B:</p>
<p>さて、設定したインストール <em>PREFIX</em>
(前述の <code>--prefix</code> オプションを参照)
以下にパッケージをインストールする段階になりました。
次のコマンドを実行してください:</p>
<example>$ make install</example>
<p>$B%"%C%W%0%l!<%I$9$k>l9g$O!"%$%s%9%H!<%k$G$O@_Dj%U%!%$%k$d(B
$B%I%-%e%a%s%H%U%!%$%k$N>e=q$-$O9T$$$^$;$s!#(B</p>
<p>アップグレードする場合は、インストールでは設定ファイルや
ドキュメントファイルの上書きは行いません。</p>
</section>
<section id="customize"><title>$B%+%9%?%^%$%:(B</title>
<section id="customize"><title>カスタマイズ</title>
<p>$B<!$K(B <code><em>PREFIX</em>/conf/</code> $B0J2<$K$"$k(B <a
href="configuring.html">$B@_Dj%U%!%$%k(B</a>$B$rJT=8$7$F!"(B
Apache HTTP $B%5!<%P$r%+%9%?%^%$%:$7$^$9!#(B</p>
<p>次に <code><em>PREFIX</em>/conf/</code> 以下にある <a
href="configuring.html">設定ファイル</a>を編集して、
Apache HTTP サーバをカスタマイズします。</p>
<example>$ vi <em>PREFIX</em>/conf/httpd.conf</example>
<p><a href="./">docs/manual/</a> $B$N(B Apache $B%^%K%e%"%k$r$6$C$H8+$F$/$@$5$$!#(B
$B$^$?$O!"(B<a
<p><a href="./">docs/manual/</a> の Apache マニュアルをざっと見てください。
または、<a
href="http://httpd.apache.org/docs/&httpd.docs;/"
>http://httpd.apache.org/docs/&httpd.docs;/</a>
$B$K$"$k%^%K%e%"%k:G?7HG!"(B<a
href="mod/directives.html">$B@_Dj%G%#%l%/%F%#%V(B</a>$B$KEv$?$C$F$_$F$/$@$5$$!#(B</p>
にあるマニュアル最新版、<a
href="mod/directives.html">設定ディレクティブ</a>に当たってみてください。</p>
</section>
<section id="test"><title>$B%F%9%H(B</title>
<section id="test"><title>テスト</title>
<p>$B<!$N%3%^%s%I$r<B9T$7$F(B Apache HTTP $B%5!<%P$r(B<a
href="invoking.html">$B3+;O(B</a>$B$G$-$^$9(B:</p>
<p>次のコマンドを実行して Apache HTTP サーバを<a
href="invoking.html">開始</a>できます:</p>
<example>$ <em>PREFIX</em>/bin/apachectl -k start</example>
<p>URL <code>http://localhost/</code> $B$rDL$7$F:G=i$N%I%-%e%a%s%H$KBP$9$k(B
$B%j%/%(%9%H$rH/9T$9$k;v$,$G$-$k$O$:$G$9!#$3$l$G8+$($k(B
$B%&%'%V%Z!<%8$O(B <directive module="core">DocumentRoot</directive>
$B0J2<$KCV$+$l$?$b$N$G!"DL>o$O(B
<code><em>PREFIX</em>/htdocs/</code> $B$G$7$g$&!#(B
$B%5!<%P$r:F$S(B<a href="stopping.html">$BDd;_(B</a>$B$9$k$K$O!"(B
$B<!$N%3%^%s%I$r<B9T$7$^$9(B:</p>
<p>URL <code>http://localhost/</code> を通して最初のドキュメントに対する
リクエストを発行する事ができるはずです。これで見える
ウェブページは <directive module="core">DocumentRoot</directive>
以下に置かれたもので、通常は
<code><em>PREFIX</em>/htdocs/</code> でしょう。
サーバを再び<a href="stopping.html">停止</a>するには、
次のコマンドを実行します:</p>
<example>$ <em>PREFIX</em>/bin/apachectl -k stop</example>
</section>
<section id="upgrading"><title>$B%"%C%W%0%l!<%I(B</title>
<section id="upgrading"><title>アップグレード</title>
<p>$B%"%C%W%0%l!<%I$G$^$:9T$J$&$Y$-$3$H$O!"%j%j!<%9%"%J%&%s%9$H(B
$B%=!<%9%G%#%9%H%j%S%e!<%7%g%s$KF~$C$F$$$k(B <code>CHANGES</code> $B$rFI$s$G!"(B
$B<+?H$N%5%$%H$KBP$7$F1F6A$r5Z$\$9JQ99E@$rC5$9$3$H$G$9!#(B
$B%a%8%c!<%j%j!<%94V$NJQ99$r$9$k>l9g(B ($BNc$($P(B 1.3 $B$+$i(B 2.0 $B$X!"(B2.0 $B$+$i(B 2.2 $B$X(B)
$B$O!"%3%s%Q%$%k;~$d<B9T;~$N@_Dj$KBg$-$J:90[$,$"$k$G$7$g$&$+$i!"(B
$B<jF0$ND4@0$,I,MW$K$J$k$G$7$g$&!#%b%8%e!<%k$bA4$F!"(BAPI
$B$NJQ99$K9g$o$;$k$?$a$K%"%C%W%0%l!<%I$,I,MW$K$J$k$G$7$g$&!#(B</p>
<p>アップグレードでまず行なうべきことは、リリースアナウンスと
ソースディストリビューションに入っている <code>CHANGES</code> を読んで、
自身のサイトに対して影響を及ぼす変更点を探すことです。
メジャーリリース間の変更をする場合 (例えば 1.3 から 2.0 へ、2.0 から 2.2 へ)
は、コンパイル時や実行時の設定に大きな差異があるでしょうから、
手動の調整が必要になるでしょう。モジュールも全て、API
の変更に合わせるためにアップグレードが必要になるでしょう。</p>
<p>$B%^%$%J!<%P!<%8%g%s$+$i<!$N%P!<%8%g%s$K%"%C%W%0%l!<%I$9$k>l9g(B
($BNc$($P(B 2.2.55 $B$+$i(B 2.2.57 $B$X(B) $B$O!"$b$C$H4JC1$G$9!#(B
<code>make install</code> $B$r<B9T$7$F$b:#$"$k%I%-%e%a%s%H!"(B
$B%m%0%U%!%$%k!"@_Dj%U%!%$%k$O>e=q$-$5$l$^$;$s!#(B
$B$5$i$K!"%^%$%J!<%P!<%8%g%s4V$G$O(B <program>configure</program> $B%*%W%7%g%s!"(B
$B<B9T;~$N@_Dj!"%b%8%e!<%k(B API $B$KIT@09g$,5/$3$i$J$$$h$&$K!"(B
$B3+H/<T$O:GBg8B$NEXNO$r$7$F$$$^$9!#(B
$BBgDq$N>l9g!"F10l$N(B <program>configure</program> $B%3%^%s%I%i%$%s!"(B
$BF10l$N@_Dj%U%!%$%k!"%b%8%e!<%kA4$F$,@5>o$KF0:n$9$k$O$:$G$9!#(B</p>
<p>マイナーバージョンから次のバージョンにアップグレードする場合
(例えば 2.2.55 から 2.2.57 へ) は、もっと簡単です。
<code>make install</code> を実行しても今あるドキュメント、
ログファイル、設定ファイルは上書きされません。
さらに、マイナーバージョン間では <program>configure</program> オプション、
実行時の設定、モジュール API に不整合が起こらないように、
開発者は最大限の努力をしています。
大抵の場合、同一の <program>configure</program> コマンドライン、
同一の設定ファイル、モジュール全てが正常に動作するはずです。</p>
<p>$B%^%$%J!<%P!<%8%g%s$G%"%C%W%0%l!<%I$9$k>l9g$O!"(B
$B4{$K%$%s%9%H!<%k$5$l$F$$$k%5!<%P$N(B <code>build</code> $B%G%#%l%/%H%jFb$+!"(B
$B0JA0%$%s%9%H!<%k$K;H$C$?%=!<%9%3!<%I%D%j!<$N:G>e0L%G%#%l%/%H%jFb$K$"$k!"(B
<code>config.nice</code> $B%U%!%$%k$rC5$7$F$/$@$5$$!#(B
$B$3$N%U%!%$%k$K$O%=!<%9%D%j!<$r@_Dj$7$?;~$K;H$C$?(B
<program>configure</program> $B%3%^%s%I%i%$%s$,!"$=$N$^$^F~$C$F$$$^$9!#(B
$B<!$N%P!<%8%g%s$K%"%C%W%0%l!<%I$9$k>l9g$O(B <code>config.nice</code>
$B%U%!%$%k$r?7$7$$%P!<%8%g%s$N%=!<%9%D%j!<$K%3%T!<$7!"(B
$BI,MW$G$"$l$P$=$l$rJT=8$7$?8e$K!"<!$N$h$&$K<B9T$7$^$9!#(B</p>
<p>マイナーバージョンでアップグレードする場合は、
既にインストールされているサーバの <code>build</code> ディレクトリ内か、
以前インストールに使ったソースコードツリーの最上位ディレクトリ内にある、
<code>config.nice</code> ファイルを探してください。
このファイルにはソースツリーを設定した時に使った
<program>configure</program> コマンドラインが、そのまま入っています。
次のバージョンにアップグレードする場合は <code>config.nice</code>
ファイルを新しいバージョンのソースツリーにコピーし、
必要であればそれを編集した後に、次のように実行します。</p>
<example>
$ ./config.nice<br />
@@ -374,12 +374,12 @@ $ tar xvf httpd-<em>NN</em>.tar
$ <em>PREFIX</em>/bin/apachectl -k start<br />
</example>
<note type="warning">$B?7$7$$%P!<%8%g%s$r;HMQ$9$k>l9g$O!"(B
$B<B:]$K1?MQ$r;O$a$kA0$K!"I,$:<+J,MQ$N4D6-$G%F%9%H$9$Y$-$G$9!#(B
$B:G=*E*$K%"%C%W%0%l!<%I$9$kA0$K!"Hs8_49@-$,$J$$$+$r%F%9%H$9$k$?$a$K!"(B
$BNc$($P!"0[$J$k(B <code>--prefix</code> $B$H0[$J$k%]!<%H(B (<directive
module="mpm_common">Listen</directive> $B%G%#%l%/%F%#%V$G@_Dj$7$^$9(B)
$B$r;HMQ$9$k$3$H$G!"8E$$%P!<%8%g%s$K1F6A$rM?$($:$K?7$7$$%P!<%8%g%s$r(B
$B%$%s%9%H!<%k$7!"<B9T$G$-$^$9!#(B</note>
<note type="warning">新しいバージョンを使用する場合は、
実際に運用を始める前に、必ず自分用の環境でテストすべきです。
最終的にアップグレードする前に、非互換性がないかをテストするために、
例えば、異なる <code>--prefix</code> と異なるポート (<directive
module="mpm_common">Listen</directive> ディレクティブで設定します)
を使用することで、古いバージョンに影響を与えずに新しいバージョンを
インストールし、実行できます。</note>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 395228:567441 (outdated) -->
@@ -22,130 +22,130 @@
<manualpage metafile="invoking.xml.meta">
<title>Apache $B$N5/F0(B</title>
<title>Apache の起動</title>
<summary>
<p>Windows $B>e$G$O!"(BApache $B$ODL>o$O(B
Windows NT, 2000, XP $B$G$O%5!<%S%9$H$7$F!"(BWindows 9x, ME
$B$G$O%3%s%=!<%k%"%W%j%1!<%7%g%s$H$7$F<B9T$5$l$^$9!#(B
$B>\:Y$K4X$7$F$O!"!V(B<a href="platform/windows.html#winsvc">
$B%5!<%S%9$H$7$F<B9T$9$k(B</a>$B!W$H!V(B<a
<p>Windows 上では、Apache は通常は
Windows NT, 2000, XP ではサービスとして、Windows 9x, ME
ではコンソールアプリケーションとして実行されます。
詳細に関しては、「<a href="platform/windows.html#winsvc">
サービスとして実行する</a>」と「<a
href="platform/windows.html#wincons">
$B%3%s%=!<%k%"%W%j%1!<%7%g%s$H$7$F<B9T$9$k(B</a>$B!W$r$4Mw2<$5$$!#(B</p>
コンソールアプリケーションとして実行する</a>」をご覧下さい。</p>
<p>Unix$B$G$O!"(B<program>httpd</program>
$B%W%m%0%i%`$,!"%P%C%/%0%i%&%s%I$G>o$K%j%/%(%9%H=hM}$r9T$&(B
$B%G!<%b%s$H$7$F<B9T$5$l$^$9!#$3$NJ8=q$G$O$I$N$h$&$K(B
<program>httpd</program> $B$r5/F0$9$k$+$K$D$$$F5-=R$7$F$$$^$9!#(B</p>
<p>Unixでは、<program>httpd</program>
プログラムが、バックグラウンドで常にリクエスト処理を行う
デーモンとして実行されます。この文書ではどのように
<program>httpd</program> を起動するかについて記述しています。</p>
</summary>
<seealso><a href="stopping.html">$BDd;_$H:F5/F0(B</a></seealso>
<seealso><a href="stopping.html">停止と再起動</a></seealso>
<seealso><program>httpd</program></seealso>
<seealso><program>apachectl</program></seealso>
<section id="startup"><title>Apache $B$N5/F0J}K!(B</title>
<section id="startup"><title>Apache の起動方法</title>
<p>$B$b$7!"@_Dj%U%!%$%kCf$G;XDj$5$l$F$$$k(B
<p>もし、設定ファイル中で指定されている
<directive module="mpm_common">Listen</directive>
$B$,%G%U%)%k%H$N(B 80 ($B$b$7$/$O(B 1024 $B0J2<$NB>$N%]!<%H(B)
$B$G$"$k>l9g$O!"(BApache $B$r5/F0$9$k$?$a$K$O(B root
$B8"8B$,I,MW$K$J$j$^$9$,!"(B
$B$3$l$O$3$NFC8"%]!<%H$K%P%$%s%I$9$k$?$a$G$9!#(B
$B5/F0$7$F!"0lEY%m%0%U%!%$%k$r3+$/$H$$$C$?=`Hw$N$?$a$N(B
$BF0:n$r4v$D$+<B9T$7$?8e$O!"%/%i%$%"%s%H$+$i$N%j%/%(%9%H$KBP$9$k(B
listen $B$H1~Ez$r<B:]$K9T$&(B<em>$B;R(B</em>$B%W%m%;%9$r5/F0$7$^$9!#(B
$B%a%$%s$N(B <program>httpd</program> $B%W%m%;%9$O(B root $B8"8B$GAv$jB3$1$^$9$,!"(B
$B;R%W%m%;%9$O$b$C$HDc$$8"8B$GAv$j$^$9!#(B
$B$3$l$OA*Br$7$?(B<a
href="mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B</a>$B$G@)8f$5$l$^$9!#(B</p>
がデフォルトの 80 (もしくは 1024 以下の他のポート)
である場合は、Apache を起動するためには root
権限が必要になりますが、
これはこの特権ポートにバインドするためです。
起動して、一度ログファイルを開くといった準備のための
動作を幾つか実行した後は、クライアントからのリクエストに対する
listen と応答を実際に行う<em>子</em>プロセスを起動します。
メインの <program>httpd</program> プロセスは root 権限で走り続けますが、
子プロセスはもっと低い権限で走ります。
これは選択した<a
href="mpm.html">マルチプロセッシングモジュール</a>で制御されます。</p>
<p>$B?d>)$N(B <program>httpd</program> $B<B9T%W%m%0%i%`$N5/F0J}K!$O!"(B
<p>推奨の <program>httpd</program> 実行プログラムの起動方法は、
<program>apachectl</program>
$B@)8f%9%/%j%W%H$r;HMQ$9$kJ}K!$G$9!#$3$N%9%/%j%W%H$O!"(B<program>httpd</program>
$B$,%*%Z%l!<%F%#%s%0%7%9%F%`>e$G@5>o$KF0:n$9$k$h$&$KI,MW$J4D6-JQ?t$r(B
$BE,@Z$K@_Dj$7$F!"(B<program>httpd</program> $B%P%$%J%j$r5/F0$7$^$9!#(B
<program>apachectl</program> $B$O$I$s$J%3%^%s%I%i%$%s0z?t$bDL2a$5$;$^$9$N$G!"(B
<program>httpd</program> $B$N$I$N%3%^%s%I%i%$%s%*%W%7%g%s$b(B
<program>apchectl</program> $B$N%*%W%7%g%s$H$7$F;HMQ$G$-$^$9!#(B
$B$^$?!"(B<program>apchectl</program> $B%9%/%j%W%H$rD>@\JT=8$7!"(B
$B%9%/%j%W%H@hF,IU6a$N(B <code>HTTPD</code> $BJQ?t$rJQ99$9$k$3$H$G!"(B
<program>httpd</program> $B%P%$%J%j$N@5$7$$0LCV$r;XDj$7$?$j!"(B<em>$B>o$K(B</em>
$BIU2C$5$;$k%3%^%s%I%i%$%s0z?t$r;XDj$7$?$j$9$k$3$H$,$G$-$^$9!#(B</p>
制御スクリプトを使用する方法です。このスクリプトは、<program>httpd</program>
がオペレーティングシステム上で正常に動作するように必要な環境変数を
適切に設定して、<program>httpd</program> バイナリを起動します。
<program>apachectl</program> はどんなコマンドライン引数も通過させますので、
<program>httpd</program> のどのコマンドラインオプションも
<program>apchectl</program> のオプションとして使用できます。
また、<program>apchectl</program> スクリプトを直接編集し、
スクリプト先頭付近の <code>HTTPD</code> 変数を変更することで、
<program>httpd</program> バイナリの正しい位置を指定したり、<em>常に</em>
付加させるコマンドライン引数を指定したりすることができます。</p>
<p><code>httpd</code> $B$,5/F0$5$l$F$^$::G=i$K$9$k$3$H$O!"(B
<a href="configuring.html">$B@_Dj%U%!%$%k(B</a>
<code>httpd.conf</code> $B$N0LCV$rFCDj$7$FFI$_9~$`$3$H$G$9!#(B
$B$3$N%U%!%$%k$N0LCV$O%3%s%Q%$%k;~$K@_Dj$5$l$^$9$,!"<B9T;~$K(B
<code>-f</code> $B%3%^%s%I%i%$%s%*%W%7%g%s$r;H$C$F(B
$B0LCV$r;XDj$9$k$3$H$b$G$-$^$9!#Nc$($P<!$N$h$&$K$G$9!#(B</p>
<p><code>httpd</code> が起動されてまず最初にすることは、
<a href="configuring.html">設定ファイル</a>
<code>httpd.conf</code> の位置を特定して読み込むことです。
このファイルの位置はコンパイル時に設定されますが、実行時に
<code>-f</code> コマンドラインオプションを使って
位置を指定することもできます。例えば次のようにです。</p>
<example>/usr/local/apache2/bin/apachectl -f
/usr/local/apache2/conf/httpd.conf</example>
<p>$B%9%?!<%H%"%C%W$,K|;v>e<j$/$$$C$?$i!"%5!<%P$O%?!<%_%J%k$+$i(B
$B@Z$jN%$5$l$F!"%3%^%s%I%W%m%s%W%H$,B(:B$KLa$C$F$/$k$G$7$g$&!#(B
$B$3$l$O%5!<%P$,5/F0$7$F$$$k>uBV$r<($7$F$$$^$9!#(B
$B$=$N8e$O%V%i%&%6$G%5!<%P$K@\B3$7$F!"(B
<p>スタートアップが万事上手くいったら、サーバはターミナルから
切り離されて、コマンドプロンプトが即座に戻ってくるでしょう。
これはサーバが起動している状態を示しています。
その後はブラウザでサーバに接続して、
<directive module="core">DocumentRoot</directive>
$B%G%#%l%/%H%j$N%F%9%H%Z!<%8$d$=$3$+$i%j%s%/$5$l$F$$$k(B
$B%m!<%+%k$N%I%-%e%a%s%H$r8+$k$3$H$,$G$-$k$G$7$g$&!#(B</p>
ディレクトリのテストページやそこからリンクされている
ローカルのドキュメントを見ることができるでしょう。</p>
</section>
<section id="errors"><title>$B5/F0;~$N%(%i!<(B</title>
<section id="errors"><title>起動時のエラー</title>
<p>Apache $B$O!"5/F0;~$KCWL?E*$JLdBj$KAx6x$9$k$H!"(B
$B=*N;$9$kA0$K!"%3%s%=!<%k$+(B
<p>Apache は、起動時に致命的な問題に遭遇すると、
終了する前に、コンソールか
<directive module="core">ErrorLog</directive>
$B$N$I$A$i$+$KLdBj$r5-=R$7$?%a%C%;!<%8$r=PNO$7$^$9!#(B
$B:G$b$h$/$"$k%(%i!<%a%C%;!<%8$O(B
$B!V(B<code>Unable to bind to Port ...</code>$B!W(B
$B$G$9!#$3$N%a%C%;!<%8$OIaDL$O<!$N$I$A$i$+$,860x$G$9!#(B</p>
のどちらかに問題を記述したメッセージを出力します。
最もよくあるエラーメッセージは
<code>Unable to bind to Port ...</code>
です。このメッセージは普通は次のどちらかが原因です。</p>
<ul>
<li>root $B$G%m%0%$%s$7$F$$$J$$;~$K!"(B
$BFC8"%]!<%H$G%5!<%P$r5/F0$7$h$&$H$7$?!#(B</li>
<li>root でログインしていない時に、
特権ポートでサーバを起動しようとした。</li>
<li>$BF1$8%]!<%H$K4{$K%P%$%s%I$5$l$F$$$k(B Apache
$B$,$b$&0l$D$"$k$H$-$dB>$N%&%'%V%5!<%P$,B8:_$7$F$$$k;~$K!"(B
$B%5!<%P$r3+;O$7$h$&$H$7$?!#(B</li>
<li>同じポートに既にバインドされている Apache
がもう一つあるときや他のウェブサーバが存在している時に、
サーバを開始しようとした。</li>
</ul>
<p>$B$h$jB?$/$NLdBj2r7h$NJ}:v$N@bL@$O!"(B
Apache <a href="faq/">FAQ</a> $B$r$4Mw2<$5$$!#(B</p>
<p>より多くの問題解決の方策の説明は、
Apache <a href="faq/">FAQ</a> をご覧下さい。</p>
</section>
<section id="boot"><title>$B%V!<%H;~$N5/F0(B</title>
<section id="boot"><title>ブート時の起動</title>
<p>$B%7%9%F%`$,%j%V!<%H$7$?8e$G$b(B
$B%5!<%P$,<B9T$5$lB3$1$k$h$&$K$7$?$$>l9g$O!"(B
<p>システムがリブートした後でも
サーバが実行され続けるようにしたい場合は、
<program>apachectl</program>
$B$r8F$S=P$9$b$N$r%7%9%F%`%9%?!<%H%"%C%W%U%!%$%k(B
($BDL>o(B <code>rc.local</code> $B$d(B <code>rc.N</code>
$BFb$N%U%!%$%k(B) $B$KDI2C$7$J$1$l$P$J$j$^$;$s!#(B
$B$3$NJ}K!$G$O(B Apache $B$r(B root $B8"8B$G5/F0$7$^$9!#(B
$B$3$l$r$9$kA0$K!"%;%-%e%j%F%#$d%"%/%;%9@)8B$,(B
$BE,@Z$K@_Dj$5$l$F$$$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#(B</p>
を呼び出すものをシステムスタートアップファイル
(通常 <code>rc.local</code> <code>rc.N</code>
内のファイル) に追加しなければなりません。
この方法では Apache を root 権限で起動します。
これをする前に、セキュリティやアクセス制限が
適切に設定されていていることを確認してください。</p>
<p><program>apachectl</program> $B%9%/%j%W%H$ODL>o$O!"I8=`E*$J(B SysV init
$B%9%/%j%W%H$H$7$FF0:n$9$k$h$&$K@_7W$5$l$F$$$^$9!#(B
<p><program>apachectl</program> スクリプトは通常は、標準的な SysV init
スクリプトとして動作するように設計されています。
<code>start</code>, <code>restart</code>, <code>stop</code>
$B$H$$$C$?0z?t$r$H$C$F!"(B<program>httpd</program>
$B$X$NE,@Z$J%7%0%J%k$KJQ49$7$^$9!#(B
$B$G$9$+$i!"DL>o$OC1$KE,@Z$J(B init $B%G%#%l%/%H%jFb$+$i(B
<program>apachectl</program> $B$X%j%s%/$9$k$3$H$,$G$-$^$9!#$7$+$7!"(B
$BG0$N$?$a%7%9%F%`$NMW5a$K9gCW$7$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#(B</p>
といった引数をとって、<program>httpd</program>
への適切なシグナルに変換します。
ですから、通常は単に適切な init ディレクトリ内から
<program>apachectl</program> へリンクすることができます。しかし、
念のためシステムの要求に合致していることを確認してください。</p>
</section>
<section id="info"><title>$BDI2C>pJs(B</title>
<section id="info"><title>追加情報</title>
<p><program>httpd</program> $B$d(B
<program>apachectl</program>$B!"%5!<%P$K4^$^$l$F$$$?$=$NB>Jd=u%W%m%0%i%`$N!"(B
$B%3%^%s%I%i%$%s%*%W%7%g%s$K4X$9$kDI2C>pJs$O!"(B
<a href="programs/">$B%5!<%P$HJd=u%W%m%0%i%`(B</a>$B%Z!<%8$K(B
$B5-:\$5$l$F$$$^$9!#(B
Apache $BG[I[$K4^$^$l$F$$$kA4(B<a href="mod/">$B%b%8%e!<%k(B</a>$B!"(B
$B$=$l$K$h$C$FDs6!$5$l$k(B<a href="mod/directives.html">$B%G%#%l%/%F%#%V(B</a>
$B$N%I%-%e%a%s%H$b$"$j$^$9!#(B</p>
<p><program>httpd</program>
<program>apachectl</program>、サーバに含まれていたその他補助プログラムの、
コマンドラインオプションに関する追加情報は、
<a href="programs/">サーバと補助プログラム</a>ページに
記載されています。
Apache 配布に含まれている全<a href="mod/">モジュール</a>、
それによって提供される<a href="mod/directives.html">ディレクティブ</a>
のドキュメントもあります。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 165671:659902 (outdated) -->
@@ -22,35 +22,35 @@
<manualpage metafile="logs.xml.meta">
<title>$B%m%0%U%!%$%k(B</title>
<title>ログファイル</title>
<summary>
<p>$B%&%'%V%5!<%P$r8z2LE*$K4IM}$9$k$?$a$K$O!"%5!<%P$N3hF0$d%Q%U%)!<%^%s%9!"(B
$B:#H/@8$7$F$$$k$+$b$7$l$J$$LdBj$K4X$9$k%U%#!<%I%P%C%/$rF@$k$3$H$,I,MW$G$9!#(B
Apache HTTP $B%5!<%P$K$OHs>o$KJq3gE*$G=@Fp$J%m%.%s%05!G=$,$"$j$^$9!#(B
$B$3$NJ8=q$O%m%.%s%05!G=$N@_Dj$N;EJ}$H!"%m%0$K2?$,=q$+$l$F$$$k$+$r(B
$BM}2r$9$k$?$a$NJ}K!$r@bL@$7$^$9!#(B</p>
<p>ウェブサーバを効果的に管理するためには、サーバの活動やパフォーマンス、
今発生しているかもしれない問題に関するフィードバックを得ることが必要です。
Apache HTTP サーバには非常に包括的で柔軟なロギング機能があります。
この文書はロギング機能の設定の仕方と、ログに何が書かれているかを
理解するための方法を説明します。</p>
</summary>
<section id="security"><title>
$B%;%-%e%j%F%#$K4X$9$k7Y9p(B</title>
セキュリティに関する警告</title>
<p>Apache $B$,%m%0%U%!%$%k$r=q$$$F$$$k%G%#%l%/%H%j$K=q$-9~$a$k?M$O!"(B
$B$[$\3N<B$K%5!<%P$,5/F0$5$l$?(B uid $B$X$N%"%/%;%9$r<j$KF~$l$k$3$H$,$G$-$^$9!#(B
$B$=$7$F!"$=$l$ODL>o$O(B root $B%f!<%6$G$9!#(B
$B$A$c$s$H7k2L$r9M$($k$3$H$J$/!"$=$N%G%#%l%/%H%j$X$N(B
$B=q$-9~$_8"8B$rM?$((B<em>$B$J$$(B</em>$B$G$/$@$5$$!#>\$7$/$O(B
<a href="misc/security_tips.html">$B%;%-%e%j%F%#$N$3$D(B</a>$B$NJ8=q$r(B
$BFI$s$G$/$@$5$$!#(B</p>
<p>Apache がログファイルを書いているディレクトリに書き込める人は、
ほぼ確実にサーバが起動された uid へのアクセスを手に入れることができます。
そして、それは通常は root ユーザです。
ちゃんと結果を考えることなく、そのディレクトリへの
書き込み権限を与え<em>ない</em>でください。詳しくは
<a href="misc/security_tips.html">セキュリティのこつ</a>の文書を
読んでください。</p>
<p>$B2C$($F!"%m%0%U%!%$%k$K$O%/%i%$%"%s%H$+$i$N>pJs$,$=$N$^$^!"(B
$B%(%9%1!<%W$5$l$k$3$H$J$/=q$+$l$F$$$^$9!#$G$9$+$i!"0-0U$N$"$k(B
$B%/%i%$%"%s%H$,%m%0%U%!%$%k$K@)8fJ8;z$rA^F~$9$k$3$H$,$G$-$^$9!#(B
$B@8$N%m%0$r07$&$H$-$OCm0U$7$F$/$@$5$$!#(B</p>
<p>加えて、ログファイルにはクライアントからの情報がそのまま、
エスケープされることなく書かれています。ですから、悪意のある
クライアントがログファイルに制御文字を挿入することができます。
生のログを扱うときは注意してください。</p>
</section>
<section id="errorlog">
<title>$B%(%i!<%m%0(B</title>
<title>エラーログ</title>
<related>
<directivelist>
<directive module="core">ErrorLog</directive>
@@ -58,22 +58,22 @@
</directivelist>
</related>
<p><directive module="core">ErrorLog</directive> $B%G%#%l%/%F%#%V$K$h$j(B
$BL>A0$H>l=j$,7h$^$k%5!<%P$N%(%i!<%m%0$O!"0lHV=EMW$J%m%0%U%!%$%k$G$9!#(B
Apache $B$N?GCG>pJs$O$3$3$KAw$i$l!"%j%/%(%9%H$r=hM}$7$F$$$k$H$-$K(B
$BH/@8$7$?%(%i!<$O$9$Y$F$3$3$K5-O?$5$l$^$9!#%5!<%P$r5/F0$7$?$H$-$d!"(B
$B%5!<%P$NF0:n$KLdBj$,5/$3$C$?$H$-$O!"0lHV:G=i$KD4$Y$k$Y$-(B
$B$H$3$m$G$9!#4V0c$$$N>\:Y$d=$@5J}K!$,$=$3$K=q$+$l$F$$$k$3$H$,(B
$B$h$/$"$j$^$9!#(B</p>
<p><directive module="core">ErrorLog</directive> ディレクティブにより
名前と場所が決まるサーバのエラーログは、一番重要なログファイルです。
Apache の診断情報はここに送られ、リクエストを処理しているときに
発生したエラーはすべてここに記録されます。サーバを起動したときや、
サーバの動作に問題が起こったときは、一番最初に調べるべき
ところです。間違いの詳細や修正方法がそこに書かれていることが
よくあります。</p>
<p>$B%(%i!<%m%0$OIaDL$O%U%!%$%k$K=q$+$l$^$9(B ($BDL>o(B unix $B%7%9%F%`$G$O(B
<code>error_log</code>$B!"(BWindows $B$H(B OS/2 $B$G$O(B <code>error.log</code>)$B!#(B
Unix $B%7%9%F%`$G$O%(%i!<$r(B <code>syslog</code> $B$d(B
<a href="#piped">$B%Q%$%W$G%W%m%0%i%`$KAw$k(B</a> $B$3$H$,$G$-$^$9!#(B</p>
<p>エラーログは普通はファイルに書かれます (通常 unix システムでは
<code>error_log</code>、Windows と OS/2 では <code>error.log</code>)
Unix システムではエラーを <code>syslog</code>
<a href="#piped">パイプでプログラムに送る</a> ことができます。</p>
<p>$B%(%i!<%m%0$N=q<0$OHf3SE*<+M3EY$N9b$$$b$N$G!"@bL@E*$K=q$+$l$F$$$^$9!#(B
$B$?$@$7!"$$$/$D$+$N>pJs$O$[$H$s$I$N%(%i!<%m%0$N%(%s%H%j$K$"$j$^$9!#(B
$BNc$($P!"BeI=E*$J$b$N$K<!$N$h$&$J%a%C%;!<%8$,$"$j$^$9!#(B</p>
<p>エラーログの書式は比較的自由度の高いもので、説明的に書かれています。
ただし、いくつかの情報はほとんどのエラーログのエントリにあります。
例えば、代表的なものに次のようなメッセージがあります。</p>
<example>
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
@@ -81,32 +81,32 @@
/export/home/live/ap/htdocs/test
</example>
<p>$B%m%0%(%s%H%j$N:G=i$N9`L\$O%a%C%;!<%8$NF|IU$H;~9o$G$9!#(B
$BFs$D$a$N9`L\$OJs9p$5$l$F$$$k%(%i!<$N=EMWEY$G$9!#(B
<directive module="core">LogLevel</directive> $B$G=EMWEY$N%l%Y%k$r(B
$B@)8B$9$k$3$H$K$h$j%(%i!<%m%0$KAw$i$l$k%(%i!<$N<oN`$r@)8f$9$k$3$H$,(B
$B$G$-$^$9!#;0$DL\$N9`L\$O%(%i!<$rH/@8$5$;$?%/%i%$%"%s%H$N(B IP $B%"%I%l%9(B
$B$G$9!#;D$j$O%a%C%;!<%8$G!"$3$N>l9g$O%5!<%P$,%/%i%$%"%s%H$N%"%/%;%9$r(B
$B5qH]$9$k$h$&$K@_Dj$5$l$F$$$k!"$H$$$&$3$H$r<($7$F$$$^$9!#(B
$B%5!<%P$O%j%/%(%9%H$5$l$?J8=q$N(B ($B%&%'%V$N%Q%9$G$O$J$/(B) $B%U%!%$%k%7%9%F%`$N(B
$B%Q%9$rJs9p$7$^$9!#(B</p>
<p>ログエントリの最初の項目はメッセージの日付と時刻です。
二つめの項目は報告されているエラーの重要度です。
<directive module="core">LogLevel</directive> で重要度のレベルを
制限することによりエラーログに送られるエラーの種類を制御することが
できます。三つ目の項目はエラーを発生させたクライアントの IP アドレス
です。残りはメッセージで、この場合はサーバがクライアントのアクセスを
拒否するように設定されている、ということを示しています。
サーバはリクエストされた文書の (ウェブのパスではなく) ファイルシステムの
パスを報告します。</p>
<p>$BHs>o$K9-HO0O$N%a%C%;!<%8$,%(%i!<%m%0$K8=$l$^$9!#$?$$$F$$$N$b$N$O(B
$B>e$NNc$N$h$&$J46$8$G$9!#%(%i!<%m%0$K$O(B CGI $B%9%/%j%W%H$N%G%P%C%0(B
$B=PNO$b=q$+$l$^$9!#(BCGI $B%9%/%j%W%H$,(B <code>stderr</code> $B$K=q$$$?(B
$B$9$Y$F$N>pJs$OD>@\%(%i!<%m%0$K%3%T!<$5$l$^$9!#(B</p>
<p>非常に広範囲のメッセージがエラーログに現れます。たいていのものは
上の例のような感じです。エラーログには CGI スクリプトのデバッグ
出力も書かれます。CGI スクリプトが <code>stderr</code> に書いた
すべての情報は直接エラーログにコピーされます。</p>
<p>$B>pJs$rDI2C$7$?$j:o=|$7$?$j$7$F%(%i!<%m%0$r%+%9%?%^%$%:$9$k$3$H$O(B
$B$G$-$^$;$s!#$7$+$7!"%j%/%(%9%H$KBP$9$k%(%i!<%m%0$N%(%s%H%j$O!"(B
$BBP1~$9$k%(%s%H%j$,(B<a href="#accesslog">$B%"%/%;%9%m%0(B</a>$B$K$"$j$^$9!#(B
$BNc$($P!">e$NNc$N%(%s%H%j$O%"%/%;%9%m%0$N%9%F!<%?%9%3!<%I(B 403 $B$N(B
$B%(%s%H%j$KBP1~$7$^$9!#%"%/%;%9%m%0$O%+%9%?%^%$%:2DG=$G$9$N$G!"(B
$B$=$A$i$r;H$&$3$H$K$h$j%(%i!<$N>u67$K4X$9$k>pJs$r$h$jB?$/(B
$B<j$KF~$l$k$3$H$,$G$-$^$9!#(B</p>
<p>情報を追加したり削除したりしてエラーログをカスタマイズすることは
できません。しかし、リクエストに対するエラーログのエントリは、
対応するエントリが<a href="#accesslog">アクセスログ</a>にあります。
例えば、上の例のエントリはアクセスログのステータスコード 403 の
エントリに対応します。アクセスログはカスタマイズ可能ですので、
そちらを使うことによりエラーの状況に関する情報をより多く
手に入れることができます。</p>
<p>$B%F%9%H$N:GCf$O!"LdBj$,H/@8$7$F$$$k$+$I$&$+$r8+$k$?$a$K!"(B
$B>o$K%(%i!<%m%0$r4F;k$9$k$N$,Lr$KN)$D>l9g$,$h$/$"$j$^$9!#(B
Unix $B%7%9%F%`$G$O!"<!$N$b$N$r;H$&$3$H$,$G$-$^$9!#(B</p>
<p>テストの最中は、問題が発生しているかどうかを見るために、
常にエラーログを監視するのが役に立つ場合がよくあります。
Unix システムでは、次のものを使うことができます。</p>
<example>
tail -f error_log
@@ -114,7 +114,7 @@
</section>
<section id="accesslog">
<title>$B%"%/%;%9%m%0(B</title>
<title>アクセスログ</title>
<related>
<modulelist>
@@ -128,121 +128,121 @@
</directivelist>
</related>
<p>$B%5!<%P%"%/%;%9%m%0$O%5!<%P$,=hM}$r$7$?$9$Y$F$N%j%/%(%9%H$r(B
$B5-O?$7$^$9!#%"%/%;%9%m%0$N>l=j$HFbMF$O(B <directive
<p>サーバアクセスログはサーバが処理をしたすべてのリクエストを
記録します。アクセスログの場所と内容は <directive
module="mod_log_config">CustomLog</directive>
$B%G%#%l%/%F%#%V$K$h$j7h$^$j$^$9!#%m%0$NFbMF$NA*Br$r4J7i$K$9$k$?$a$K(B
ディレクティブにより決まります。ログの内容の選択を簡潔にするために
<directive module="mod_log_config">LogFormat</directive>
$B%G%#%l%/%F%#%V$r;HMQ$9$k$3$H$,$G$-$^$9!#$3$N%;%/%7%g%s$O%"%/%;%9%m%0$K(B
$B>pJs$r5-O?$9$k$?$a$N%5!<%P$N@_DjJ}K!$r@bL@$7$^$9!#(B</p>
ディレクティブを使用することができます。このセクションはアクセスログに
情報を記録するためのサーバの設定方法を説明します。</p>
<p>$B$b$A$m$s!"%"%/%;%9%m%0$K>pJs$rC_@Q$9$k$3$H$O%m%04IM}$N(B
$B;O$^$j$K2a$.$^$;$s!#<!$NCJ3,$OM-MQ$JE}7W$r<h$k$?$a$K$3$N>pJs$r(B
$B2r@O$9$k$3$H$G$9!#0lHLE*$J%m%02r@O$O$3$NJ8=q$NHO0O30$G!"(B
$B%&%'%V%5!<%P<+?H$N;E;v$H$$$&$o$1$G$b$"$j$^$;$s!#$3$NOC$d!"(B
$B%m%02r@O$r9T$J$&%"%W%j%1!<%7%g%s$N>pJs$rF@$k$K$O!"(B<a
<p>もちろん、アクセスログに情報を蓄積することはログ管理の
始まりに過ぎません。次の段階は有用な統計を取るためにこの情報を
解析することです。一般的なログ解析はこの文書の範囲外で、
ウェブサーバ自身の仕事というわけでもありません。この話や、
ログ解析を行なうアプリケーションの情報を得るには、<a
href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_analysis/">
Open Directory</a> $B$d(B <a
Open Directory</a> <a
href="http://dir.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">
Yahoo</a> $B$rD4$Y$F$/$@$5$$!#(B</p>
Yahoo</a> を調べてください。</p>
<p>$B$$$m$s$J%P!<%8%g%s$N(B Apache httpd $B$,(B mod_log_config,
mod_log_agent, <code>TransferLog</code> $B%G%#%l%/%F%#%V$H$$$C$?!"(B
$BB>$N%b%8%e!<%k$d%G%#%l%/%F%#%V$r;H$C$F%"%/%;%9$N%m%.%s%0$r(B
$B@)8f$7$F$-$^$7$?!#:#$G$O!"(B<directive
module="mod_log_config">CustomLog</directive> $B$,$9$Y$F$N8E$$(B
$B%G%#%l%/%F%#%V$N5!G=$r4^$`$h$&$K$J$C$F$$$^$9!#(B</p>
<p>いろんなバージョンの Apache httpd mod_log_config,
mod_log_agent, <code>TransferLog</code> ディレクティブといった、
他のモジュールやディレクティブを使ってアクセスのロギングを
制御してきました。今では、<directive
module="mod_log_config">CustomLog</directive> がすべての古い
ディレクティブの機能を含むようになっています。</p>
<p>$B%"%/%;%9%m%0$N=q<0$OHs>o$K=@Fp$J@_Dj$,2DG=$G$9!#(B
$B=q<0$O(B C $B$N(B printf(1) $B%U%)!<%^%C%HJ8;zNs$KHs>o$K;w$?(B
<directive module="mod_log_config">$B%U%)!<%^%C%HJ8;zNs(B</directive>
$B$K$h$j;XDj$5$l$^$9!#$$$/$D$+<!$N@a$GNc$r<($7$^$9!#(B
$B%U%)!<%^%C%HJ8;zNs$K;HMQ$G$-$kFbMF$N0lMw$O(B <a
href="mod/mod_log_config.html">mod_log_config $B$NJ8=q(B</a>
$B$r8+$F$/$@$5$$!#(B</p>
<p>アクセスログの書式は非常に柔軟な設定が可能です。
書式は C の printf(1) フォーマット文字列に非常に似た
<directive module="mod_log_config">フォーマット文字列</directive>
により指定されます。いくつか次の節で例を示します。
フォーマット文字列に使用できる内容の一覧は <a
href="mod/mod_log_config.html">mod_log_config の文書</a>
を見てください。</p>
<section id="common">
<title>Common Log Format</title>
<p>$B%"%/%;%9%m%0$N$h$/$"$k@_Dj$K0J2<$N$b$N$,$"$j$^$9!#(B</p>
<p>アクセスログのよくある設定に以下のものがあります。</p>
<example>
LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
CustomLog logs/access_log common
</example>
<p>$B$3$l$O!"(B<em>$B%K%C%/%M!<%`(B</em> <code>common</code> $B$rDj5A$7!"(B
$B%m%0$N%U%)!<%^%C%HJ8;zNs$N0l$D$H4XO"IU$1$^$9!#%U%)!<%^%C%HJ8;zNs$O(B
$B%Q!<%;%s%H%G%#%l%/%F%#%V$+$i$J$j!"$=$l$>$l$N%Q!<%;%s%H%G%#%l%/%F%#%V$O(B
$B%5!<%P$K$I$N>pJs$r%m%.%s%0$9$k$+$r;X<($7$^$9!#%U%)!<%^%C%HJ8;zNs$K(B
$BJ8;z$r$=$N$^$^F~$l$k$3$H$b$G$-!"$=$l$i$O%m%0$N=PNO$KD>@\%3%T!<$5$l$^$9!#(B
$B$=$3$K0zMQJ8;z(B (<code>"</code>) $B$r=q$/$H$-$O!"(B
$B%U%)!<%^%C%HJ8;zNs$N:G8e$H$7$F2r<a(B
$B$5$l$k$3$H$rKI$0$?$a$K%P%C%/%9%i%C%7%e$G%(%9%1!<%W$9$kI,MW$,$"$j$^$9!#(B
$B%U%)!<%^%C%HJ8;zNs$K$O2~9TMQ$N(B "<code>\n</code>"$B!"%?%VMQ$N(B
"<code>\t</code>" $B$H$$$&FCJL$J@)8fJ8;z$b4^$a$k$3$H$,$G$-$^$9!#(B</p>
<p>これは、<em>ニックネーム</em> <code>common</code> を定義し、
ログのフォーマット文字列の一つと関連付けます。フォーマット文字列は
パーセントディレクティブからなり、それぞれのパーセントディレクティブは
サーバにどの情報をロギングするかを指示します。フォーマット文字列に
文字をそのまま入れることもでき、それらはログの出力に直接コピーされます。
そこに引用文字 (<code>"</code>) を書くときは、
フォーマット文字列の最後として解釈
されることを防ぐためにバックスラッシュでエスケープする必要があります。
フォーマット文字列には改行用の "<code>\n</code>"、タブ用の
"<code>\t</code>" という特別な制御文字も含めることができます。</p>
<p><directive module="mod_log_config">CustomLog</directive> $B%G%#%l%/%F%#%V$O(B
$B4{$KDj5A$5$l$?(B
<em>$B%K%C%/%M!<%`(B</em> $B$r;H$C$F?7$7$$%m%0%U%!%$%k$r@_Dj$7$^$9!#(B
$B%"%/%;%9%m%0$N%U%!%$%kL>$O%9%i%C%7%e$G;O$^$i$J$$8B$j!"(B
<directive module="core">ServerRoot</directive> $B$+$i$NAjBP%Q%9$H$7$F(B
$B07$o$l$^$9!#(B</p>
<p><directive module="mod_log_config">CustomLog</directive> ディレクティブは
既に定義された
<em>ニックネーム</em> を使って新しいログファイルを設定します。
アクセスログのファイル名はスラッシュで始まらない限り、
<directive module="core">ServerRoot</directive> からの相対パスとして
扱われます。</p>
<p>$B>e$N@_Dj$O(B Common Log Format (CLF) $B$H8F$P$l$k7A<0$G(B
$B%m%0%(%s%H%j$r=q$-$^$9!#$3$NI8=`$N7A<0$O0[$J$k%&%'%V%5!<%P$NB?$/$,(B
$B@8@.$9$k$3$H$,$G$-!"B?$/$N%m%02r@O%W%m%0%i%`$,FI$_$3$`$3$H$,$G$-$^$9!#(B
CLF $B$K$h$j@8@.$5$l$?%m%0%U%!%$%k$N%(%s%H%j$O0J2<$N$h$&$K$J$j$^$9(B:</p>
<p>上の設定は Common Log Format (CLF) と呼ばれる形式で
ログエントリを書きます。この標準の形式は異なるウェブサーバの多くが
生成することができ、多くのログ解析プログラムが読みこむことができます。
CLF により生成されたログファイルのエントリは以下のようになります:</p>
<example>
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
/apache_pb.gif HTTP/1.0" 200 2326
</example>
<p>$B$3$N%m%0%(%s%H%j$N$=$l$>$l$NItJ,$N0UL#$O0J2<$G@bL@$7$^$9!#(B</p>
<p>このログエントリのそれぞれの部分の意味は以下で説明します。</p>
<dl>
<dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
<dd>$B$3$l$O%5!<%P$X%j%/%(%9%H$r$7$?%/%i%$%"%s%H(B ($B%j%b!<%H%[%9%H(B)
$B$N(B IP $B%"%I%l%9$G$9!#(B<directive
module="core">HostnameLookups</directive> $B$,(B
<code>On</code> $B$N>l9g$O!"%5!<%P$O%[%9%HL>$rD4$Y$F!"(B
IP $B%"%I%l%9$,=q$+$l$F$$$k$H$3$m$K5-O?$7$^$9!#$7$+$7!"$3$N@_Dj$O(B
$B%5!<%P$r$+$J$jCY$/$9$k$N$G!"$"$^$j$*4+$a$G$-$^$;$s!#(B
$B$=$&$G$O$J$/!"(B<program>logresolve</program> $B$N(B
$B$h$&$J%m%0$N8e=hM}$r9T$J$&%W%m%0%i%`$G%[%9%HL>$rD4$Y$k$N$,NI$$$G$7$g$&!#(B
$B$3$3$KJs9p$5$l$k(B IP $B%"%I%l%9$OI,$:$7$b%f!<%6$,;H$C$F$$$k%^%7%s$N(B
$B$b$N$G$"$k$H$O8B$j$^$;$s!#%f!<%6$H%5!<%P$N4V$K%W%m%-%7%5!<%P$,(B
$B$"$l$P!"$3$N%"%I%l%9$O85$N%^%7%s$N$b$N$G$O$J$/!"%W%m%-%7$N(B
$B%"%I%l%9$K$J$j$^$9!#(B</dd>
<dd>これはサーバへリクエストをしたクライアント (リモートホスト)
の IP アドレスです。<directive
module="core">HostnameLookups</directive>
<code>On</code> の場合は、サーバはホスト名を調べて、
IP アドレスが書かれているところに記録します。しかし、この設定は
サーバをかなり遅くするので、あまりお勧めできません。
そうではなく、<program>logresolve</program>
ようなログの後処理を行なうプログラムでホスト名を調べるのが良いでしょう。
ここに報告される IP アドレスは必ずしもユーザが使っているマシンの
ものであるとは限りません。ユーザとサーバの間にプロキシサーバが
あれば、このアドレスは元のマシンのものではなく、プロキシの
アドレスになります。</dd>
<dt><code>-</code> (<code>%l</code>)</dt>
<dd>$B=PNOCf$N!V%O%$%U%s!W$OMW5a$5$l$?>pJs$,<j$KF~$i$J$+$C$?$H$$$&$3$H$r(B
$B0UL#$7$^$9!#$3$N>l9g!"<hF@$G$-$J$+$C$?>pJs$O%/%i%$%"%s%H$N%^%7%s$N(B
<code>identd</code> $B$K$h$j7h$^$k(B RFC 1413 $B$N%/%i%$%"%s%H$N(B
$B%"%$%G%s%F%#%F%#$G$9!#$3$N>pJs$O$"$^$j?.MQ$9$k$3$H$,$G$-$:!"(B
$B$7$C$+$j$H4IM}$5$l$?FbIt%M%C%H%o!<%/$r=|$$$F$O;H$&$Y$-$G$O$"$j$^$;$s!#(B
Apache $B$O(B <directive
module="core">IdentityCheck</directive> $B$,(B
<code>On</code> $B$K$J$C$F$$$J$$8B$j!"$3$N>pJs$rF@$h$&$H$9$i$7$^$;$s!#(B</dd>
<dd>出力中の「ハイフン」は要求された情報が手に入らなかったということを
意味します。この場合、取得できなかった情報はクライアントのマシンの
<code>identd</code> により決まる RFC 1413 のクライアントの
アイデンティティです。この情報はあまり信用することができず、
しっかりと管理された内部ネットワークを除いては使うべきではありません。
Apache <directive
module="core">IdentityCheck</directive>
<code>On</code> になっていない限り、この情報を得ようとすらしません。</dd>
<dt><code>frank</code> (<code>%u</code>)</dt>
<dd>$B$3$l$O(B HTTP $BG'>Z$K$h$k!"%I%-%e%a%s%H$r%j%/%(%9%H$7$??M$N(B
$B%f!<%6(B ID $B$G$9!#(BCGI $B%9%/%j%W%H$K$ODL>oF1$8CM$,(B <code>REMOTE_USER</code>
$B4D6-JQ?t$H$7$FM?$($i$l$^$9!#%j%/%(%9%H$N%9%F!<%?%9%3!<%I(B
($B0J2<$r;2>H(B) $B$,(B 401 $B$G$"$C$?>l9g$O!"%f!<%6$OG'>Z$K<:GT$7$F$$$k$N$G!"(B
$B$3$NCM$O?.MQ$G$-$^$;$s!#%I%-%e%a%s%H$,%Q%9%o!<%I$GJ]8n$5$l$F$$$J$$(B
$B>l9g$O!"$3$N%(%s%H%j$OA0$N$b$N$HF1$8$h$&$K(B "<code>-</code>" $B$K(B
$B$J$j$^$9!#(B</dd>
<dd>これは HTTP 認証による、ドキュメントをリクエストした人の
ユーザ ID です。CGI スクリプトには通常同じ値が <code>REMOTE_USER</code>
環境変数として与えられます。リクエストのステータスコード
(以下を参照) が 401 であった場合は、ユーザは認証に失敗しているので、
この値は信用できません。ドキュメントがパスワードで保護されていない
場合は、このエントリは前のものと同じように "<code>-</code>"
なります。</dd>
<dt><code>[10/Oct/2000:13:55:36 -0700]</code>
(<code>%t</code>)</dt>
<dd>
$B%5!<%P$,%j%/%(%9%H$r<u$1<h$C$?;~9o$G$9!#=q<0$O(B:
サーバがリクエストを受け取った時刻です。書式は:
<p class="indent">
<code>[day/month/year:hour:minute:second zone]<br />
@@ -254,43 +254,43 @@
second = 2*digit<br />
zone = (`+' | `-') 4*digit</code>
</p>
$B%m%0$N%U%)!<%^%C%HJ8;zNs$K(B <code>%{format}t</code> $B$r(B
$B;XDj$9$k$3$H$G!"JL$N7A<0$G;~9o$rI=<($5$;$k$3$H$b$G$-$^$9!#(B
$B$3$N$H$-!"(B<code>format</code> $B$O(B C $B$NI8=`%i%$%V%i%j$N(B
<code>strftime(3)</code> $B$N7A<0$K$J$j$^$9!#(B
ログのフォーマット文字列に <code>%{format}t</code>
指定することで、別の形式で時刻を表示させることもできます。
このとき、<code>format</code> は C の標準ライブラリの
<code>strftime(3)</code> の形式になります。
</dd>
<dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
(<code>\"%r\"</code>)</dt>
<dd>$B%/%i%$%"%s%H$+$i$N%j%/%(%9%H$,Fs=E0zMQId$NCf$K<($5$l$F$$$^$9!#(B
$B%j%/%(%9%H$K$OB?$/$NM-MQ$J>pJs$,$"$j$^$9!#$^$:!"$3$N>l9g%/%i%$%"%s%H$,(B
$B;H$C$?%a%=%C%I$O(B <code>GET</code> $B$G$9!#<!$K!"%/%i%$%"%s%H$O(B
$B%j%=!<%9(B <code>/apache_pb.gif</code> $B$rMW5a$7$^$7$?!#$=$7$F!"(B
$B%/%i%$%"%s%H$O%W%m%H%3%k(B <code>HTTP/1.0</code> $B$r;HMQ$7$^$7$?!#(B
$B%j%/%(%9%H$N3FItJ,$rFHN)$K%m%0<}=8$9$k$3$H$b$G$-$^$9!#Nc$($P!"(B
$B%U%)!<%^%C%HJ8;zNs(B "<code>%m %U%q %H</code>" $B$O(B
$B%a%=%C%I!"%Q%9!"%/%(%jJ8;zNs!"%W%m%H%3%k$r%m%0<}=8$7!"(B
$B7k6I(B "<code>%r</code>" $B$H$^$C$?$/F1$8=PNO$K$J$j$^$9!#(B</dd>
<dd>クライアントからのリクエストが二重引用符の中に示されています。
リクエストには多くの有用な情報があります。まず、この場合クライアントが
使ったメソッドは <code>GET</code> です。次に、クライアントは
リソース <code>/apache_pb.gif</code> を要求しました。そして、
クライアントはプロトコル <code>HTTP/1.0</code> を使用しました。
リクエストの各部分を独立にログ収集することもできます。例えば、
フォーマット文字列 "<code>%m %U%q %H</code>"
メソッド、パス、クエリ文字列、プロトコルをログ収集し、
結局 "<code>%r</code>" とまったく同じ出力になります。</dd>
<dt><code>200</code> (<code>%&gt;s</code>)</dt>
<dd>$B%5!<%P$,%/%i%$%"%s%H$KAw$jJV$9%9%F!<%?%9%3!<%I$G$9!#(B
$B$3$N>pJs$O!"%j%/%(%9%H$,@.8y1~Ez(B (2 $B$G;O$^$k%3!<%I(B) $B$G$"$C$?$+!"(B
$B%j%@%$%l%/%7%g%s(B (3 $B$G;O$^$k%3!<%I(B) $B$G$"$C$?$+!"%/%i%$%"%s%H$K$h$k(B
$B%(%i!<(B (4 $B$G;O$^$k%3!<%I(B) $B$G$"$C$?$+!"%5!<%P$N%(%i!<(B (5 $B$G;O$^$k%3!<%I(B)
$B$G$"$C$?$+!"$r8=$9$N$G!"Hs>o$KBg@Z$G$9!#%9%F!<%?%9%3!<%I$N(B
$B40A4$J%j%9%H$O(B <a
<dd>サーバがクライアントに送り返すステータスコードです。
この情報は、リクエストが成功応答 (2 で始まるコード) であったか、
リダイレクション (3 で始まるコード) であったか、クライアントによる
エラー (4 で始まるコード) であったか、サーバのエラー (5 で始まるコード)
であったか、を現すので、非常に大切です。ステータスコードの
完全なリストは <a
href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">HTTP
$B5,3J(B</a> (RFC2616 $BBh(B 10 $B@a(B) $B$K$"$j$^$9!#(B</dd>
規格</a> (RFC2616 第 10 節) にあります。</dd>
<dt><code>2326</code> (<code>%b</code>)</dt>
<dd>$B$3$N:G8e$N%(%s%H%j$O%/%i%$%"%s%H$KAw?.$5$l$?%*%V%8%'%/%H$N!"(B
$B1~Ez%X%C%@$r=|$$$?%5%$%:$r8=$7$^$9!#%3%s%F%s%H$,%/%i%$%"%s%H$KAw$i$l$J$+$C$?(B
$B>l9g$O!"$3$NCM$O(B "<code>-</code>" $B$K$J$j$^$9!#%3%s%F%s%H$,L5$$>l9g$K(B
"<code>0</code>" $B$r%m%0<}=8$9$k$K$O!"(B<code>%b</code> $B$G$O$J$/(B
<code>%B</code> $B$r;H$C$F$/$@$5$$!#(B</dd>
<dd>この最後のエントリはクライアントに送信されたオブジェクトの、
応答ヘッダを除いたサイズを現します。コンテントがクライアントに送られなかった
場合は、この値は "<code>-</code>" になります。コンテントが無い場合に
"<code>0</code>" をログ収集するには、<code>%b</code> ではなく
<code>%B</code> を使ってください。</dd>
</dl>
</section>
@@ -298,8 +298,8 @@
<section id="combined">
<title>Combined Log Format</title>
<p>$B$b$&0l$D$N$h$/;H$o$l$k=q<0$O(B Combined Log Format $B$H8F$P$l$F$$$^$9!#(B
$B0J2<$N$h$&$K$7$F;H$&$3$H$,$G$-$^$9!#(B</p>
<p>もう一つのよく使われる書式は Combined Log Format と呼ばれています。
以下のようにして使うことができます。</p>
<example>
LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
@@ -307,11 +307,11 @@
CustomLog log/access_log combined
</example>
<p>$B$3$N=q<0$N:G=i$NJ}$O(B Common Log Format $B$H$^$C$?$/F1$8$G!":G8e$K(B
$BFs$DDI2C$N%(%s%H%j$,$"$j$^$9!#DI2C$N%(%s%H%j$O%Q!<%;%s%H%G%#%l%/%F%#%V(B
<code>%{<em>header</em>}i</code> $B$r;H$C$F$$$^$9!#$3$3$G(B
<em>header</em> $B$O(B HTTP $B$N%j%/%(%9%H%X%C%@$N$I$l$+$G$9!#$3$N=q<0$K$h$k(B
$B%"%/%;%9%m%0$O0J2<$N$h$&$J46$8$K$J$j$^$9(B:</p>
<p>この書式の最初の方は Common Log Format とまったく同じで、最後に
二つ追加のエントリがあります。追加のエントリはパーセントディレクティブ
<code>%{<em>header</em>}i</code> を使っています。ここで
<em>header</em> は HTTP のリクエストヘッダのどれかです。この書式による
アクセスログは以下のような感じになります:</p>
<example>
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
@@ -320,36 +320,36 @@
(Win98; I ;Nav)"
</example>
<p>$BDI2C$N%(%s%H%j$O(B:</p>
<p>追加のエントリは:</p>
<dl>
<dt><code>"http://www.example.com/start.html"</code>
(<code>\"%{Referer}i\"</code>)</dt>
<dd>"Referer" ($B0U?^E*$JDV$j4V0c$$(B) HTTP $B%j%/%(%9%H%X%C%@$G$9!#(B
$B$3$l$O%/%i%$%"%s%H$,Js9p$7$F$/$k;2>H85$N%5%$%H$rI=$7$^$9!#(B
($B$3$N>l9g$O!"(B<code>/apache_pb.gif</code> $B$K%j%s%/$7$F$$$k$+!"(B
$B$=$l$r4^$s$G$$$k%Z!<%8$G$9(B)$B!#(B</dd>
<dd>"Referer" (意図的な綴り間違い) HTTP リクエストヘッダです。
これはクライアントが報告してくる参照元のサイトを表します。
(この場合は、<code>/apache_pb.gif</code> にリンクしているか、
それを含んでいるページです)。</dd>
<dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
(<code>\"%{User-agent}i\"</code>)</dt>
<dd>User-Agent HTTP $B%j%/%(%9%H%X%C%@$G$9!#$3$l$O%/%i%$%"%s%H$N%V%i%&%6$,(B
$B<+J,<+?H$N$3$H$rJs9p$7$F$/$k>pJs$G$9!#(B</dd>
<dd>User-Agent HTTP リクエストヘッダです。これはクライアントのブラウザが
自分自身のことを報告してくる情報です。</dd>
</dl>
</section>
<section id="multiple">
<title>$BJ#?t$N%"%/%;%9%m%0(B</title>
<title>複数のアクセスログ</title>
<p>$BJ#?t$N%"%/%;%9%m%0$OC1$K@_Dj%U%!%$%k$KJ#?t$N(B <directive
<p>複数のアクセスログは単に設定ファイルに複数の <directive
module="mod_log_config">CustomLog</directive>
$B%G%#%l%/%F%#%V$r=q$/$3$H$G:n@.$5$l$^$9!#Nc$($P!"0J2<$N%G%#%l%/%F%#%V$O(B
$B;0$D$N%"%/%;%9%m%0$r:n$j$^$9!#:G=i$N$b$N$O4pK\E*$J(B CLF $B$N>pJs$G!"(B
$BFs$DL\$H;0$DL\$O(B referer $B$H%V%i%&%6$N>pJs$G$9!#:G8eFs$D$N(B
<directive module="mod_log_config">CustomLog</directive> $B$O(B
<code>ReferLog</code> $B%G%#%l%/%F%#%V$H(B
<code>AgentLog</code> $B%G%#%l%/%F%#%V$N8z2L$r$^$M$kJ}K!$r<($7$F$$$^$9!#(B</p>
ディレクティブを書くことで作成されます。例えば、以下のディレクティブは
三つのアクセスログを作ります。最初のものは基本的な CLF の情報で、
二つ目と三つ目は referer とブラウザの情報です。最後二つの
<directive module="mod_log_config">CustomLog</directive>
<code>ReferLog</code> ディレクティブと
<code>AgentLog</code> ディレクティブの効果をまねる方法を示しています。</p>
<example>
LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
@@ -358,26 +358,26 @@
CustomLog logs/agent_log "%{User-agent}i"
</example>
<p>$B$3$NNc$O(B <directive module="mod_log_config">LogFormat</directive> $B$G(B
$B%K%C%/%M!<%`$rDj5A$9$kI,MW$,$J$$!"(B
$B$H$$$&$3$H$b<($7$F$$$^$9!#%K%C%/%M!<%`$NBe$o$j$K!"(B
<directive module="mod_log_config">CustomLog</directive> $B%G%#%l%/%F%#%V$K(B
$BD>@\%m%0$N=q<0$r;XDj$9$k$3$H$,$G$-$^$9!#(B</p>
<p>この例は <directive module="mod_log_config">LogFormat</directive>
ニックネームを定義する必要がない、
ということも示しています。ニックネームの代わりに、
<directive module="mod_log_config">CustomLog</directive> ディレクティブに
直接ログの書式を指定することができます。</p>
</section>
<section id="conditional">
<title>$B>r7oIU$-%m%0(B</title>
<title>条件付きログ</title>
<p>$B%/%i%$%"%s%H$N%j%/%(%9%H$NFCD'$K4p$E$$$F%"%/%;%9%m%0$K%(%s%H%j$N(B
$B0lIt$r%m%.%s%0$7$J$$J}$,JXMx$J$3$H$,$"$j$^$9!#$3$l$O(B <a
href="env.html">$B4D6-JQ?t(B</a> $B$NJd=u$K$h$j4JC1$K<B8=$G$-$^$9!#$^$:!"(B
$B%j%/%(%9%H$,2?$i$+$N>r7o$K9g$&$H$$$&$3$H$r8=$9$?$a$K4D6-JQ?t$,(B
$B@_Dj$5$l$kI,MW$,$"$j$^$9!#$3$l$ODL>o$O(B <directive
module="mod_setenvif">SetEnvIf</directive> $B$K$h$j(B
$B9T$J$o$l$^$9!#$=$7$F!"(B<directive
module="mod_log_config">CustomLog</directive> $B%G%#%l%/%F%#%V$N(B
<code>env=</code> $B@a$r;H$C$F4D6-JQ?t$,@_Dj$5$l$F$$$k%j%/%(%9%H$r(B
$B4^$a$?$jGS=|$7$?$j$9$k$3$H$,$G$-$^$9!#$$$/$D$+Nc$r5s$2$^$9(B:</p>
<p>クライアントのリクエストの特徴に基づいてアクセスログにエントリの
一部をロギングしない方が便利なことがあります。これは <a
href="env.html">環境変数</a> の補助により簡単に実現できます。まず、
リクエストが何らかの条件に合うということを現すために環境変数が
設定される必要があります。これは通常は <directive
module="mod_setenvif">SetEnvIf</directive> により
行なわれます。そして、<directive
module="mod_log_config">CustomLog</directive> ディレクティブの
<code>env=</code> 節を使って環境変数が設定されているリクエストを
含めたり排除したりすることができます。いくつか例を挙げます:</p>
<example>
# Mark requests from the loop-back interface<br />
@@ -388,8 +388,8 @@
CustomLog logs/access_log common env=!dontlog
</example>
<p>$BB>$NNc$H$7$F!"1Q8l$rOC$9?M$+$i$N%j%/%(%9%H$H$=$l0J30$N?M$+$i$N%j%/%(%9%H$r(B
$BJ,$1$?$$!"$H$$$&>l9g$r9M$($F$_$F$/$@$5$$!#(B</p>
<p>他の例として、英語を話す人からのリクエストとそれ以外の人からのリクエストを
分けたい、という場合を考えてみてください。</p>
<example>
SetEnvIf Accept-Language "en" english<br />
@@ -397,33 +397,33 @@
CustomLog logs/non_english_log common env=!english
</example>
<p>$B$3$3$^$G$G$O>r7oIU$-%m%.%s%0$,Hs>o$K6/NO$G=@Fp$G$"$k$3$H$r<($7$F$-$^$7$?$,!"(B
$B$=$l$,%m%0$NFbMF$r@)8f$9$kM#0l$NJ}K!$H$$$&$o$1$G$O$"$j$^$;$s!#%m%0%U%!%$%k$O(B
$B%5!<%P$N3hF0$N40A4$J5-O?$G$"$kJ}$,$h$jLr$KN)$A$^$9!#C1=c$K%m%0%U%!%$%k$r(B
$B8e=hM}$7$F!"9MN8$7$?$/$J$$%m%0$r:o=|$9$kJ}$,4JC1$G$"$k$3$H$,$h$/$"$j$^$9!#(B</p>
<p>ここまででは条件付きロギングが非常に強力で柔軟であることを示してきましたが、
それがログの内容を制御する唯一の方法というわけではありません。ログファイルは
サーバの活動の完全な記録である方がより役に立ちます。単純にログファイルを
後処理して、考慮したくないログを削除する方が簡単であることがよくあります。</p>
</section>
</section>
<section id="rotation">
<title>$B%m%0$N8rBX(B</title>
<title>ログの交替</title>
<p>$BIaDL$NIi2Y$N%5!<%P$G$5$(!"%m%0%U%!%$%k$KJ]B8$5$l$k>pJs$NNL$O(B
$BKDBg$K$J$j$^$9!#%"%/%;%9%m%0$N%U%!%$%k$OIaDL(B 10,000 $B%j%/%(%9%HKh$K(B
1 MB $B0J>eA}$($^$9!#$G$9$+$i!"4{B8$N%m%0$r0\F0$7$?$j!":o=|$7$?$j$7$F!"(B
$BDj4|E*$K%m%0$r8rBX$5$;$k$3$H$,I,MW$K$J$j$^$9!#$3$l$O%5!<%P$N<B9TCf$K$O(B
$B9T$J$($^$;$s!#$H$$$&$N$O!"(BApache $B$O%U%!%$%k$,(B open $B$5$l$F$$$k4V$O(B
$B$:$C$H8E$$%m%0%U%!%$%k$K=q$-B3$1$k$+$i$G$9!#(B
$B?7$7$$%m%0%U%!%$%k$r(B open $B$G$-$k$h$&$K!"%m%0%U%!%$%k$,0\F0$5$l$?$j(B
$B:o=|$5$l$?8e$K!"%5!<%P$r(B<a href="stopping.html">$B:F5/F0(B</a>$B$9$k(B
$BI,MW$,$"$j$^$9!#(B</p>
<p>普通の負荷のサーバでさえ、ログファイルに保存される情報の量は
膨大になります。アクセスログのファイルは普通 10,000 リクエスト毎に
1 MB 以上増えます。ですから、既存のログを移動したり、削除したりして、
定期的にログを交替させることが必要になります。これはサーバの実行中には
行なえません。というのは、Apache はファイルが open されている間は
ずっと古いログファイルに書き続けるからです。
新しいログファイルを open できるように、ログファイルが移動されたり
削除された後に、サーバを<a href="stopping.html">再起動</a>する
必要があります。</p>
<p><em>$BM%2m$J(B</em> $B:F5/F0$r9T$J$&$3$H$G!"%5!<%P$O4{B8$N%3%M%/%7%g%s$d(B
$B=hM}BT$A$N%3%M%/%7%g%s$r<:$&$3$H$J$/?7$7$$%m%0%U%!%$%k$r(B open $B$5$;$k(B
$B$3$H$,$G$-$^$9!#$7$+$7!"$3$l$r<B8=$9$k$?$a$K!"%5!<%P$O8E$$%j%/%(%9%H$r(B
$B07$C$F$$$k4V$O8E$$%m%0%U%!%$%k$K=q$-B3$1$kI,MW$,$"$j$^$9!#(B
$B$G$9$+$i!":F5/F0$N8e$G$O%m%0%U%!%$%k$N=hM}$r;O$a$kA0$K!"$7$P$i$/BT$?$J$1$l$P(B
$B$J$j$^$;$s!#C1$K%m%0$r8rBX$5$;$F!"%G%#%9%/$N@aLs$N$?$a$K8E$$%m%0$r(B
$B05=L$9$kIaDL$N%7%J%j%*$O(B:</p>
<p><em>優雅な</em> 再起動を行なうことで、サーバは既存のコネクションや
処理待ちのコネクションを失うことなく新しいログファイルを open させる
ことができます。しかし、これを実現するために、サーバは古いリクエストを
扱っている間は古いログファイルに書き続ける必要があります。
ですから、再起動の後ではログファイルの処理を始める前に、しばらく待たなければ
なりません。単にログを交替させて、ディスクの節約のために古いログを
圧縮する普通のシナリオは:</p>
<example>
mv access_log access_log.old<br />
@@ -433,81 +433,81 @@
gzip access_log.old error_log.old
</example>
<p>$B%m%0$N8rBX$r$9$k$b$&0l$D$NJ}K!$O(B<a
href="#piped">$B%Q%$%W7PM3$N%m%0(B</a>$B$r;H$&$b$N$G!"<!$N@a$G@bL@$5$l$F$$$^$9!#(B</p>
<p>ログの交替をするもう一つの方法は<a
href="#piped">パイプ経由のログ</a>を使うもので、次の節で説明されています。</p>
</section>
<section id="piped">
<title>$B%Q%$%W7PM3$N%m%0(B</title>
<title>パイプ経由のログ</title>
<p>Apache httpd $B$O%(%i!<%m%0$H%"%/%;%9%m%0$r%U%!%$%k$KD>@\=q$/Be$o$j$K!"(B
$B%Q%$%W$rDL$7$FJL$N%W%m%0%i%`$K=q$-=P$9$3$H$,$G$-$^$9!#(B
$B$3$N5!G=$K$h$j!"<g%5!<%P$K%3!<%I$rDI2C$9$k$3$H$J$/(B
$B%m%.%s%0$N=@Fp@-$,Hs>o$K9b$^$C$F$$$^$9!#%Q%$%W$K%m%0$r=q$/$?$a$K$O!"(B
$BC1$K%U%!%$%kL>$r%Q%$%WJ8;z(B "<code>|</code>" $B$KCV$-49$(!"$=$NB3$-$K(B
$BI8=`F~NO$+$i%m%0$N%(%s%H%j$r<u$1$H$k<B9T%W%m%0%i%`$NL>A0$r=q$/$@$1$G$9!#(B
Apache $B$O%Q%$%W7PM3$N%m%0MQ$N%W%m%;%9$r%5!<%P$N5/F0;~$K<B9T$7!"(B
$B%5!<%P$N<B9TCf$K$=$N%W%m%0%i%`$,%/%i%C%7%e$7$?$H$-$O$=$l$r:F$S(B
$B<B9T$7$^$9!#(B($B$3$N:G8e$N5!G=$,$3$N5;=Q$,!V?.Mj@-$N$"$k%Q%$%W7PM3$N%m%.%s%0!W(B
$B$H8F$P$l$F$$$kM}M3$G$9!#(B)</p>
<p>Apache httpd はエラーログとアクセスログをファイルに直接書く代わりに、
パイプを通して別のプログラムに書き出すことができます。
この機能により、主サーバにコードを追加することなく
ロギングの柔軟性が非常に高まっています。パイプにログを書くためには、
単にファイル名をパイプ文字 "<code>|</code>" に置き換え、その続きに
標準入力からログのエントリを受けとる実行プログラムの名前を書くだけです。
Apache はパイプ経由のログ用のプロセスをサーバの起動時に実行し、
サーバの実行中にそのプログラムがクラッシュしたときはそれを再び
実行します。(この最後の機能がこの技術が「信頼性のあるパイプ経由のロギング」
と呼ばれている理由です。)</p>
<p>$B%Q%$%W7PM3$N%m%0MQ$N%W%m%;%9$O(B Apache httpd $B$N?F%W%m%;%9$+$i5/F0$5$l!"(B
$B$=$N%W%m%;%9$N%f!<%6(B ID $B$r7Q>5$7$^$9!#$3$l$O!"$3$l$O!"%Q%$%W7PM3$N%m%0MQ$N(B
$B%W%m%0%i%`$OIaDL(B root $B$H$7$F<B9T$5$l$k$3$H$r0UL#$7$^$9!#(B
$B$G$9$+$i!"%W%m%0%i%`$r4JC1$G0BA4$KJ]$D$3$H$,Hs>o$K=EMW$G$9!#(B</p>
<p>パイプ経由のログ用のプロセスは Apache httpd の親プロセスから起動され、
そのプロセスのユーザ ID を継承します。これは、これは、パイプ経由のログ用の
プログラムは普通 root として実行されることを意味します。
ですから、プログラムを簡単で安全に保つことが非常に重要です。</p>
<p>$B%Q%$%W7PM3$N%m%0$N=EMW$JMxMQK!$O!"%5!<%P$N:F5/F0$J$7$G%m%0$N8rBX$r(B
$B$9$k$3$H$G$9!#(BApache HTTP $B%5!<%P$K$O$3$N$?$a$N(B <program
>rotatelogs</program> $B$H8F$P$l$k4JC1$J(B
$B%W%m%0%i%`$,IUB0$7$F$$$^$9!#$?$H$($P!"(B24 $B;~4VKh$K%m%0$r8rBX$5$;$k$K$O!"(B
$B0J2<$N$b$N$r;H$&$3$H$,$G$-$^$9(B:</p>
<p>パイプ経由のログの重要な利用法は、サーバの再起動なしでログの交替を
することです。Apache HTTP サーバにはこのための <program
>rotatelogs</program> と呼ばれる簡単な
プログラムが付属しています。たとえば、24 時間毎にログを交替させるには、
以下のものを使うことができます:</p>
<example>
CustomLog "|/usr/local/apache/bin/rotatelogs
/var/log/access_log 86400" common
</example>
<p>$B%Q%$%W$N@h$G8F$P$l$k%3%^%s%IA4BN$,0zMQId$G0O$^$l$F$$$k$3$H$KCmL\$7$F(B
$B$/$@$5$$!#$3$NNc$O%"%/%;%9%m%0$r;H$C$F$$$^$9$,!"%(%i!<%m%0$K$bF1$85;=Q$r(B
$B;H$&$3$H$,$G$-$^$9!#(B</p>
<p>パイプの先で呼ばれるコマンド全体が引用符で囲まれていることに注目して
ください。この例はアクセスログを使っていますが、エラーログにも同じ技術を
使うことができます。</p>
<p>$B;w$F$$$k$1$l$I!"$h$j$:$C$H=@Fp$J(B
<a href="http://www.cronolog.org/">cronolog</a> $B$H$$$&%m%08rBXMQ$N(B
$B%W%m%0%i%`$,30It$N%5%$%H$K$"$j$^$9!#(B</p>
<p>似ているけれど、よりずっと柔軟な
<a href="http://www.cronolog.org/">cronolog</a> というログ交替用の
プログラムが外部のサイトにあります。</p>
<p>$B>r7oIU$-%m%.%s%0$HF1MM!"%Q%$%W7PM3$N%m%0$OHs>o$K6/NO$J(B
$BF;6q$G$9$,!"%*%U%i%$%s$N8e=hM}$N$h$&$J!"$h$j4JC1$J2r7hJ}K!$,$"$k$H$-$O(B
$B;H$o$J$$J}$,NI$$$G$7$g$&!#(B</p>
<p>条件付きロギングと同様、パイプ経由のログは非常に強力な
道具ですが、オフラインの後処理のような、より簡単な解決方法があるときは
使わない方が良いでしょう。</p>
</section>
<section id="virtualhosts">
<title>$B%P!<%A%c%k%[%9%H(B</title>
<title>バーチャルホスト</title>
<p>$BB?$/$N(B <a href="vhosts/">$B%P!<%A%c%k%[%9%H(B</a> $B$N$"$k%5!<%P$r<B9T$7$F$$$k(B
$B$H$-$O!"%m%0%U%!%$%k$N07$$J}$K$$$/$D$+$NJ}K!$,$"$j$^$9!#(B
$B$^$:!"C1FH$N%[%9%H$N$_$N%5!<%P$H$^$C$?$/F1$8$h$&$K%m%0$r;H$&$3$H$,$G$-$^$9!#(B
$B%m%.%s%0%G%#%l%/%F%#%V$r<g%5!<%P$N%3%s%F%-%9%H$N(B
<p>多くの <a href="vhosts/">バーチャルホスト</a> のあるサーバを実行している
ときは、ログファイルの扱い方にいくつかの方法があります。
まず、単独のホストのみのサーバとまったく同じようにログを使うことができます。
ロギングディレクティブを主サーバのコンテキストの
<directive module="core"
type="section">VirtualHost</directive> $B%;%/%7%g%s$N30$KCV$/$3$H$G!"(B
$B$9$Y$F$N%m%0$rF1$8%"%/%;%9%m%0$H%(%i!<%m%0$K%m%0<}=8$9$k$3$H$,$G$-$^$9!#(B
$B$3$N<jK!$G$O8D!9$N%P!<%A%c%k%[%9%H$NE}7W$r4JC1$K$H$k$3$H$O$G$-$^$;$s!#(B</p>
type="section">VirtualHost</directive> セクションの外に置くことで、
すべてのログを同じアクセスログとエラーログにログ収集することができます。
この手法では個々のバーチャルホストの統計を簡単にとることはできません。</p>
<p><directive module="mod_log_config">>CustomLog</directive> $B$d(B
<directive module="mod_log_config">ErrorLog</directive> $B%G%#%l%/%F%#%V$,(B
<directive module="core" type="section">VirtualHost</directive> $B$NCf$K(B
$BCV$+$l$?>l9g$O!"$=$N%P!<%A%c%k(B
$B%[%9%H$X$N$9$Y$F$N%j%/%(%9%H$d%(%i!<$,$=$3$G;XDj$5$l$?%U%!%$%k$K$N$_(B
$B%m%0<}=8$5$l$^$9!#%m%.%s%0%G%#%l%/%F%#%V$N$J$$%P!<%A%c%k%[%9%H$O(B
$B0MA3$H$7$F%j%/%(%9%H$,<g%5!<%P$N%m%0$KAw$i$l$^$9!#$3$N<jK!$O>/$J$$(B
$B%P!<%A%c%k%[%9%H$KBP$7$F$OHs>o$KM-MQ$G$9$,!"%[%9%H$N?t$,Hs>o$KB?$/$J$k$H(B
$B4IM}$,BgJQ$K$J$j$^$9!#$5$i$K!"(B<a
href="vhosts/fd-limits.html">$B%U%!%$%k5-=R;R$N8B3&(B</a>$B$NLdBj$r5/$3$9$3$H$,(B
$B$"$j$^$9!#(B</p>
<p><directive module="mod_log_config">>CustomLog</directive>
<directive module="mod_log_config">ErrorLog</directive> ディレクティブが
<directive module="core" type="section">VirtualHost</directive> の中に
置かれた場合は、そのバーチャル
ホストへのすべてのリクエストやエラーがそこで指定されたファイルにのみ
ログ収集されます。ロギングディレクティブのないバーチャルホストは
依然としてリクエストが主サーバのログに送られます。この手法は少ない
バーチャルホストに対しては非常に有用ですが、ホストの数が非常に多くなると
管理が大変になります。さらに、<a
href="vhosts/fd-limits.html">ファイル記述子の限界</a>の問題を起こすことが
あります。</p>
<p>$B%"%/%;%9%m%0$K$O!"Hs>o$KNI$$BE6(0F$,$"$j$^$9!#%P!<%A%c%k%[%9%H$N(B
$B>pJs$r%m%0$N%U%)!<%^%C%HJ8;zNs$K2C$($k$3$H$G!"$9$Y$F$N%[%9%H$X$N(B
$B%j%/%(%9%H$rF1$8%m%0$K%m%0<}=8$7$F!"8e$G%m%0$r8D!9$N%U%!%$%k$KJ,3d$9$k$3$H$,(B
$B$G$-$^$9!#$?$H$($P!"0J2<$N%G%#%l%/%F%#%V$r8+$F$/$@$5$$!#(B</p>
<p>アクセスログには、非常に良い妥協案があります。バーチャルホストの
情報をログのフォーマット文字列に加えることで、すべてのホストへの
リクエストを同じログにログ収集して、後でログを個々のファイルに分割することが
できます。たとえば、以下のディレクティブを見てください。</p>
<example>
LogFormat "%v %l %u %t \"%r\" %&gt;s %b"
@@ -515,19 +515,19 @@
CustomLog logs/access_log comonvhost
</example>
<p><code>%v</code> $B$,%j%/%(%9%H$r07$C$F$$$k%P!<%A%c%k%[%9%H$NL>A0$r(B
$B%m%0<}=8$9$k$?$a$K;H$o$l$F$$$^$9!#$=$7$F!"(B<a
href="programs/other.html">split-logfile</a> $B$N$h$&$J%W%m%0%i%`$r(B
$B;H$C$F%"%/%;%9%m%0$r8e=hM}$9$k$3$H$G!"(B
$B%P!<%A%c%k%[%9%HKh$N%U%!%$%k$K%m%0$rJ,3d$9$k$3$H$,$G$-$^$9!#(B</p>
<p><code>%v</code> がリクエストを扱っているバーチャルホストの名前を
ログ収集するために使われています。そして、<a
href="programs/other.html">split-logfile</a> のようなプログラムを
使ってアクセスログを後処理することで、
バーチャルホスト毎のファイルにログを分割することができます。</p>
<p>$B;DG0$J$,$i!"%(%i!<%m%0$K$OF1MM$N<jK!$O$"$j$^$;$s!#$G$9$+$i!"(B
$B$9$Y$F$N%P!<%A%c%k%[%9%H$rF1$8%(%i!<%m%0$NCf$K:.$<$k$+!"(B
$B%P!<%A%c%k%[%9%HKh$K%(%i!<%m%0$r;H$&$+$rA*$P$J$1$l$P$J$j$^$;$s!#(B</p>
<p>残念ながら、エラーログには同様の手法はありません。ですから、
すべてのバーチャルホストを同じエラーログの中に混ぜるか、
バーチャルホスト毎にエラーログを使うかを選ばなければなりません。</p>
</section>
<section id="other">
<title>$BB>$N%m%0%U%!%$%k(B</title>
<title>他のログファイル</title>
<related>
<modulelist>
@@ -545,41 +545,41 @@
</related>
<section id="pidfile">
<title>PID $B%U%!%$%k(B</title>
<title>PID ファイル</title>
<p>$B5/F0;~$K!"(BApache $B$O?F(B httpd $B%W%m%;%9$N%W%m%;%9(B ID $B$r(B
<code>logs/httpd.pid</code> $B$KJ]B8$7$^$9!#$3$N(B
$B%U%!%$%kL>$O(B <directive
module="mpm_common">PidFile</directive> $B%G%#%l%/%F%#%V$r;H$C$F(B
$BJQ99$9$k$3$H$,$G$-$^$9!#%W%m%;%9(B ID $B$O4IM}<T$,?F%W%m%;%9$K(B
$B%7%0%J%k$rAw$k$3$H$G%G!<%b%s$r:F5/F0$7$?$j=*N;$5$;$?$j$9$k$H$-$K(B
$B;HMQ$7$^$9!#(BWindows $B$G$O!"Be$o$j$K(B -k $B%3%^%s%I%*%W%7%g%s$r(B
$B;H$C$F$/$@$5$$!#>\$7$$>pJs$O(B <a href="stopping.html">$B=*N;$H(B
$B:F5/F0(B</a> $B$N%Z!<%8$r8+$F$/$@$5$$!#(B</p>
<p>起動時に、Apache は親 httpd プロセスのプロセス ID を
<code>logs/httpd.pid</code> に保存します。この
ファイル名は <directive
module="mpm_common">PidFile</directive> ディレクティブを使って
変更することができます。プロセス ID は管理者が親プロセスに
シグナルを送ることでデーモンを再起動したり終了させたりするときに
使用します。Windows では、代わりに -k コマンドオプションを
使ってください。詳しい情報は <a href="stopping.html">終了と
再起動</a> のページを見てください。</p>
</section>
<section id="scriptlog">
<title>$B%9%/%j%W%H%m%0(B</title>
<title>スクリプトログ</title>
<p>$B%G%P%C%0$NJd=u$N$?$a$K!"(B<directive
module="mod_cgi">ScriptLog</directive> $B%G%#%l%/%F%#%V$O(B
CGI $B%9%/%j%W%H$NF~NO$H=PNO$r5-O?$9$k$h$&$K$G$-$^$9!#(B
$B$3$l$O%F%9%HMQ$K$N$_;HMQ$7$F!"DL>o$N%5!<%P$G$O;HMQ$7$J$$$G$/$@$5$$!#(B
$B>\$7$$>pJs$O(B <a
href="mod/mod_cgi.html">mod_cgi $B$NJ8=q(B</a> $B$K$"$j$^$9!#(B</p>
<p>デバッグの補助のために、<directive
module="mod_cgi">ScriptLog</directive> ディレクティブは
CGI スクリプトの入力と出力を記録するようにできます。
これはテスト用にのみ使用して、通常のサーバでは使用しないでください。
詳しい情報は <a
href="mod/mod_cgi.html">mod_cgi の文書</a> にあります。</p>
</section>
<section id="rewritelog">
<title>$B%j%i%$%H%m%0(B</title>
<title>リライトログ</title>
<p><directive module="mod_rewrite">mod_rewrite</directive> $B$N6/NO$G(B
$BJ#;($J5!G=$r(B
$B;H$C$F$$$k$H$-$O!"$[$\$$$D$b%G%P%C%0$r4JC1$K$9$k$?$a$K(B
<directive module="mod_rewrite">RewriteLog</directive> $B$N;HMQ$,(B
$BI,MW$G$7$g$&!#$3$N%m%0%U%!%$%k$K$O%j%i%$%H%(%s%8%s$,%j%/%(%9%H$r(B
$B=q$-49$($kJ}K!$N>\:Y$J2r@O$,=PNO$5$l$^$9!#>\$7$5$NEY9g$O(B <directive
<p><directive module="mod_rewrite">mod_rewrite</directive> の強力で
複雑な機能を
使っているときは、ほぼいつもデバッグを簡単にするために
<directive module="mod_rewrite">RewriteLog</directive> の使用が
必要でしょう。このログファイルにはリライトエンジンがリクエストを
書き換える方法の詳細な解析が出力されます。詳しさの度合は <directive
module="mod_rewrite">RewriteLogLevel</directive>
$B$G@)8f$G$-$^$9!#(B</p>
で制御できます。</p>
</section>
</section>
</manualpage>

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -22,274 +22,274 @@
<manualpage metafile="directive-dict.xml.meta">
<title>$B%G%#%l%/%F%#%V$N2r@b$K;H$o$l$kMQ8l(B</title>
<title>ディレクティブの解説に使われる用語</title>
<summary>
<p>$B$3$NJ8=q$O3F(B Apache <a href="directives.html">$B@_Dj%G%#%l%/%F%#%V(B</a>
$B$r@bL@$9$k$?$a$K;H$o$l$F$$$kMQ8l$r@bL@$7$^$9!#(B</p>
<p>この文書は各 Apache <a href="directives.html">設定ディレクティブ</a>
を説明するために使われている用語を説明します。</p>
</summary>
<seealso><a href="../configuring.html">$B@_Dj%U%!%$%k(B</a></seealso>
<seealso><a href="../configuring.html">設定ファイル</a></seealso>
<section id="Description"><title>$B@bL@(B</title>
<section id="Description"><title>説明</title>
<p>$B%G%#%l%/%F%#%V$NL\E*$N4JC1$J@bL@!#(B</p>
<p>ディレクティブの目的の簡単な説明。</p>
</section>
<section id="Syntax"><title>$B9=J8(B</title>
<section id="Syntax"><title>構文</title>
<p>$B@_Dj%U%!%$%kCf$N%G%#%l%/%F%#%V$N=q<0$r<($7$^$9!#(B
$B$3$N9=J8$O%G%#%l%/%F%#%VFCM-$J$N$G!">\:Y$O%G%#%l%/%F%#%V$N@bL@$r(B
$B;2>H$7$F$/$@$5$$!#0lHLE*$K!"%G%#%l%/%F%#%VL>$N8e$K$O(B
$B6uGr$K$h$jJ,3d$5$l$?$$$/$D$+$N0z?t$,B3$-$^$9!#(B
$B0z?t$,6uGr$r4^$`$H$-$OFs=E0zMQId(B ($BLuCm(B: ")
$B$G0O$^$l$F$$$^$9!#(B $B%*%W%7%g%J%k$J0z?t$O3g8L(B
($BLuCm(B: []) $B$G0O$^$l$F$$$^$9!#(B
$B0z?t$,J#?t$NCM$r<h$jF@$k>l9g$O!"$=$l$i$NCM$O?bD>$NK@(B "|"
$B$G(B $BJ,3d$5$l$F$$$^$9!#(B
$BJQ99$5$l$J$$%F%-%9%H$O%G%U%)%k%H$N%U%)%s%H$GI=<($5$l!"CV49$NI,MW$J(B
$B0z?t$O(B<em>$B6/D4$5$l$F(B</em>$BI=<($5$l$^$9!#(B
$B0z?t$N?t$,JQ$o$k%G%#%l%/%F%#%V$O:G8e$N(B
$B0z?t$,7+$jJV$5$l$k$3$H$r<($9$?$a$K(B "..."
$B$G=*$o$j$^$9!#(B</p>
<p>設定ファイル中のディレクティブの書式を示します。
この構文はディレクティブ特有なので、詳細はディレクティブの説明を
参照してください。一般的に、ディレクティブ名の後には
空白により分割されたいくつかの引数が続きます。
引数が空白を含むときは二重引用符 (訳注: ")
で囲まれています。 オプショナルな引数は括弧
(訳注: []) で囲まれています。
引数が複数の値を取り得る場合は、それらの値は垂直の棒 "|"
で 分割されています。
変更されないテキストはデフォルトのフォントで表示され、置換の必要な
引数は<em>強調されて</em>表示されます。
引数の数が変わるディレクティブは最後の
引数が繰り返されることを示すために "..."
で終わります。</p>
<p>
$B%G%#%l%/%F%#%V$OB?$/$N0c$&7?$N0z?t$r$H$j$^$9!#$$$/$D$+!"NI$/(B
$B;H$o$l$k$b$N$r0J2<$GDj5A$7$^$9!#(B</p>
ディレクティブは多くの違う型の引数をとります。いくつか、良く
使われるものを以下で定義します。</p>
<dl>
<dt><em>URL</em></dt>
<dd><code>http://www.example.com/path/to/file.html</code>
$B$N$h$&$K!"(B
$B%9%-!<%`!"%[%9%HL>!"%Q%9L>(B($B>JN,2DG=(B)$B$r4^$s$G$$$k40A4$J(B
Uniform Resource Locator$B!#(B</dd>
のように、
スキーム、ホスト名、パス名(省略可能)を含んでいる完全な
Uniform Resource Locator</dd>
<dt><em>URL-path</em></dt>
<dd><code>/path/to/file.html</code> $B$N$h$&$K!"%9%-!<%`$H(B
$B%[%9%HL>$N8e$KB3$/(B <em>url</em>
$B$N0lIt!#(B<em>url-path</em> $B$O(B
$B%U%!%$%k%7%9%F%`$+$i$N;kE@$G$O$J$/!"(B
$B%&%'%V$+$i$N;kE@$G%j%=!<%9$rI=8=$7$^$9!#(B</dd>
<dd><code>/path/to/file.html</code> のように、スキームと
ホスト名の後に続く <em>url</em>
の一部。<em>url-path</em>
ファイルシステムからの視点ではなく、
ウェブからの視点でリソースを表現します。</dd>
<dt><em>file-path</em></dt>
<dd><code>/usr/local/apache/htdocs/path/to/file.html</code>
$B$N$h$&$K!"(B
$B%k!<%H%G%#%l%/%H%j$+$i;O$^$k%m!<%+%k$N%U%!%$%k%7%9%F%`>e$N%U%!%$%k$X$N%Q%9!#(B
$BDL>o!"%9%i%C%7%e$G;O$^$i$J$$(B <em>file-path</em> $B$O(B <a
のように、
ルートディレクトリから始まるローカルのファイルシステム上のファイルへのパス。
通常、スラッシュで始まらない <em>file-path</em> <a
href="core.html#serverroot">ServerRoot</a>
$B$+$i$NAjBP%Q%9$H$7$F(B $B07$o$l$^$9!#(B</dd>
からの相対パスとして 扱われます。</dd>
<dt><em>directory-path</em></dt>
<dd><code>/usr/local/apache/htdocs/path/to/</code>
$B$N$h$&$K!"(B
$B%k!<%H%G%#%l%/%H%j$+$i;O$^$k%m!<%+%k$N%U%!%$%k%7%9%F%`$N%G%#%l%/%H%j$X$N(B
$B%Q%9!#(B</dd>
のように、
ルートディレクトリから始まるローカルのファイルシステムのディレクトリへの
パス。</dd>
<dt><em>filename</em></dt>
<dd><code>file.html</code> $B$N$h$&$K!"%Q%9>pJs$NIU$$$F$$$J$$(B
$B%U%!%$%kL>!#(B</dd>
<dd><code>file.html</code> のように、パス情報の付いていない
ファイル名。</dd>
<dt><em>regex</em></dt>
<dd>Perl $B8_49$N(B<a href="../glossary.html#regex">$B@55,I=8=(B</a>$B$G$9!#(B
$B%G%#%l%/%F%#%V$NDj5A$,(B <em>regex</em>
$B$,2?$KBP$7$F%^%C%A$r9T$J$&$N$+$r;XDj$7$^$9!#(B</dd>
<dd>Perl 互換の<a href="../glossary.html#regex">正規表現</a>です。
ディレクティブの定義が <em>regex</em>
が何に対してマッチを行なうのかを指定します。</dd>
<dt><em>extension</em></dt>
<dd>$B0lHLE*$K$O(B <em>filename</em>
$B$N:G8e$N%I%C%H$N8e$NItJ,$G$9!#(B $B$7$+$7!"(BApache
$B$OJ#?t$N%U%!%$%k$N3HD%;R$rG'<1$7$^$9$N$G!"(B<em>filename</em>
$B$KJ#?t$N%I%C%H$,$"$k$H!":G=i$N%I%C%H$N8e$N!"$=$l$>$l$N%I%C%H$GJ,N%$5$l$?ItJ,$,(B
<em>extension</em> ($BLuCm(B: $B3HD%;R(B)
$B$K$J$j$^$9!#Nc$($P!"(B<em>filename</em>
<dd>一般的には <em>filename</em>
の最後のドットの後の部分です。 しかし、Apache
は複数のファイルの拡張子を認識しますので、<em>filename</em>
に複数のドットがあると、最初のドットの後の、それぞれのドットで分離された部分が
<em>extension</em> (訳注: 拡張子)
になります。例えば、<em>filename</em>
<code>file.html.en</code>
$B$K$OFs$D$N3HD%;R$,$"$j$^$9!#(B<code>.html</code> $B$H(B
<code>.en</code> $B$G$9!#(BApache
$B$N%G%#%l%/%F%#%V$G$O!"(B<em>extension</em>
$B$O%I%C%HIU$-$G$bL5$7$G$b;XDj$G$-$^$9!#$5$i$K!"(B<em>extension</em>
$B$O(B $BBgJ8;z>.J8;z$r6hJL$7$^$;$s!#(B</dd>
には二つの拡張子があります。<code>.html</code>
<code>.en</code> です。Apache
のディレクティブでは、<em>extension</em>
はドット付きでも無しでも指定できます。さらに、<em>extension</em>
は 大文字小文字を区別しません。</dd>
<dt><em>MIME-type</em></dt>
<dd><code>text/html</code> $B$N$h$&$K!"%9%i%C%7%e$GJ,N%$5$l$?(B
$B<g%U%)!<%^%C%H$HI{%U%)!<%^%C%H$K$h$C$F%U%!%$%k$N7A<0$r(B
$BI=$9J}K!$G$9!#(B</dd>
<dd><code>text/html</code> のように、スラッシュで分離された
主フォーマットと副フォーマットによってファイルの形式を
表す方法です。</dd>
<dt><em>env-variable</em></dt>
<dd>Apache $B$N@_Dj$K$h$jDj5A$5$l$k(B <a
href="../env.html">$B4D6-JQ?t(B</a>$B$NL>A0$G$9!#$3$l$O%*%Z%l!<%F%#%s%0%7%9%F%`$N(B
$B4D6-JQ?t$HF1$8$H$O8B$i$J$$$3$H$KCm0U$7$F$/$@$5$$!#>\:Y$O(B <a
href="../env.html">$B4D6-JQ?t$N@bL@(B</a>$B$r;2>H$7$F$/$@$5$$!#(B</dd>
<dd>Apache の設定により定義される <a
href="../env.html">環境変数</a>の名前です。これはオペレーティングシステムの
環境変数と同じとは限らないことに注意してください。詳細は <a
href="../env.html">環境変数の説明</a>を参照してください。</dd>
</dl>
</section>
<section id="Default"><title>$B%G%U%)%k%H(B</title>
<section id="Default"><title>デフォルト</title>
<p>$B%G%#%l%/%F%#%V$K%G%U%)%k%HCM(B
(<em>$B$9$J$o$A(B</em>$B!"@_Dj%U%!%$%k$+$i(B
$B>JN,$5$l$F$$$F$b!"(BApache
$B%&%'%V%5!<%P$OFCDj$NCM$K@_Dj$5$l$F$$$k$+$N$h$&$K(B
$BF0:n$7$^$9(B) $B$,$"$k>l9g$O$3$3$K5-=R$5$l$^$9!#(B
$B%G%U%)%k%HCM$NL5$$>l9g!"$3$3$O(B "<em>None</em>" $B$H(B
$B=q$+$l$^$9!#$3$3$G=q$+$l$F$$$k%G%U%)%k%H$O%5!<%P$H6&$KG[I[$5$l$F$$$k(B
$B%G%U%)%k%H$N(B httpd.conf
$BFb$K=q$+$l$F$$$k%G%#%l%/%F%#%V$NCM$H(B
$B0c$&2DG=@-$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
<p>ディレクティブにデフォルト値
(<em>すなわち</em>、設定ファイルから
省略されていても、Apache
ウェブサーバは特定の値に設定されているかのように
動作します) がある場合はここに記述されます。
デフォルト値の無い場合、ここは "<em>None</em>"
書かれます。ここで書かれているデフォルトはサーバと共に配布されている
デフォルトの httpd.conf
内に書かれているディレクティブの値と
違う可能性があることに注意してください。</p>
</section>
<section id="Context"><title>$B%3%s%F%-%9%H(B</title>
<section id="Context"><title>コンテキスト</title>
<p>
$B$3$l$O!"%5!<%P$N@_Dj%U%!%$%kCf$N$I$3$G%G%#%l%/%F%#%V$,M-8z$J$N$+$r<($7$^$9!#(B
$B<!$K<($9CM$,0l$D0J>e%+%s%^6h@Z$j$GNs5s$5$l$F$$$^$9!#(B</p>
これは、サーバの設定ファイル中のどこでディレクティブが有効なのかを示します。
次に示す値が一つ以上カンマ区切りで列挙されています。</p>
<dl>
<dt>$B%5!<%P@_Dj%U%!%$%k(B</dt>
<dt>サーバ設定ファイル</dt>
<dd>$B$3$l$O!"%5!<%P@_Dj%U%!%$%k(B
(<em>$BNc$($P(B</em>$B!"(B<code>httpd.conf</code>,
<dd>これは、サーバ設定ファイル
(<em>例えば</em>、<code>httpd.conf</code>,
<code>srm.conf</code>, <code>access.conf</code>)
$BFb$G$O;HMQ$G$-$^$9$,!"(B
<directive module="core" type="section">VirtualHost</directive> $B$d(B
<directive module="core" type="section">Directory</directive> $B$NCf$G$O(B
<strong>$B;HMQ$G$-$J$$(B</strong>$B$3$H$r<($7$^$9!#(B
<code>.htaccess</code>$B%U%!%$%k$G$N;HMQ$O5v2D$5$l$F$$$^$;$s!#(B</dd>
内では使用できますが、
<directive module="core" type="section">VirtualHost</directive>
<directive module="core" type="section">Directory</directive> の中では
<strong>使用できない</strong>ことを示します。
<code>.htaccess</code>ファイルでの使用は許可されていません。</dd>
<dt>$B%P!<%A%c%k%[%9%H(B</dt>
<dt>バーチャルホスト</dt>
<dd>$B$3$l$O!"%5!<%P@_Dj%U%!%$%k$N(B
<dd>これは、サーバ設定ファイルの
<directive module="core" type="section">VirtualHost</directive>
$B$NCf$G;HMQ$G$-$k$3$H$r<($7$^$9!#(B</dd>
の中で使用できることを示します。</dd>
<dt>$B%G%#%l%/%H%j(B</dt>
<dt>ディレクトリ</dt>
<dd>$B$3$l$O!"%5!<%P@_Dj%U%!%$%k$N(B
<dd>これは、サーバ設定ファイルの
<directive module="core" type="section">Directory</directive>,
<directive module="core" type="section">Location</directive>,
<directive module="core" type="section">Files</directive>,
<directive module="mod_proxy" type="section">Proxy</directive>
$B%3%s%F%J$NCf$G!"(B <a
href="../sections.html">$B@_Dj%;%/%7%g%s(B</a>
$B$G@bL@$5$l$F$$$k@)8B$N2<$G;HMQ$G$-$k$3$H$r<($7$^$9!#(B</dd>
コンテナの中で、 <a
href="../sections.html">設定セクション</a>
で説明されている制限の下で使用できることを示します。</dd>
<dt>.htaccess</dt>
<dd>$B$3$l$O!"%G%#%l%/%H%j(B<em>$BKh(B</em>$B$N(B
<code>.htaccess</code> $B%U%!%$%kFb$G(B
$B;HMQ2DG=$G$"$k$3$H$r<($7$^$9!#(B $B$?$@!"(B<a
href="#Override">$B>e=q$-(B</a>
$B$N@_Dj$K$h$C$F$O!"=hM}$5$l$J$$$+$b$7$l$^$;$s!#(B</dd>
<dd>これは、ディレクトリ<em>毎</em>の
<code>.htaccess</code> ファイル内で
使用可能であることを示します。 ただ、<a
href="#Override">上書き</a>
の設定によっては、処理されないかもしれません。</dd>
</dl>
<p>
$B%G%#%l%/%F%#%V$O;X<($5$l$?%3%s%F%-%9%H$G(B<em>$B$N$_(B</em>$B5v2D$5$l$^$9!#(B
$BB>$N>l=j$G;H$*$&$H$9$k$H!"%5!<%P$,$=$N%3%s%F%-%9%H$r@5$7$/07$($J$/(B
$B$J$k$h$&$J@_Dj%(%i!<$,H/@8$9$k$+!"%5!<%P$,$^$C$?$/F0:n$7$J$/$J$k!"(B
<em>$B$9$J$o$A(B</em>$B!"%5!<%P$,5/F0$7$J$/$J$k$H$$$&$3$H$K$J$j$^$9!#(B</p>
ディレクティブは指示されたコンテキストで<em>のみ</em>許可されます。
他の場所で使おうとすると、サーバがそのコンテキストを正しく扱えなく
なるような設定エラーが発生するか、サーバがまったく動作しなくなる、
<em>すなわち</em>、サーバが起動しなくなるということになります。</p>
<p>
$B%G%#%l%/%F%#%V$NM-8z$J0LCV$O!"<B:]$O5s$2$i$l$F$$$k%3%s%F%-%9%H$N(B
$BO@M}OB(B ($BLuCm(B: Boolen OR)
$B$K$J$j$^$9!#8@$$49$($k$H!"(B
"<code>$B%5!<%P@_Dj%U%!%$%k!"(B.htaccess</code>" $B$GM-8z$@$H(B
$B5-$5$l$F$$$k%G%#%l%/%F%#%V$O(B <code>httpd.conf</code>
$B%U%!%$%k$H(B <code>.htaccess</code>
$B%U%!%$%k$H$GM-8z$G$9$,!"(B <directive module="core"
ディレクティブの有効な位置は、実際は挙げられているコンテキストの
論理和 (訳注: Boolen OR)
になります。言い換えると、
"<code>サーバ設定ファイル、.htaccess</code>" で有効だと
記されているディレクティブは <code>httpd.conf</code>
ファイルと <code>.htaccess</code>
ファイルとで有効ですが、 <directive module="core"
type="section">Directory</directive>
$B$d(B <directive module="core" type="section">VirtualHost</directive>
$B$NCf$G$O;HMQ$G$-$^$;$s!#(B</p>
<directive module="core" type="section">VirtualHost</directive>
の中では使用できません。</p>
</section>
<section id="Override"><title>$B>e=q$-(B</title>
<section id="Override"><title>上書き</title>
<p>$B$3$N%G%#%l%/%F%#%V$NB0@-$O!"(B<code>.htaccess</code>
$B%U%!%$%kCf$K(B
$B%G%#%l%/%F%#%V$,8=$l$?$H$-$K!"$=$l$N=hM}$rM-8z$K$9$k$?$a$K(B
$B$I$N@_Dj$N>e=q$-$,I,MW$+$r<($7$^$9!#(B $B%G%#%l%/%F%#%V$N(B
<a href="#Context">$B%3%s%F%-%9%H(B</a>
$B$,!"(B<code>.htaccess</code>
$B%U%!%$%kCf$G$O5v2D$7$F$$$J$$>l9g$O!"(B $B$3$NB0@-$O(B
"<em>$BE,MQIT2D(B</em>" $B$H=q$+$l$^$9!#(B</p>
<p>このディレクティブの属性は、<code>.htaccess</code>
ファイル中に
ディレクティブが現れたときに、それの処理を有効にするために
どの設定の上書きが必要かを示します。 ディレクティブの
<a href="#Context">コンテキスト</a>
が、<code>.htaccess</code>
ファイル中では許可していない場合は、 この属性は
"<em>適用不可</em>" と書かれます。</p>
<p>$B>e=q$-$O!"(B<directive module="core">AllowOverride</directive>
$B%G%#%l%/%F%#%V$K$h$C$FM-8z$K$5$l!"(B
$BFCDj$N%9%3!<%W(B($B%G%#%l%/%H%j$J$I(B)$B$H!"(B
$B$5$i$K2<0L$N%l%Y%k$N(B <directive module="core">AllowOverride</directive>
$B$G=$@5$5$l$J$$8B$j!"(B $B$=$NG[2<$KBP$7$FE,MQ$5$l$^$9!#(B
$B%G%#%l%/%F%#%V$N%I%-%e%a%s%H$O<h$jF@$k>e=q$-$NL>A0$b5s$2$^$9!#(B</p>
<p>上書きは、<directive module="core">AllowOverride</directive>
ディレクティブによって有効にされ、
特定のスコープ(ディレクトリなど)と、
さらに下位のレベルの <directive module="core">AllowOverride</directive>
で修正されない限り、 その配下に対して適用されます。
ディレクティブのドキュメントは取り得る上書きの名前も挙げます。</p>
</section>
<section id="Status"><title>$B%9%F!<%?%9(B</title>
<section id="Status"><title>ステータス</title>
<p>$B$3$l$O%G%#%l%/%F%#%V$,(B Apache
$B%&%'%V%5!<%P$K$I$l$/$i$$$-$D$/AH$_9~$^$l$F$$$k$+$r(B
$B<($7$^$9!#8@$$49$($l$P!"%G%#%l%/%F%#%V$H$=$N5!G=$rMxMQ$9$k$?$a$K!"(B
$B%b%8%e!<%k$N?t$rA}$d$7$F!"%5!<%P$r:F%3%s%Q%$%k$9$kI,MW$,$"$k$+$b$7$l$J$$(B
$B$H$$$&$3$H$r<($7$^$9!#(B
$B$3$NB0@-$,<h$jF@$kCM$O0J2<$N$b$N$G$9(B:</p>
<p>これはディレクティブが Apache
ウェブサーバにどれくらいきつく組み込まれているかを
示します。言い換えれば、ディレクティブとその機能を利用するために、
モジュールの数を増やして、サーバを再コンパイルする必要があるかもしれない
ということを示します。
この属性が取り得る値は以下のものです:</p>
<dl>
<dt>Core</dt>
<dd>"Core" $B$N%G%#%l%/%F%#%V$O(B Apache
$B%&%'%V%5!<%P$N4pK\$H$J$k$Y$-$b$N$G$"$j!"(B
$B>o$K;HMQ2DG=$G$"$k$3$H$r<($7$^$9!#(B</dd>
<dd>"Core" のディレクティブは Apache
ウェブサーバの基本となるべきものであり、
常に使用可能であることを示します。</dd>
<dt>MPM</dt>
<dd>"MPM" $B$N%G%#%l%/%F%#%V$O(B<a
href="../mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B</a>$B$GDs6!$5$l$F$$$^$9!#(B
$B$3$N<oN`$N%G%#%l%/%F%#%V$O%G%#%l%/%F%#%V$NDj5A$N(B<a
href="#Module">$B%b%8%e!<%k(B</a>$B$N9T$K;H$C$F$$$k%b%8%e!<%k$NL>A0$,=q$+$l$F$$$k(B
$B>l9g$K$N$_;HMQ2DG=$G$9!#(B</dd>
<dd>"MPM" のディレクティブは<a
href="../mpm.html">マルチプロセッシングモジュール</a>で提供されています。
この種類のディレクティブはディレクティブの定義の<a
href="#Module">モジュール</a>の行に使っているモジュールの名前が書かれている
場合にのみ使用可能です。</dd>
<dt>Base</dt>
<dd>"Base" $B$N%G%#%l%/%F%#%V$O(B
$B%G%U%)%k%H$G%5!<%P$KAH$_9~$^$l$F$$$kI8=`%b%8%e!<%k$NCf$N0l$D$G%5(B
$B%]!<%H$5$l$F$$$F!"$o$6$o$6@_Dj$+$i%b%8%e!<%k$r:o=|$7$?$H$-$r=|$$$F!"(B
$BDL>o$G$O;HMQ2DG=$G$"$k$3$H$r<($7$^$9!#(B</dd>
<dd>"Base" のディレクティブは
デフォルトでサーバに組み込まれている標準モジュールの中の一つでサ
ポートされていて、わざわざ設定からモジュールを削除したときを除いて、
通常では使用可能であることを示します。</dd>
<dt>Extension</dt>
<dd>"Extension" $B$N%G%#%l%/%F%#%V$O!"(B Apache
$B%5!<%P$NG[I[J*$KF1:-$5$l$F$$$k%b%8%e!<%k$N0l$D$GDs6!$5$l$F$$$k$b$N$N!"(B
$BDL>o$G$O%5!<%P$KAH$_9~$^$l$F$$$J$$$3$H$r<($7$^$9!#(B
$B%G%#%l%/%F%#%V$H$=$N5!G=$rM-8z$K$9$k$K$O!"%5!<%P%S%k%IMQ$N@_Dj%U%!%$%k$r(B
$BJQ99$7$F(B Apache
$B$r:F%3%s%Q%$%k$9$kI,MW$,$"$j$^$9!#(B</dd>
<dd>"Extension" のディレクティブは、 Apache
サーバの配布物に同梱されているモジュールの一つで提供されているものの、
通常ではサーバに組み込まれていないことを示します。
ディレクティブとその機能を有効にするには、サーバビルド用の設定ファイルを
変更して Apache
を再コンパイルする必要があります。</dd>
<dt>Experimental</dt>
<dd>"Experimental" $B$N%G%#%l%/%F%#%V$O!"(BApache
$BG[I[J*$K(B
$BF1:-$5$l$F$$$k$b$N$N!";n$7$?$$>l9g$O<+8J@UG$$G9T$J$&(B
$BI,MW$,$"$k$H$$$&$3$H$r<($7$^$9!#%G%#%l%/%F%#%V$O!"$9$Y$F$N%I%-%e%a%s%H$r(B
$B40A4$K$=$m$o$;$k$?$a$K2r@b$5$l$F$$$^$9$,!"%5%]!<%H$5$l$F$$$k$H$O8B$j$^$;$s!#(B
$B%G%#%l%/%F%#%V$rDs6!$9$k%b%8%e!<%k$O%G%U%)%k%H$GAH$_9~$^$l$F$$$k$+$b(B
$B$7$l$^$;$s$7!"$=$&$G$J$$$+$b$7$l$^$;$s!#;HMQ2DG=$+$I$&$+$O!"(B
$B%G%#%l%/%F%#%V$H%b%8%e!<%k$N@bL@$r$7$F$$$k%Z!<%8$N@hF,$rD4$Y$F$/$@$5$$!#(B</dd>
<dd>"Experimental" のディレクティブは、Apache
配布物に
同梱されているものの、試したい場合は自己責任で行なう
必要があるということを示します。ディレクティブは、すべてのドキュメントを
完全にそろわせるために解説されていますが、サポートされているとは限りません。
ディレクティブを提供するモジュールはデフォルトで組み込まれているかも
しれませんし、そうでないかもしれません。使用可能かどうかは、
ディレクティブとモジュールの説明をしているページの先頭を調べてください。</dd>
</dl>
</section>
<section id="Module"><title>$B%b%8%e!<%k(B</title>
<section id="Module"><title>モジュール</title>
<p>
$B$3$l$OC1=c$K%G%#%l%/%F%#%V$,Dj5A$5$l$F$$$k%b%8%e!<%k$NL>A0$r5-:\$7$^$9!#(B</p>
これは単純にディレクティブが定義されているモジュールの名前を記載します。</p>
</section>
<section id="Compatibility"><title>$B8_49@-(B</title>
<section id="Compatibility"><title>互換性</title>
<p>$B%G%#%l%/%F%#%V$,(B Apache 2
$B$NG[I[$KAH$_9~$^$l$F$$$J$+$C$?>l9g!"(B
$B%G%#%l%/%F%#%V$,F3F~$5$l$?%P!<%8%g%s$,$3$3$K=q$+$l$F$$$^$9!#(B
$B$^$?!"%G%#%l%/%F%#%V$,FCDj$N%W%i%C%H%U%)!<%`$K$N$_B8:_$9$k$H$-$b(B
$B$3$3$K=q$+$l$F$$$^$9!#(B</p>
<p>ディレクティブが Apache 2
の配布に組み込まれていなかった場合、
ディレクティブが導入されたバージョンがここに書かれています。
また、ディレクティブが特定のプラットフォームにのみ存在するときも
ここに書かれています。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE directiveindex SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -21,18 +21,18 @@
-->
<directiveindex metafile="directives.xml.meta">
<title>$B%G%#%l%/%F%#%V0lMw(B</title>
<title>ディレクティブ一覧</title>
<summary>
<p>
$BI8=`(B Apache $BG[I[$K$"$k$9$Y$F$N(B Apache $B$N%G%#%l%/%F%#%V$N0lMw$G$9!#(B
$B$3$l$i$O0l4S$7$?7A<0$G=q$+$l$F$$$F!";H$o$l$F$$$kMQ8l$N(B
標準 Apache 配布にあるすべての Apache のディレクティブの一覧です。
これらは一貫した形式で書かれていて、使われている用語の
<a href="directive-dict.html"
rel="Glossary">$BMQ8l=8(B</a> $B$bMQ0U$5$l$F$$$^$9!#(B
rel="Glossary">用語集</a> も用意されています。
</p>
<p>
$B3F%G%#%l%/%F%#%V$N35MW$r@bL@$7$?(B <a
href="quickreference.html">$B%G%#%l%/%F%#%V%/%$%C%/%j%U%!%l%s%9(B</a>$B$b(B
$B$"$j$^$9!#(B
各ディレクティブの概要を説明した <a
href="quickreference.html">ディレクティブクイックリファレンス</a>も
あります。
</p>
</summary>
</directiveindex>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE moduleindex SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -21,16 +21,16 @@
-->
<moduleindex metafile="index.xml.meta">
<title>$B%b%8%e!<%k0lMw(B</title>
<title>モジュール一覧</title>
<summary>
<p>
$B0J2<$O(B Apache $B$NG[I[$N0lIt$H$7$FG[$i$l$F$$$k$9$Y$F$N%b%8%e!<%k$N(B
$B0lMw$G$9!#$9$Y$F$N(B <a href="directives.html">Apache
$B%G%#%l%/%F%#%V(B</a> $B$N%"%k%U%!%Y%C%H=g$N%j%9%H$b8+$F$/$@$5$$!#(B
以下は Apache の配布の一部として配られているすべてのモジュールの
一覧です。すべての <a href="directives.html">Apache
ディレクティブ</a> のアルファベット順のリストも見てください。
</p>
</summary>
<seealso><a href="../mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPMs)</a>
<seealso><a href="../mpm.html">マルチプロセッシングモジュール (MPMs)</a>
</seealso>
<seealso><a href="quickreference.html">$B%G%#%l%/%F%#%V(B $B%/%$%C%/%j%U%!%l%s%9(B</a>
<seealso><a href="quickreference.html">ディレクティブ クイックリファレンス</a>
</seealso>
</moduleindex>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 522942:645883 (outdated) -->
@@ -23,58 +23,58 @@
<modulesynopsis metafile="mod_access_compat.xml.meta">
<name>mod_access_compat</name>
<description>$B%[%9%H(B ($BL>A0$b$7$/$O(B IP $B%"%I%l%9(B) $B$K4p$E$$$?%0%k!<%W>5G'(B</description>
<description>ホスト (名前もしくは IP アドレス) に基づいたグループ承認</description>
<status>Extension</status>
<sourcefile>mod_access_compat.c</sourcefile>
<identifier>access_compat_module</identifier>
<compatibility>Apache 2.3 (Apache 2.x $B$N0JA0$N%P!<%8%g%s$H$N8_49@-$N$?$a$N%b%8%e!<%k$H$7$F(B)$B!#(B
$B$3$N%b%8%e!<%k$GDs6!$9$k%G%#%l%/%F%#%V$O!">5G'$N;EAH$_$N0l?7$KH<$$!"Hs?d>)$K$J$C$?$b$N$G$9!#(B
<module>mod_authz_host</module> $B$b8+$F$/$@$5$$!#(B</compatibility>
<compatibility>Apache 2.3 (Apache 2.x の以前のバージョンとの互換性のためのモジュールとして)。
このモジュールで提供するディレクティブは、承認の仕組みの一新に伴い、非推奨になったものです。
<module>mod_authz_host</module> も見てください。</compatibility>
<summary>
<p><module>mod_access_compat</module> $B$K$h$jDs6!$5$l$k%G%#%l%/%F%#%V$O(B
$B%5!<%P$NFCDj$NItJ,$X$N(B
$B%"%/%;%9$r@)8f$9$k$?$a$K(B <directive module="core" type="section"
<p><module>mod_access_compat</module> により提供されるディレクティブは
サーバの特定の部分への
アクセスを制御するために <directive module="core" type="section"
>Directory</directive>, <directive module="core"
type="section">Files</directive>, <directive module="core"
type="section">Location</directive>
$B$H(B <code><a href="core.html#accessfilename">.htaccess</a
></code> $B%U%!%$%k$G;HMQ$5$l$^$9!#%/%i%$%"%s%H$N%[%9%HL>!"(BIP
$B%"%I%l%9$d!"(B<a href="../env.html">$B4D6-JQ?t(B</a
>$B$J$I$N%j%/%(%9%H$NFCD'$K4p$E$$$F(B
$B%"%/%;%9@)8f$r9T$J$&$3$H$,$G$-$^$9!#(B<directive
module="mod_access_compat">Allow</directive> $B$H(B
<directive module="mod_access_compat">Deny</directive> $B%G%#%l%/%F%#%V$r;H$C$F!"(B
$B$I$N$h$&$J%/%i%$%"%s%H$K%"%/%;%9$r(B
$B5v2D$9$k!"$7$J$$$r;XDj$7$^$9!#$^$?(B
<directive module="mod_access_compat">Order</directive> $B%G%#%l%/%F%#%V$r;H$C$F!"(B
$B%G%U%)%k%H$N%"%/%;%9>uBV$H!"(B
<directive module="mod_access_compat">Allow</directive> $B%G%#%l%/%F%#%V$H(B
<code><a href="core.html#accessfilename">.htaccess</a
></code> ファイルで使用されます。クライアントのホスト名、IP
アドレスや、<a href="../env.html">環境変数</a
>などのリクエストの特徴に基づいて
アクセス制御を行なうことができます。<directive
module="mod_access_compat">Allow</directive>
<directive module="mod_access_compat">Deny</directive> ディレクティブを使って、
どのようなクライアントにアクセスを
許可する、しないを指定します。また
<directive module="mod_access_compat">Order</directive> ディレクティブを使って、
デフォルトのアクセス状態と、
<directive module="mod_access_compat">Allow</directive> ディレクティブと
<directive module="mod_access_compat">Deny</directive>
$B%G%#%l%/%F%#%V$H$N$*8_$$$X$N1F6A$N;EJ}$r@_Dj$7$^$9!#(B
ディレクティブとのお互いへの影響の仕方を設定します。
</p>
<p>$B%[%9%H$K$h$k%"%/%;%9@)8B$H%Q%9%o!<%I$K$h$kG'>Z$r!"(B
$BF1;~$KAH$_9g$o$;$F;H$&$3$H$b$G$-$^$9!#(B
$B$3$N>l9g!"$=$NFs$D$N@)8B$N4X78$r;XDj$9$k$?$a$K(B
<p>ホストによるアクセス制限とパスワードによる認証を、
同時に組み合わせて使うこともできます。
この場合、その二つの制限の関係を指定するために
<directive module="core">Satisfy</directive>
$B%G%#%l%/%F%#%V$r;HMQ$7$^$9!#(B</p>
ディレクティブを使用します。</p>
<note type="warning"><title>Note</title>
<p><module>mod_access_compat</module>$B$,Ds6!$9$k%G%#%l%/%F%#%V$O!"(B
$B>5G'$N;EAH$_$N0l?7$KH<$$!"Hs?d>)$K$J$C$?$b$N$G$9!#(B
<module>mod_authz_host</module> $B$b8+$F$/$@$5$$!#(B
$B%G%U%)%k%H$N>5G'$N<h$j07$$5!G=$r;HMQ$9$k$?$a$K(B
<p><module>mod_access_compat</module>が提供するディレクティブは、
承認の仕組みの一新に伴い、非推奨になったものです。
<module>mod_authz_host</module> も見てください。
デフォルトの承認の取り扱い機能を使用するために
<module>mod_authz_default</module>
$B%b%8%e!<%k$b%m!<%I$5$l$J$1$l$P$J$j$^$;$s!#(B</p>
モジュールもロードされなければなりません。</p>
</note>
<p>$B0lHLE*$K$O!"%"%/%;%9@)8B%G%#%l%/%F%#%V$O$9$Y$F$N%"%/%;%9%a%=%C%I(B
(<code>GET</code>, <code>PUT</code>, <code>POST</code> $B$J$I(B)
$B$KE,MQ$5$l$^$9!#$=$7$F!"$[$H$s$I$N>l9g$3$l$,K>$^$7$$F0:n$G$9!#(B
$B$7$+$7!"(B<directive module="core" type="section">Limit</directive>
$B%;%/%7%g%s$NCf$K%G%#%l%/%F%#%V$r=q$/$3$H$G!"(B
$B0lIt$N%a%=%C%I$K$N$_@)8B$r$+$1$k$3$H$b$G$-$^$9!#(B</p>
<p>一般的には、アクセス制限ディレクティブはすべてのアクセスメソッド
(<code>GET</code>, <code>PUT</code>, <code>POST</code> など)
に適用されます。そして、ほとんどの場合これが望ましい動作です。
しかし、<directive module="core" type="section">Limit</directive>
セクションの中にディレクティブを書くことで、
一部のメソッドにのみ制限をかけることもできます。</p>
</summary>
<seealso><directive module="mod_authz_core">Require</directive></seealso>
@@ -83,7 +83,7 @@
<directivesynopsis>
<name>Allow</name>
<description>$B%5!<%P$N$"$kNN0h$K%"%/%;%9$G$-$k%[%9%H$r@)8f$9$k(B</description>
<description>サーバのある領域にアクセスできるホストを制御する</description>
<syntax> Allow from all|<var>host</var>|env=<var>env-variable</var>
[<var>host</var>|env=<var>env-variable</var>] ...</syntax>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -91,103 +91,103 @@
<override>Limit</override>
<usage>
<p><directive>Allow</directive> $B%G%#%l%/%F%#%V$O!"$I$N%[%9%H$,(B
$B%5!<%P$N$"$kNN0h$K%"%/%;%9$G$-$k$+$K1F6A$rM?$($^$9!#(B
$B%"%/%;%9$O%[%9%HL>!"(BIP $B%"%I%l%9!"(BIP $B%"%I%l%9$NHO0O$d!"(B
$B4D6-JQ?t$J$I$N%/%i%$%"%s%H$N%j%/%(%9%H$N(B
$BFCD'$K4p$E$$$F%"%/%;%9@)8f$9$k$3$H$,$G$-$^$9!#(B</p>
<p><directive>Allow</directive> ディレクティブは、どのホストが
サーバのある領域にアクセスできるかに影響を与えます。
アクセスはホスト名、IP アドレス、IP アドレスの範囲や、
環境変数などのクライアントのリクエストの
特徴に基づいてアクセス制御することができます。</p>
<p>$B$3$N%G%#%l%/%F%#%V$N:G=i$N0z?t$O>o$K(B <code>from</code> $B$G$9!#(B
$B$=$l$KB3$/0z?t$O;0$D$N0c$C$?7A<0$,$"$j$^$9!#(B<code>Allow from
all</code> $B$,;XDj$5$l$F$$$l$P!"$9$Y$F$N%[%9%H$K%"%/%;%9$r5v2D$7!"(B
$B%"%/%;%9@)8B$O2<$G@bL@$5$l$F$$$k$h$&$K!"(B
<p>このディレクティブの最初の引数は常に <code>from</code> です。
それに続く引数は三つの違った形式があります。<code>Allow from
all</code> が指定されていれば、すべてのホストにアクセスを許可し、
アクセス制限は下で説明されているように、
<directive module="mod_access_compat">Deny</directive>
$B%G%#%l%/%F%#%V$H(B <directive module="mod_access_compat">Order</directive>
$B%G%#%l%/%F%#%V$N@_Dj$G7h$^$j$^$9!#(B
$BFCDj$N%[%9%H$d%[%9%H72$K$N$_%5!<%P$X$N%"%/%;%9$r5v2D$9$k$?$a$K$O!"(B
$B0J2<$N$I$l$+$N7A<0$G(B <em>host</em> $B$r;XDj$9$k$3$H$,$G$-$^$9(B:</p>
ディレクティブと <directive module="mod_access_compat">Order</directive>
ディレクティブの設定で決まります。
特定のホストやホスト群にのみサーバへのアクセスを許可するためには、
以下のどれかの形式で <em>host</em> を指定することができます:</p>
<dl>
<dt>$B%I%a%$%sL>(B ($B$N0lIt(B)</dt>
<dt>ドメイン名 (の一部)</dt>
<dd>
<example><title>$BNc(B</title>
<example><title></title>
Allow from apache.org<br />
Allow from .net example.edu
</example>
<p>$B$3$NJ8;zNs$K9g$&$+!"$3$l$G=*$o$kL>A0$N%[%9%H$N%"%/%;%9$,5v2D$5$l$^$9!#(B
$B3FItJ,$,40A4$K9g$&$b$N$@$1$KE,MQ$5$l$^$9$N$G!">e$NNc$O(B
<code>foo.apache.org</code> $B$K$O%^%C%A$7$^$9$,!"(B
<code>fooapache.org</code> $B$K$O%^%C%A$7$^$;$s!#(B
$B$3$N@_Dj$r$9$k$H!"(BApache $B$O(B
<p>この文字列に合うか、これで終わる名前のホストのアクセスが許可されます。
各部分が完全に合うものだけに適用されますので、上の例は
<code>foo.apache.org</code> にはマッチしますが、
<code>fooapache.org</code> にはマッチしません。
この設定をすると、Apache は
<directive module="core">HostnameLookups</directive>
$B$N@_Dj$K4X$o$i$:!"%/%i%$%"%s%H$N(B IP $B%"%I%l%9$KBP$7$F(B
DNS $B$N(B 2 $B=E5U0z$-$r9T$J$$$^$9!#(B
$B%[%9%HL>$+$i%*%j%8%J%k$N(B IP $B%"%I%l%9$r=g0z$-$7$^$9!#(B
$B=g0z$-$H5U0z$-$,0lCW$7!"%[%9%HL>$,3:Ev$7$?>l9g$K$N$_!"(B
$B%"%/%;%9$,5v2D$5$l$^$9!#(B</p></dd>
の設定に関わらず、クライアントの IP アドレスに対して
DNS の 2 重逆引きを行ないます。
ホスト名からオリジナルの IP アドレスを順引きします。
順引きと逆引きが一致し、ホスト名が該当した場合にのみ、
アクセスが許可されます。</p></dd>
<dt>$B40A4$J(B IP $B%"%I%l%9(B</dt>
<dt>完全な IP アドレス</dt>
<dd>
<example><title>$BNc(B</title>
<example><title></title>
Allow from 10.1.2.3<br />
Allow from 192.168.1.104 192.168.1.205
</example>
<p>$B%"%/%;%9$r5v2D$9$k(B IP $B%"%I%l%9$G$9!#(B</p></dd>
<p>アクセスを許可する IP アドレスです。</p></dd>
<dt>IP $B%"%I%l%9$N0lIt(B</dt>
<dt>IP アドレスの一部</dt>
<dd>
<example><title>$BNc(B</title>
<example><title></title>
Allow from 10.1<br />
Allow from 10 172.20 192.168.2
</example>
<p>$B%5%V%M%C%H$N@)8BMQ$N!"(BIP
$B%"%I%l%9$N:G=i$N0l$D$+$i;0$D$^$G$N%P%$%H$G$9!#(B</p></dd>
<p>サブネットの制限用の、IP
アドレスの最初の一つから三つまでのバイトです。</p></dd>
<dt>$B%M%C%H%o!<%/(B/$B%M%C%H%^%9%/(B $B$NBP(B</dt>
<dt>ネットワーク/ネットマスク の対</dt>
<dd>
<example><title>$BNc(B</title>
<example><title></title>
Allow from 10.1.0.0/255.255.0.0
</example>
<p>$B%M%C%H%o!<%/(B a.b.c.d $B$H%M%C%H%^%9%/(B w.x.y.z $B$G$9!#(B
$B$h$j:YN3EY$N%5%V%M%C%H@)8BMQ$G$9!#(B</p></dd>
<p>ネットワーク a.b.c.d とネットマスク w.x.y.z です。
より細粒度のサブネット制限用です。</p></dd>
<dt>$B%M%C%H%o!<%/(B/nnn CIDR $B;XDj(B</dt>
<dt>ネットワーク/nnn CIDR 指定</dt>
<dd>
<example><title>$BNc(B</title>
<example><title></title>
Allow from 10.1.0.0/16
</example>
<p>$B%M%C%H%^%9%/$,(B nnn $B$N>e0L%S%C%H$,(B 1
$B$H$J$C$F$$$k$b$N$+$i$J$k$3$H0J30$OA0$N$b$N$HF1$8$G$9!#(B</p></dd>
<p>ネットマスクが nnn の上位ビットが 1
となっているものからなること以外は前のものと同じです。</p></dd>
</dl>
<p>$BCm(B: $B:G8e$N;0$D$NNc$O$^$C$?$/F1$8%[%9%H$K9g$$$^$9!#(B</p>
<p>注: 最後の三つの例はまったく同じホストに合います。</p>
<p>IPv6 $B%"%I%l%9$H(B IPv6 $B$N%5%V%M%C%H$O0J2<$N$h$&$K;XDj$G$-$^$9(B:</p>
<p>IPv6 アドレスと IPv6 のサブネットは以下のように指定できます:</p>
<example>
Allow from 2001:db8::a00:20ff:fea7:ccea<br />
Allow from 2001:db8::a00:20ff:fea7:ccea/10
</example>
<p><directive>Allow</directive> $B%G%#%l%/%F%#%V$N0z?t$N;0$DL\$N7A<0$O!"(B
<a href="../env.html">$B4D6-JQ?t(B</a>
$B$NB8:_$K$h$j%"%/%;%9$N@)8f$r9T$J$($k$h$&$K$9$k$b$N$G$9!#(B
<p><directive>Allow</directive> ディレクティブの引数の三つ目の形式は、
<a href="../env.html">環境変数</a>
の存在によりアクセスの制御を行なえるようにするものです。
<code>Allow from env=<var>env-variable</var></code>
$B$,;XDj$5$l$F$$$k$H!"4D6-JQ?t(B <var>env-variable</var>
$B$,B8:_$7$?>l9g$K%j%/%(%9%H$O%"%/%;%9$r5v2D$5$l$^$9!#%5!<%P$O(B
が指定されていると、環境変数 <var>env-variable</var>
が存在した場合にリクエストはアクセスを許可されます。サーバは
<module>mod_setenvif</module>
$B$N%G%#%l%/%F%#%V$K$h$j!"%/%i%$%"%s%H$N%j%/%(%9%H(B
$B$NFCD'$K4p$E$$$F=@Fp$K4D6-JQ?t$r@_Dj$9$k5!G=$rDs6!$7$^$9!#(B
$B$G$9$+$i!"$3$N%G%#%l%/%F%#%V$O%/%i%$%"%s%H$N(B
<code>User-Agent</code> ($B%V%i%&%6$N<oN`(B)$B!"(B<code>Referer</code>
$B$dB>$N(B HTTP $B%j%/%(%9%H$N%X%C%@%U%#!<%k%I$J$I$K4p$E$$$F(B
$B%"%/%;%95v2D$r$9$k$?$a$K;H$&$3$H$,$G$-$^$9!#(B
のディレクティブにより、クライアントのリクエスト
の特徴に基づいて柔軟に環境変数を設定する機能を提供します。
ですから、このディレクティブはクライアントの
<code>User-Agent</code> (ブラウザの種類)、<code>Referer</code>
や他の HTTP リクエストのヘッダフィールドなどに基づいて
アクセス許可をするために使うことができます。
</p>
<example><title>Example:</title>
@@ -201,35 +201,35 @@
&lt;/Directory&gt;
</example>
<p>$B$3$N>l9g!"(Buser-agent $B$NJ8;zNs$,(B <code>KnockKnock/2.0</code>
$B$G;O$^$k%V%i%&%6$N$_$,%"%/%;%9$,5v2D$5$l!"(B
$BB>$N$b$N$O%"%/%;%9$,5qH]$5$l$^$9!#(B</p>
<p>この場合、user-agent の文字列が <code>KnockKnock/2.0</code>
で始まるブラウザのみがアクセスが許可され、
他のものはアクセスが拒否されます。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>Deny</name>
<description>$B%5!<%P$,%"%/%;%9$r5qH]$9$k%[%9%H$r@)8f$9$k(B</description>
<description>サーバがアクセスを拒否するホストを制御する</description>
<syntax> Deny from all|<var>host</var>|env=<var>env-variable</var>
[<var>host</var>|env=<var>env-variable</var>] ...</syntax>
<contextlist><context>directory</context><context>.htaccess</context>
</contextlist>
<override>Limit</override>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O%[%9%HL>!"(BIP
$B%"%I%l%9!"4D6-JQ?t$K4p$E$$$F%5!<%P$X$N%"%/%;%9$r@)8B$7$^$9!#(B
<directive>Deny</directive> $B%G%#%l%/%F%#%V$N0z?t$O(B <directive
<p>このディレクティブはホスト名、IP
アドレス、環境変数に基づいてサーバへのアクセスを制限します。
<directive>Deny</directive> ディレクティブの引数は <directive
module="mod_access_compat">Allow</directive>
$B%G%#%l%/%F%#%V$H$^$C$?$/F1$8$G$9!#(B</p>
ディレクティブとまったく同じです。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>Order</name>
<description>$B%G%U%)%k%H$N%"%/%;%92DG=$J>uBV$H!"(B<directive>Allow</directive> $B$H(B
<directive>Deny</directive> $B$,I>2A$5$l$k=gHV$r@)8f$9$k(B</description>
<description>デフォルトのアクセス可能な状態と、<directive>Allow</directive>
<directive>Deny</directive> が評価される順番を制御する</description>
<syntax> Order <var>ordering</var></syntax>
<default>Order Deny,Allow</default>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -238,88 +238,88 @@
<usage>
<p><directive>Order</directive> $B%G%#%l%/%F%#%V$O(B <directive
module="mod_access_compat">Allow</directive> $B%G%#%l%/%F%#%V$H(B<directive
module="mod_access_compat">Deny</directive> $B$H6&$K(B"3$BCJ3,%"%/%;%9@)8f%7%9%F%`(B"
$B$r@)8f$7$^$9!#Bh(B1$BCJ3,L\$G$O(B <directive>Order</directive> $B%G%#%l%/%F%#%V$G(B1$BHVL\$K(B
$B;XDj$7$?%G%#%l%/%F%#%V(B(<directive module="mod_access_compat">Allow</directive>
$B$^$?$O(B <directive module="mod_access_compat">Deny</directive>)$B$rA4$F=hM}$7$^$9!#(B
$BBh(B2$BCJ3,L\$G!";D$j$N%G%#%l%/%F%#%V(B(<directive
module="mod_access_compat">Deny</directive> $B$^$?$O(B <directive
<p><directive>Order</directive> ディレクティブは <directive
module="mod_access_compat">Allow</directive> ディレクティブと<directive
module="mod_access_compat">Deny</directive> と共に"3段階アクセス制御システム"
を制御します。第1段階目では <directive>Order</directive> ディレクティブで1番目に
指定したディレクティブ(<directive module="mod_access_compat">Allow</directive>
または <directive module="mod_access_compat">Deny</directive>)を全て処理します。
第2段階目で、残りのディレクティブ(<directive
module="mod_access_compat">Deny</directive> または <directive
module="mod_access_compat">Allow</directive>)
$B$rA4$F=hM}$7$^$9!#Bh(B3$BCJ3,L\$G!"Bh(B1$BCJ3,L\$HBh(B2$BCJ3,L\$G(B
$B%^%C%A$7$J$+$C$?%j%/%(%9%H$r=hM}$7$^$9!#(B</p>
を全て処理します。第3段階目で、第1段階目と第2段階目で
マッチしなかったリクエストを処理します。</p>
<p>$BA4$F$N(B <directive module="mod_access_compat">Allow</directive> $B$H(B <directive
module="mod_access_compat">Deny</directive> $B$,=hM}$5$l!"7k6I$N$H$3$m:G8e$K%^%C%A(B
$B$7$?>r7o$,M-8z$H$J$k$3$H$KCm0U$7$F$/$@$5$$!#$3$l$O:G=i$K%^%C%A$7$?>r7o$@$1$,M-8z(B
$B$H$J$k!"E57?E*$J%U%!%$%"%&%)!<%k$NF0:n$H$O0[$J$C$F$$$^$9!#(B
$B$^$?!"@_Dj%U%!%$%k$K=q$/=gHV$K$O0UL#$O$"$j$^$;$s!#(B<directive
module="mod_access_compat">Allow</directive> $B9T$OA4It0l$D$N%0%k!<%W$H$7$F07$o$l!"(B
<directive module="mod_access_compat">Deny</directive> $B9T$O$b$&0l$D$N%0%k!<%W$H$_$J$5$l$^$9!#(B
$B$^$?%G%U%)%k%H>uBV$OC1FH$G0l$D$N%0%k!<%W$H$_$J$5$l$^$9!#(B</p>
<p>全ての <directive module="mod_access_compat">Allow</directive> <directive
module="mod_access_compat">Deny</directive> が処理され、結局のところ最後にマッチ
した条件が有効となることに注意してください。これは最初にマッチした条件だけが有効
となる、典型的なファイアウォールの動作とは異なっています。
また、設定ファイルに書く順番には意味はありません。<directive
module="mod_access_compat">Allow</directive> 行は全部一つのグループとして扱われ、
<directive module="mod_access_compat">Deny</directive> 行はもう一つのグループとみなされます。
またデフォルト状態は単独で一つのグループとみなされます。</p>
<p><em>Order</em> $B@_Dj$O0J2<$N0J2<$N$I$l$+$G$9!#(B</p>
<p><em>Order</em> 設定は以下の以下のどれかです。</p>
<dl>
<dt><code>Allow,Deny</code></dt>
<dd>$B$^$:(B <directive module="mod_access_compat">Allow</directive>
$B%G%#%l%/%F%#%V$,E,MQ$5$l$^$9!#$I$l$K$b%^%C%A$7$J$+$C$?>l9g!"$3$N;~E@$G(B
$B%j%/%(%9%H$O5qH]$5$l$^$9!#<!$K!"A4$F$N(B <directive module="mod_access_compat">
Deny</directive> $B%G%#%l%/%F%#%V$,E,MQ$5$l$^$9!#$I$l$+0l$D$G$b%^%C%A$7$?>l9g$O!"(B
$B%j%/%(%9%H$O5qH]$5$l$^$9!#(B
$B:G8e$K!"(B <directive module="mod_access_compat">Allow</directive> $B$K$b(B <directive
module="mod_access_compat">Deny</directive> $B$K$b%^%C%A$7$J$+$C$?%j%/%(%9%H$O(B
$B%G%U%)%k%H@_Dj$,E,MQ$5$l$k$N$G5qH]$5$l$^$9!#(B</dd>
<dd>まず <directive module="mod_access_compat">Allow</directive>
ディレクティブが適用されます。どれにもマッチしなかった場合、この時点で
リクエストは拒否されます。次に、全ての <directive module="mod_access_compat">
Deny</directive> ディレクティブが適用されます。どれか一つでもマッチした場合は、
リクエストは拒否されます。
最後に、 <directive module="mod_access_compat">Allow</directive> にも <directive
module="mod_access_compat">Deny</directive> にもマッチしなかったリクエストは
デフォルト設定が適用されるので拒否されます。</dd>
<dt><code>Deny,Allow</code></dt>
<dd>$B$^$:(B <directive module="mod_access_compat">Deny</directive>
$B%G%#%l%/%F%#%V$,E,MQ$5$l$^$9!#$I$l$+0l$D$G$b%^%C%A$7$?>l9g$O!"(B
<directive module="mod_access_compat">Allow</directive> $B$N$I$l$K$b(B
$B%^%C%A(B<strong>$B$7$J$1$l$P(B</strong>$B!"%"%/%;%9$O5qH]$5$l$^$9!#(B
$B$I$N(B <directive module="mod_access_compat">Allow</directive> $B$K$b(B <directive
module="mod_access_compat">Deny</directive> $B$K$b%^%C%A$7$J$$%j%/%(%9%H$O(B
$B5v2D$5$l$^$9!#(B</dd>
<dd>まず <directive module="mod_access_compat">Deny</directive>
ディレクティブが適用されます。どれか一つでもマッチした場合は、
<directive module="mod_access_compat">Allow</directive> のどれにも
マッチ<strong>しなければ</strong>、アクセスは拒否されます。
どの <directive module="mod_access_compat">Allow</directive> にも <directive
module="mod_access_compat">Deny</directive> にもマッチしないリクエストは
許可されます。</dd>
<dt><code>Mutual-failure</code></dt>
<dd>$B$3$l$O(B <directive>Order Allow,Deny</directive> $B$HA4$/F1$88z2L$r;}$A!"(B
$B$=$N$?$aHs?d>)$H$J$C$F$$$^$9!#(B
<dd>これは <directive>Order Allow,Deny</directive> と全く同じ効果を持ち、
そのため非推奨となっています。
</dd>
</dl>
<p>$B%-!<%o!<%I$N4V$KCV$1$k$N$O%3%s%^$@$1$G$9!#(B
$B4V$K(B<em>$B6uGr$,$"$C$F$O$$$1$^$;$s(B</em>$B!#(B</p>
<p>キーワードの間に置けるのはコンマだけです。
間に<em>空白があってはいけません</em>。</p>
<table border="1">
<tr>
<th>$B%^%C%A(B</th>
<th>Allow,Deny $B;~$N7k2L(B</th>
<th>Deny,Allow $B;~$N7k2L(B</th>
<th>マッチ</th>
<th>Allow,Deny 時の結果</th>
<th>Deny,Allow 時の結果</th>
</tr><tr>
<th>Allow $B$@$1$K%^%C%A(B</th>
<td>$B5v2D(B</td>
<td>$B5v2D(B</td>
<th>Allow だけにマッチ</th>
<td>許可</td>
<td>許可</td>
</tr><tr>
<th>Deny $B$@$1$K%^%C%A(B</th>
<td>$B5qH](B</td>
<td>$B5qH](B</td>
<th>Deny だけにマッチ</th>
<td>拒否</td>
<td>拒否</td>
</tr><tr>
<th>$B$I$A$i$K$b%^%C%A$7$J$$(B</th>
<td>2$BHVL\$N%G%#%l%/%F%#%V$,%G%U%)%k%H(B: $B5qH](B</td>
<td>2$BHVL\$N%G%#%l%/%F%#%V$,%G%U%)%k%H(B: $B5v2D(B</td>
<th>どちらにもマッチしない</th>
<td>2番目のディレクティブがデフォルト: 拒否</td>
<td>2番目のディレクティブがデフォルト: 許可</td>
</tr><tr>
<th>Allow $B$H(B Deny $BN>J}$K%^%C%A(B</th>
<td>$B:G8e$K%^%C%A$7$?$[$&(B: $B5qH](B</td>
<td>$B:G8e$K%^%C%A$7$?$[$&(B: $B5v2D(B</td>
<th>Allow と Deny 両方にマッチ</th>
<td>最後にマッチしたほう: 拒否</td>
<td>最後にマッチしたほう: 許可</td>
</tr>
</table>
<p>$B0J2<$NNc$G$O!"(Bapache.org
$B%I%a%$%s$N$9$Y$F$N%[%9%H$O%"%/%;%9$r5v2D$5$l$^$9!#(B
$BB>$N$9$Y$F$N%[%9%H$O%"%/%;%9$r5qH]$5$l$^$9!#(B</p>
<p>以下の例では、apache.org
ドメインのすべてのホストはアクセスを許可されます。
他のすべてのホストはアクセスを拒否されます。</p>
<example>
Order Deny,Allow<br />
@@ -327,12 +327,12 @@
Allow from apache.org
</example>
<p>$B<!$NNc$G$O!"(Bfoo.apache.org $B%5%V%I%a%$%s$K$"$k%[%9%H0J30$N!"(B
apache.org $B%I%a%$%s$N$9$Y$F$N%[%9%H$,%"%/%;%9$r5v2D$5$l$^$9!#(B
<p>次の例では、foo.apache.org サブドメインにあるホスト以外の、
apache.org ドメインのすべてのホストがアクセスを許可されます。
apache.org
$B%I%a%$%s$G$J$$%[%9%H$O!"%G%U%)%k%H$N>uBV$,(B <directive
module="mod_access_compat">Deny</directive> $B$N$?$a!"(B
$B%5!<%P$X$N%"%/%;%9$r5qH]$5$l$^$9!#(B</p>
ドメインでないホストは、デフォルトの状態が <directive
module="mod_access_compat">Deny</directive> のため、
サーバへのアクセスを拒否されます。</p>
<example>
Order Allow,Deny<br />
@@ -340,23 +340,23 @@
Deny from foo.apache.org
</example>
<p>$B0lJ}!">e$NNc$N(B <directive>Order</directive> $B$,(B <code>Deny,Allow</code>
$B$KJQ$o$C$F$$$l$P!"$9$Y$N%[%9%H$K%"%/%;%9$,5v2D$5$l$^$9!#(B
$B$3$l$O!"@_Dj%U%!%$%kCf$N<B:]$N=gHV$K4X$o$i$:!"(B
<code>Allow from apache.org</code> $B$,:G8e$KI>2A$5$l$F!"(B
<code>Deny from foo.apache.org</code> $B$r>e=q$-$9$k$+$i$G$9!#(B
<p>一方、上の例の <directive>Order</directive> <code>Deny,Allow</code>
に変わっていれば、すべのホストにアクセスが許可されます。
これは、設定ファイル中の実際の順番に関わらず、
<code>Allow from apache.org</code> が最後に評価されて、
<code>Deny from foo.apache.org</code> を上書きするからです。
<code>apache.org</code>
$B%I%a%$%s$K$J$$%[%9%H$b!"%G%U%)%k%H$N>uBV$,(B <directive
ドメインにないホストも、デフォルトの状態が <directive
module="mod_access_compat">Allow</directive>
$B$J$N$G!"%"%/%;%9$r5v2D$5$l$^$9!#(B
なので、アクセスを許可されます。
</p>
<p><directive>Order</directive>
$B%G%#%l%/%F%#%V$O%G%U%)%k%H$N%"%/%;%9$N>uBV$K1F6A$rM?$($k$N$G!"(B
<directive module="mod_authz_host">Allow</directive> $B%G%#%l%/%F%#%V$H(B
ディレクティブはデフォルトのアクセスの状態に影響を与えるので、
<directive module="mod_authz_host">Allow</directive> ディレクティブと
<directive module="mod_authz_host">Deny</directive>
$B%G%#%l%/%F%#%V$,L5$/$F$b!"%5!<%P$N%"%/%;%9$K1F6A$rM?$($k$3$H$,$G$-$^$9!#(B
$B$?$H$($P!"(B</p>
ディレクティブが無くても、サーバのアクセスに影響を与えることができます。
たとえば、</p>
<example>
&lt;Directory /www&gt;<br />
@@ -366,60 +366,60 @@
&lt;/Directory&gt;
</example>
<p>$B$O%G%U%)%k%H$N%"%/%;%9>uBV$,(B
<directive module="mod_access_compat">Deny</directive> $B$K$J$k$?$a!"(B
<code>/www</code> $B%G%#%l%/%H%j$X$N$9$Y$F$N%"%/%;%9$r5qH]$7$^$9!#(B
<p>はデフォルトのアクセス状態が
<directive module="mod_access_compat">Deny</directive> になるため、
<code>/www</code> ディレクトリへのすべてのアクセスを拒否します。
</p>
<p><directive>Order</directive>
$B%G%#%l%/%F%#%V$O%5!<%P$N@_Dj=hM}$N3FCJ3,$G$@$1(B
$B%"%/%;%9%G%#%l%/%F%#%V$N=hM}$N=gHV$rJQ99$7$^$9!#$3$l$O!"$?$H$($P!"(B
<directive>Order</directive> $B%G%#%l%/%F%#%V$N@_Dj$K4X$o$i$:!"(B
<directive module="core" type="section">Location</directive> $B%;%/%7%g%s$N(B
<directive module="mod_access_compat">Allow</directive> $B%G%#%l%/%F%#%V$d(B
<directive module="mod_access_compat">Deny</directive> $B%G%#%l%/%F%#%V$O!"(B
<directive module="core" type="sectino">Directory</directive> $B%;%/%7%g%s$d(B
<code>.htaccess</code> $B%U%!%$%k$N(B <directive
ディレクティブはサーバの設定処理の各段階でだけ
アクセスディレクティブの処理の順番を変更します。これは、たとえば、
<directive>Order</directive> ディレクティブの設定に関わらず、
<directive module="core" type="section">Location</directive> セクションの
<directive module="mod_access_compat">Allow</directive> ディレクティブや
<directive module="mod_access_compat">Deny</directive> ディレクティブは、
<directive module="core" type="sectino">Directory</directive> セクションや
<code>.htaccess</code> ファイルの <directive
module="mod_access_compat">Allow</directive>
$B%G%#%l%/%F%#%V$d(B <directive module="mod_access_compat">Deny</directive>
$B%G%#%l%/%F%#%V$h$j$b>o$K8e$KI>2A$5$l$k$H$$$&$3$H$r0UL#$7$^$9!#(B
$B@_Dj%;%/%7%g%s$N%^!<%8$N>\:Y$K$D$$$F$O!"(B
ディレクティブや <directive module="mod_access_compat">Deny</directive>
ディレクティブよりも常に後に評価されるということを意味します。
設定セクションのマージの詳細については、
<a href="../sections.html">Directory,Location, Files
$B%;%/%7%g%s$NF0:nJ}K!(B</a> $B$r;2>H$7$F$/$@$5$$!#(B</p>
セクションの動作方法</a> を参照してください。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>Satisfy</name>
<description>$B%[%9%H%l%Y%k$N%"%/%;%9@)8f$H%f!<%6G'>Z$H$NAj8_:nMQ$r;XDj(B</description>
<description>ホストレベルのアクセス制御とユーザ認証との相互作用を指定</description>
<syntax>Satisfy Any|All</syntax>
<default>Satisfy All</default>
<contextlist><context>directory</context><context>.htaccess</context>
</contextlist>
<override>AuthConfig</override>
<compatibility>$B%P!<%8%g%s(B 2.0.51 $B0J9_$G$O(B <directive module="core" type="section"
>Limit</directive> $B%G%#%l%/%F%#%V$H(B <directive module="core"
type="section">LimitExcept</directive> $B%G%#%l%/%F%#%V$N1F6A$r<u$1$k(B
<compatibility>バージョン 2.0.51 以降では <directive module="core" type="section"
>Limit</directive> ディレクティブと <directive module="core"
type="section">LimitExcept</directive> ディレクティブの影響を受ける
</compatibility>
<usage>
<p><directive module="mod_authz_host">Allow</directive> $B$H(B
<directive module="mod_authz_core">Require</directive> $B$NN>J}$,;H$o$l$F$$$k$H$-$N(B
$B%"%/%;%9%]%j%7!<$r@_Dj$7$^$9!#%Q%i%a!<%?$O(B <code>All</code> $B$+(B <code>Any</code>
$B$G$9!#$3$N%G%#%l%/%F%#%V$O$"$k>l=j$X$N%"%/%;%9$,%f!<%6L>(B/$B%Q%9%o!<%I(B
<em>$B$H(B</em>$B%/%i%$%"%s%H$N%[%9%H$N%"%I%l%9$G@)8B$5$l$F$$$k$H$-$K$N$_(B
$BLrN)$A$^$9!#%G%U%)%k%H$NF0:n(B (<code>All</code>) $B$O%/%i%$%"%s%H$,%"%I%l%9$K$h$k(B
$B%"%/%;%9@)8B$rK~$?$7!"(B<em>$B$+$D(B</em>$B@5$7$$%f!<%6L>$H%Q%9%o!<%I$rF~NO$9$k$3$H$r(B
$BMW5a$7$^$9!#(B<code>Any</code> $B$G$O!"%/%i%$%"%s%H$O%[%9%H$N@)8B$rK~$?$9$+!"(B
$B@5$7$$%f!<%6L>$H%Q%9%o!<%I$NF~NO$r$9$k$+$r$9$l$P%"%/%;%9$r5v2D$5$l$^$9!#(B
$B$3$l$O!"$"$k>l=j$r%Q%9%o!<%I$GJ]8n$9$k$1$l$I!"FCDj$N%"%I%l%9$+$i$N(B
$B%/%i%$%"%s%H$K$O%Q%9%o!<%I$NF~NO$rMW5a$;$:$K%"%/%;%9$r5v2D$9$k!"(B
$B$H$$$&$h$&$J$H$-$K;HMQ$G$-$^$9!#(B</p>
<p><directive module="mod_authz_host">Allow</directive>
<directive module="mod_authz_core">Require</directive> の両方が使われているときの
アクセスポリシーを設定します。パラメータは <code>All</code> <code>Any</code>
です。このディレクティブはある場所へのアクセスがユーザ名/パスワード
<em>と</em>クライアントのホストのアドレスで制限されているときにのみ
役立ちます。デフォルトの動作 (<code>All</code>) はクライアントがアドレスによる
アクセス制限を満たし、<em>かつ</em>正しいユーザ名とパスワードを入力することを
要求します。<code>Any</code> では、クライアントはホストの制限を満たすか、
正しいユーザ名とパスワードの入力をするかをすればアクセスを許可されます。
これは、ある場所をパスワードで保護するけれど、特定のアドレスからの
クライアントにはパスワードの入力を要求せずにアクセスを許可する、
というようなときに使用できます。</p>
<p>$BNc$($P!"F1$8%M%C%H%o!<%/>e$K$$$k?M$K$O%&%'%V%5%$%H$N$"$kItJ,$K$D$$$F(B
$BL5@)8B$N%"%/%;%9$r5v$7$?$$$1$l$I!"30$N%M%C%H%o!<%/$N?M$K$O(B
$B%Q%9%o!<%I$rDs6!$5$;$k$h$&$K$9$k$?$a$K$O!"<!$N$h$&$J@_Dj$r$9$k$3$H$,(B
$B$G$-$^$9(B:</p>
<p>例えば、同じネットワーク上にいる人にはウェブサイトのある部分について
無制限のアクセスを許したいけれど、外のネットワークの人には
パスワードを提供させるようにするためには、次のような設定をすることが
できます:</p>
<example>
Require valid-user<br />
@@ -427,14 +427,14 @@
Satisfy Any
</example>
<p>$B%P!<%8%g%s(B 2.0.51 $B$+$i$O(B
<p>バージョン 2.0.51 からは
<directive module="core"
type="section">Limit</directive> $B%;%/%7%g%s$H(B
type="section">Limit</directive> セクションと
<directive module="core" type="section"
>LimitExcept</directive> $B%;%/%7%g%s$r;HMQ$9$k$3$H$G(B
<directive>Satisfy</directive> $B%G%#%l%/%F%#%V$,(B
$BE,MQ$5$l$k%a%=%C%I$r@)8B$9$k$3$H$,(B
$B$G$-$k$h$&$K$J$j$^$7$?!#(B</p>
>LimitExcept</directive> セクションを使用することで
<directive>Satisfy</directive> ディレクティブが
適用されるメソッドを制限することが
できるようになりました。</p>
</usage>
<seealso><directive module="mod_access_compat">Allow</directive></seealso>
<seealso><directive module="mod_authz_core">Require</directive></seealso>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -24,57 +24,57 @@
<name>mod_actions</name>
<description>$B%a%G%#%"%?%$%W$d%j%/%(%9%H%a%=%C%I$K1~$8$F(B
CGI $B%9%/%j%W%H$r<B9T$9$k5!G=$rDs6!(B</description>
<description>メディアタイプやリクエストメソッドに応じて
CGI スクリプトを実行する機能を提供</description>
<status>Base</status>
<sourcefile>mod_actions.c</sourcefile>
<identifier>actions_module</identifier>
<summary>
<p>$B$3$N%b%8%e!<%k$K$OFs$D$N%G%#%l%/%F%#%V$,$"$j$^$9!#(B<directive
<p>このモジュールには二つのディレクティブがあります。<directive
module="mod_actions">Action</directive>
$B%G%#%l%/%F%#%V$OFCDj$N(B MIME $B%?%$%W$N%U%!%$%k$r%j%/%(%9%H$5$l$?>l9g$K(B
CGI $B%9%/%j%W%H$,<B9T$5$l$k$h$&$K$7$^$9!#(B<directive
ディレクティブは特定の MIME タイプのファイルをリクエストされた場合に
CGI スクリプトが実行されるようにします。<directive
module="mod_actions">Script</directive>
$B%G%#%l%/%F%#%V$O%j%/%(%9%H$GFCDj$N%a%=%C%I$,;HMQ$5$l$?$H$-$K(B CGI
$B%9%/%j%W%H$,<B9T$5$l$k$h$&$K$7$^$9!#(B
$B$3$l$O%U%!%$%k$r=hM}$9$k%9%/%j%W%H$N<B9T$r$:$C$H4JC1$K$7$^$9!#(B</p>
ディレクティブはリクエストで特定のメソッドが使用されたときに CGI
スクリプトが実行されるようにします。
これはファイルを処理するスクリプトの実行をずっと簡単にします。</p>
</summary>
<seealso><module>mod_cgi</module></seealso>
<seealso><a href="../howto/cgi.html">CGI $B$K$h$kF0E*%3%s%F%s%D(B</a></seealso>
<seealso><a href="../handler.html">Apache $B$N%O%s%I%i$N;HMQ(B</a></seealso>
<seealso><a href="../howto/cgi.html">CGI による動的コンテンツ</a></seealso>
<seealso><a href="../handler.html">Apache のハンドラの使用</a></seealso>
<directivesynopsis>
<name>Action</name>
<description>$BFCDj$N%O%s%I%i$d%3%s%F%s%H%?%$%W$KBP$7$F(B CGI $B$r<B9T$9$k$h$&$K(B
$B@_Dj(B</description>
<description>特定のハンドラやコンテントタイプに対して CGI を実行するように
設定</description>
<syntax>Action <var>action-type</var> <var>cgi-script</var> [virtual]</syntax>
<contextlist>
<context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>
<compatibility><code>virtual</code> $B=$>~;R$H%O%s%I%iEO$7$O(B
Apache 2.1 $B$GF3F~$5$l$^$7$?(B</compatibility>
<compatibility><code>virtual</code> 修飾子とハンドラ渡しは
Apache 2.1 で導入されました</compatibility>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O(B <var>action-type</var>
$B$,%j%/%(%9%H$5$l$?$H$-$K(B <var>cgi-script</var>
$B$,<B9T$5$l$k$H$$$&F0:n$rDI2C$7$^$9!#(B<var>cgi-script</var> $B$O(B
<directive module="mod_alias">ScriptAlias</directive> $B$d(B
<directive module="mod_mime">AddHandler</directive> $B$K$h$C$F(B
CGI $B%9%/%j%W%H$K@_Dj$5$l$?%j%=!<%9$X$N(B URL-path $B$G$9!#(B
<var>Action-type</var> $B$K$O(B
<a href="../handler.html">handler</a> $B$+(B MIME
$B%3%s%F%s%H%?%$%W$r;XDj$G$-$^$9!#%j%/%(%9%H$5$l$?%I%-%e%a%s%H$N(B URL
$B$H%U%!%$%k$N%Q%9$OI8=`(B CGI $B4D6-JQ?t(B <code>PATH_INFO</code> $B$H(B
<code>PATH_TRANSLATED</code> $B$r;H$C$FEA$($i$l$^$9!#(B
$BFCDj$N%j%/%(%9%H$KBP$7$F;HMQ$5$l$k%O%s%I%i$X$O!"(B
<code>REDIRECT_HANDLER</code> $BJQ?t$r;H$C$FEO$;$^$9!#(B</p>
<p>このディレクティブは <var>action-type</var>
がリクエストされたときに <var>cgi-script</var>
が実行されるという動作を追加します。<var>cgi-script</var>
<directive module="mod_alias">ScriptAlias</directive>
<directive module="mod_mime">AddHandler</directive> によって
CGI スクリプトに設定されたリソースへの URL-path です。
<var>Action-type</var> には
<a href="../handler.html">handler</a> MIME
コンテントタイプを指定できます。リクエストされたドキュメントの URL
とファイルのパスは標準 CGI 環境変数 <code>PATH_INFO</code>
<code>PATH_TRANSLATED</code> を使って伝えられます。
特定のリクエストに対して使用されるハンドラへは、
<code>REDIRECT_HANDLER</code> 変数を使って渡せます。</p>
<example><title>$BNc(B</title>
<example><title></title>
# Requests for files of a particular MIME content type:<br />
Action image/gif /cgi-bin/images.cgi<br />
<br />
@@ -83,20 +83,20 @@ Apache 2.1 $B$GF3F~$5$l$^$7$?(B</compatibility>
Action my-file-type /cgi-bin/program.cgi<br />
</example>
<p>$B:G=i$NNc$G$O!"(BMIME $B%3%s%F%s%H%?%$%W$,(B <code>image/gif</code>
$B$N%U%!%$%k$X$N%j%/%(%9%H$O!";XDj$7$?%9%/%j%W%H(B
<code>/cgi-bin/images.cgi</code> $B$G=hM}$5$l$^$9!#(B</p>
<p>最初の例では、MIME コンテントタイプが <code>image/gif</code>
のファイルへのリクエストは、指定したスクリプト
<code>/cgi-bin/images.cgi</code> で処理されます。</p>
<p>2 $BHVL\$NNc$G$O!"3HD%;R$,(B <code>.xyz</code>
$B$N%U%!%$%k$X$N%j%/%(%9%H$O!";XDj$7$?%9%/%j%W%H(B
<code>/cgi-bin/program.cgi</code> $B$G=hM}$5$l$^$9!#(B</p>
<p>2 番目の例では、拡張子が <code>.xyz</code>
のファイルへのリクエストは、指定したスクリプト
<code>/cgi-bin/program.cgi</code> で処理されます。</p>
<p>$B%*%W%7%g%s$N(B <code>virtual</code> $B=$>~;R$r;HMQ$9$k$H!"(B
$B%j%/%(%9%H$5$l$?%U%!%$%k$,<B:]$KB8:_$9$k$+$I$&$+$r8!::$7$J$$$h$&$K$G$-$^$9!#(B
$B$3$l$ONc$($P!"(B<directive>Action</directive> $B%G%#%l%/%F%#%V$r%P!<%A%c%k$J(B
Location $B$K;HMQ$7$?$$!"$H$$$C$?>l9g$KJXMx$G$9!#(B</p>
<p>オプションの <code>virtual</code> 修飾子を使用すると、
リクエストされたファイルが実際に存在するかどうかを検査しないようにできます。
これは例えば、<directive>Action</directive> ディレクティブをバーチャルな
Location に使用したい、といった場合に便利です。</p>
<example><title>$BNc(B</title>
<example><title></title>
&lt;Location /news&gt;<br />
<indent>
SetHandler news-handler<br />
@@ -111,41 +111,41 @@ Apache 2.1 $B$GF3F~$5$l$^$7$?(B</compatibility>
<directivesynopsis>
<name>Script</name>
<description>$BFCDj$N%j%/%(%9%H%a%=%C%I$KBP$7$F(B CGI $B%9%/%j%W%H$r(B
$B<B9T$9$k$h$&$K@_Dj(B</description>
<description>特定のリクエストメソッドに対して CGI スクリプトを
実行するように設定</description>
<syntax>Script <var>method</var> <var>cgi-script</var></syntax>
<contextlist>
<context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O(B <var>method</var>
$B$H$$$&%a%=%C%I$r;H$C$F%j%/%(%9%H$,9T$J$o$l$?$H$-$K(B
<var>cgi-script</var> $B$r<B9T$9$k$H$$$&F0:n$rDI2C$7$^$9!#(B
<var>cgi-script</var> $B$O(B
<directive module="mod_alias">ScriptAlias</directive> $B$d(B
<directive module="mod_mime">AddHandler</directive> $B$K$h$C$F(B
CGI $B%9%/%j%W%H$K@_Dj$5$l$?%j%=!<%9$X$N(B URL-path $B$G$9!#(B
$B%j%/%(%9%H$5$l$?%I%-%e%a%s%H$N(B URL $B$H%U%!%$%k$N%Q%9$OI8=`(B CGI
$B4D6-JQ?t(B <code>PATH_INFO</code> $B$H(B <code>PATH_TRANSLATED</code>
$B$r;H$C$FEA$($i$l$^$9!#(B</p>
<p>このディレクティブは <var>method</var>
というメソッドを使ってリクエストが行なわれたときに
<var>cgi-script</var> を実行するという動作を追加します。
<var>cgi-script</var>
<directive module="mod_alias">ScriptAlias</directive>
<directive module="mod_mime">AddHandler</directive> によって
CGI スクリプトに設定されたリソースへの URL-path です。
リクエストされたドキュメントの URL とファイルのパスは標準 CGI
環境変数 <code>PATH_INFO</code> <code>PATH_TRANSLATED</code>
を使って伝えられます。</p>
<note>
$BG$0U$N%a%=%C%IL>$r;HMQ$9$k$3$H$,$G$-$^$9!#(B
<strong>$B%a%=%C%IL>$OBgJ8;z>.J8;z$r6hJL$7$^$9(B</strong>$B!#$G$9$+$i!"(B
<code>Script PUT</code> $B$H(B <code>Script put</code>
$B$O$^$C$?$/0c$C$?8z2L$K$J$j$^$9!#(B
任意のメソッド名を使用することができます。
<strong>メソッド名は大文字小文字を区別します</strong>。ですから、
<code>Script PUT</code> <code>Script put</code>
はまったく違った効果になります。
</note>
<p><directive>Script</directive> $B%3%^%s%I$O%G%U%)%k%H$NF0:n$r(B
$BDI2C$9$k$@$1$G$"$k$3$H$K(B
$BCm0U$7$F$/$@$5$$!#$b$7(B CGI $B%9%/%j%W%H$,8F$P$l$?$j!"%j%/%(%9%H$5$l$?(B
$B%a%=%C%I$rFbIt$G07$&$3$H$N$G$-$kB>$N%j%=!<%9$,$"$l$P!"$=$l$,9T$J$o$l$^$9!#(B
<code>GET</code> $B%a%=%C%I$N(B <directive>Script</directive> $B$OLd9g$;(B
$B0z?t$,$"$k>l9g$K$N$_(B
(<em>$B$?$H$($P(B</em>$B!"(Bfoo.html?hi) $B8F$P$l$k$H$$$&$3$H$K$bCm0U$7$F$/$@$5$$!#(B
$B$=$&$G$J$$>l9g$O!"%j%/%(%9%H$ODL>oDL$j=hM}$5$l$^$9!#(B</p>
<p><directive>Script</directive> コマンドはデフォルトの動作を
追加するだけであることに
注意してください。もし CGI スクリプトが呼ばれたり、リクエストされた
メソッドを内部で扱うことのできる他のリソースがあれば、それが行なわれます。
<code>GET</code> メソッドの <directive>Script</directive> は問合せ
引数がある場合にのみ
(<em>たとえば</em>、foo.html?hi) 呼ばれるということにも注意してください。
そうでない場合は、リクエストは通常通り処理されます。</p>
<example><title>$BNc(B</title>
<example><title></title>
# For &lt;ISINDEX&gt;-style searching<br />
Script GET /cgi-bin/search<br />
<br />

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:554716 (outdated) -->
@@ -23,75 +23,75 @@
<modulesynopsis metafile="mod_alias.xml.meta">
<name>mod_alias</name>
<description>$B%[%9%H%U%!%$%k%7%9%F%`>e$N$$$m$$$m$J0c$&>l=j$r(B
$B%I%-%e%a%s%H%D%j!<$K%^%C%W$9$k5!G=$H!"(B
URL $B$N%j%@%$%l%/%H$r9T$J$&5!G=$rDs6!$9$k(B</description>
<description>ホストファイルシステム上のいろいろな違う場所を
ドキュメントツリーにマップする機能と、
URL のリダイレクトを行なう機能を提供する</description>
<status>Base</status>
<sourcefile>mod_alias.c</sourcefile>
<identifier>alias_module</identifier>
<summary>
<p>$B$3$N%b%8%e!<%k$N%G%#%l%/%F%#%V$O%5!<%P$K%j%/%(%9%H$,E~Ce$7$?$H$-$K(B
URL $B$NA`:n$d@)8f$r$9$k$3$H$r2DG=$K$7$^$9!#(B<directive
<p>このモジュールのディレクティブはサーバにリクエストが到着したときに
URL の操作や制御をすることを可能にします。<directive
module="mod_alias">Alias</directive>
$B%G%#%l%/%F%#%V$H(B <directive module="mod_alias">ScriptAlias</directive>
$B%G%#%l%/%F%#%V$O(B
URL $B$H%U%!%$%k%7%9%F%`$N%Q%9$r%^%C%W$9$k$?$a$K;HMQ$5$l$^$9!#$3$l$O(B
ディレクティブと <directive module="mod_alias">ScriptAlias</directive>
ディレクティブは
URL とファイルシステムのパスをマップするために使用されます。これは
<directive module="core">DocumentRoot</directive>
$B$N2<$K$J$$%I%-%e%a%s%H$r%&%'%V$N%I%-%e%a%s%H%D%j!<$N0lIt$H$7$F(B
$BAw$i$l$k$h$&$K$7$^$9!#(B<directive module="mod_alias">ScriptAlias</directive>
$B%G%#%l%/%F%#%V$K$O%^%C%W@h$N%G%#%l%/%H%j$,(B CGI
$B%9%/%j%W%H$N$_$G$"$k$3$H$r<($9$H$$$&DI2C$N8z2L$,$"$j$^$9!#(B
の下にないドキュメントをウェブのドキュメントツリーの一部として
送られるようにします。<directive module="mod_alias">ScriptAlias</directive>
ディレクティブにはマップ先のディレクトリが CGI
スクリプトのみであることを示すという追加の効果があります。
</p>
<p><directive module="mod_alias">Redirect</directive> $B%G%#%l%/%F%#%V$O(B
$B%/%i%$%"%s%H$K0c$C$?(B
URL $B$K?7$7$$%j%/%(%9%H$rAw$k$h$&$K;X<($7$^$9!#$3$l$O!"(B
$B%j%=!<%9$,?7$7$$>l=j$K0\F0$7$?$H$-$K$h$/;HMQ$5$l$^$9!#(B</p>
<p><directive module="mod_alias">Redirect</directive> ディレクティブは
クライアントに違った
URL に新しいリクエストを送るように指示します。これは、
リソースが新しい場所に移動したときによく使用されます。</p>
<p><module>mod_alias</module> $B$O4JC1$J(B URL $BA`:n8~$1$K@_7W$5$l$F$$$^$9!#(B
$B$h$jJ#;($JA`:n!"%/%(%j!<%9%H%j%s%0$NA`:n$K$O!"(B<module>mod_rewrite</module>
$B$GDs6!$5$l$k%D!<%k$r;HMQ$7$F$/$@$5$$!#(B</p>
<p><module>mod_alias</module> は簡単な URL 操作向けに設計されています。
より複雑な操作、クエリーストリングの操作には、<module>mod_rewrite</module>
で提供されるツールを使用してください。</p>
</summary>
<seealso><module>mod_rewrite</module></seealso> <seealso><a
href="../urlmapping.html">URL $B$+$i%U%!%$%k%7%9%F%`>e$N0LCV$X$N%^%C%T%s%0(B</a></seealso>
href="../urlmapping.html">URL からファイルシステム上の位置へのマッピング</a></seealso>
<section id="order"><title>$B=hM}$N=gHV(B</title>
<section id="order"><title>処理の順番</title>
<p>$BMM!9$J%3%s%F%-%9%HCf$G$N(B Alias $B$d(B Redirect $B$OB>$N%G%#%l%/%F%#%V$H(B
$BF1$8$h$&$KI8=`$N(B <a href="../sections.html#mergin">$B%^!<%85,B'(B</a> $B$K(B
$B=>$C$F=hM}$5$l$^$9!#$?$@$7!"(B($BNc$($P(B <directive type="section" module="core"
>VirtualHost</directive> $B%;%/%7%g%s$NCf$N$h$&$K(B) $BJ#?t$N(B Alias $B$d(B Redirect $B$,(B
$BF1$8%3%s%F%-%9%HCf$K8=$l$?>l9g$O7h$^$C$?=gHV$G=hM}$5$l$^$9!#(B</p>
<p>様々なコンテキスト中での Alias や Redirect は他のディレクティブと
同じように標準の <a href="../sections.html#mergin">マージ規則</a> に
従って処理されます。ただし、(例えば <directive type="section" module="core"
>VirtualHost</directive> セクションの中のように) 複数の Alias や Redirect
同じコンテキスト中に現れた場合は決まった順番で処理されます。</p>
<p>$B$^$:!"(BAlias $B$NA0$K$9$Y$F$N(B Redirect $B$,=hM}$5$l$^$9!#$G$9$+$i!"(B<directive
module="mod_alias">Redirect</directive> $B$+(B <directive
module="mod_alias">RedirectMatch</directive> $B$K%^%C%A$9$k%j%/%(%9%H$K$O(B
Alias $B$O7h$7$FE,MQ$5$l$^$;$s!#<!$K!"(BAlias $B$H(B Redirect $B$,@_Dj%U%!%$%kCf$N(B
$B=gHV$KE,MQ$5$l!":G=i$K%^%C%A$7$?$b$N$,M%@h$5$l$^$9!#(B</p>
<p>まず、Alias の前にすべての Redirect が処理されます。ですから、<directive
module="mod_alias">Redirect</directive> <directive
module="mod_alias">RedirectMatch</directive> にマッチするリクエストには
Alias は決して適用されません。次に、Alias と Redirect が設定ファイル中の
順番に適用され、最初にマッチしたものが優先されます。</p>
<p>$B$G$9$+$i!"Fs$D0J>e$N%G%#%l%/%F%#%V$,F1$8%Q%9$KE,MQ$5$l$k$H$-$O!"(B
$B$9$Y$F$N%G%#%l%/%F%#%V$N8z2L$rF@$k$?$a$K$O$h$j>\$7$$%Q%9$r@h$K=q$/(B
$BI,MW$,$"$j$^$9!#Nc$($P!"<!$N@_Dj$O4|BTDL$j$NF0:n$r$7$^$9(B:</p>
<p>ですから、二つ以上のディレクティブが同じパスに適用されるときは、
すべてのディレクティブの効果を得るためにはより詳しいパスを先に書く
必要があります。例えば、次の設定は期待通りの動作をします:</p>
<example>
Alias /foo/bar /baz<br />
Alias /foo /gaq
</example>
<p>$B$7$+$7!">e5-$NFs$D$N%G%#%l%/%F%#%V$N=gHV$,5U$K$J$k$H!"(B
<code>/foo</code> <directive module="mod_alias">Alias</directive> $B$,(B
$B>o$K(B <code>/foo/bar</code> <directive
module="mod_alias">Alias</directive> $B$h$j@h$K%^%C%A$7$^$9$N$G!"8e<T$O(B
$B7h$7$FE,MQ$5$l$k$3$H$O$"$j$^$;$s!#(B</p>
<p>しかし、上記の二つのディレクティブの順番が逆になると、
<code>/foo</code> <directive module="mod_alias">Alias</directive>
常に <code>/foo/bar</code> <directive
module="mod_alias">Alias</directive> より先にマッチしますので、後者は
決して適用されることはありません。</p>
</section>
<directivesynopsis>
<name>Alias</name>
<description>URL $B$r%U%!%$%k%7%9%F%`$N0LCV$K%^%C%W$9$k(B</description>
<description>URL をファイルシステムの位置にマップする</description>
<syntax>Alias <var>URL-path</var>
<var>file-path</var>|<var>directory-path</var></syntax>
<contextlist><context>server config</context>
@@ -99,47 +99,47 @@ module="mod_alias">Alias</directive> $B$h$j@h$K%^%C%A$7$^$9$N$G!"8e<T$O(B
</contextlist>
<usage>
<p><directive>Alias</directive> $B%G%#%l%/%F%#%V$O%I%-%e%a%s%H$r(B
$B%m!<%+%k%U%!%$%k%7%9%F%`$N(B
<p><directive>Alias</directive> ディレクティブはドキュメントを
ローカルファイルシステムの
<directive module="core">DocumentRoot</directive>
$B0J30$N>l=j$KJ]4I$9$k$3$H$r2DG=$K$7$^$9!#(B
URL $B$N(B (% $B$,I|9f$5$l$?(B) $B%Q%9$,(B <var>url-path</var> $B$G;O$^$k$b$N$O(B
以外の場所に保管することを可能にします。
URL の (% が復号された) パスが <var>url-path</var> で始まるものは
<var>directory-filename</var>
$B$G;O$^$k%m!<%+%k%U%!%$%k$K%^%C%W$5$l$^$9!#(B</p>
で始まるローカルファイルにマップされます。</p>
<example><title>$BNc(B</title>
<example><title></title>
Alias /image /ftp/pub/image
</example>
<p>http://myserver/image/foo.gif $B$X$N%j%/%(%9%H$KBP$7$F!"%5!<%P$O(B
$B%U%!%$%k(B /ftp/pub/image/foo.gif $B$rJV$7$^$9!#(B</p>
<p>http://myserver/image/foo.gif へのリクエストに対して、サーバは
ファイル /ftp/pub/image/foo.gif を返します。</p>
<p>$B$b$7(B <var>url-path</var> $B$N:G8e$K(B /
$B$r=q$$$?$J$i!"%5!<%P$,%(%$%j%"%9$rE83+$9$k$?$a$K$O!":G8e$N(B /
$B$,I,MW$K$J$k$3$H$KCm0U$7$F$/$@$5$$!#$9$J$o$A!"(B<code>Alias /icons/
/usr/local/apache/icons/</code> $B$H$$$&$b$N$r;HMQ$7$F$$$k>l9g$O!"(B
<code>/icons</code> $B$H$$$&(B url $B$O%(%$%j%"%9$5$l$^$;$s!#(B</p>
<p>もし <var>url-path</var> の最後に /
を書いたなら、サーバがエイリアスを展開するためには、最後の /
が必要になることに注意してください。すなわち、<code>Alias /icons/
/usr/local/apache/icons/</code> というものを使用している場合は、
<code>/icons</code> という url はエイリアスされません。</p>
<p>$B%(%$%j%"%9$N(B<em>$B9T$-@h(B</em>$B$r4^$s$G$$$k(B <directive
<p>エイリアスの<em>行き先</em>を含んでいる <directive
type="section" module="core">Directory</directive>
$B%;%/%7%g%s$rDI2C$9$kI,MW$,$"$k$+$b$7$l$J$$$3$H$KCm0U$7$F$/$@$5$$!#(B
$B%(%$%j%"%9$NE83+$O(B <directive
セクションを追加する必要があるかもしれないことに注意してください。
エイリアスの展開は <directive
type="section" module="core">Directory</directive>
$B%;%/%7%g%s$rD4$Y$kA0$K9T$J$o$l$^$9$N$G!"(B
$B%(%$%j%"%9$N9T$-@h$N(B <directive
type="section" module="core">Directory</directive> $B%;%/%7%g%s$N$_(B
$B8z2L$,$"$j$^$9!#(B
($B$7$+$7!"(B<directive
セクションを調べる前に行なわれますので、
エイリアスの行き先の <directive
type="section" module="core">Directory</directive> セクションのみ
効果があります。
(しかし、<directive
type="section" module="core">Location</directive>
$B%;%/%7%g%s$O%(%$%j%"%9$,=hM}$5$l$kA0$K<B9T$5$l$^$9$N$G!"(B
$B$3$A$i$OE,MQ$5$l$^$9!#(B)</p>
セクションはエイリアスが処理される前に実行されますので、
こちらは適用されます。)</p>
<p>$BFC$K!"(B<code>Alias</code> $B$r(B
<p>特に、<code>Alias</code>
<directive module="core">DocumentRoot</directive>
$B%G%#%l%/%H%j$N30B&$KG[CV$7$?>l9g$O!"9T$-@h$N%G%#%l%/%H%j$KBP$9$k(B
$B%"%/%;%98"8B$rL@<(E*$K@)8B$7$J$1$l$P$J$i$J$$$G$7$g$&!#(B</p>
ディレクトリの外側に配置した場合は、行き先のディレクトリに対する
アクセス権限を明示的に制限しなければならないでしょう。</p>
<example><title>$BNc(B</title>
<example><title></title>
Alias /image /ftp/pub/image<br />
&lt;Directory /ftp/pub/image&gt;<br />
<indent>
@@ -154,7 +154,7 @@ module="mod_alias">Alias</directive> $B$h$j@h$K%^%C%A$7$^$9$N$G!"8e<T$O(B
<directivesynopsis>
<name>AliasMatch</name>
<description>$B@55,I=8=$r;H$C$F(B URL $B$r%U%!%$%k%7%9%F%`$N0LCV$K%^%C%W$9$k(B</description>
<description>正規表現を使って URL をファイルシステムの位置にマップする</description>
<syntax>AliasMatch <var>regex</var>
<var>file-path</var>|<var>directory-path</var></syntax>
<contextlist><context>server config</context>
@@ -162,13 +162,13 @@ module="mod_alias">Alias</directive> $B$h$j@h$K%^%C%A$7$^$9$N$G!"8e<T$O(B
</contextlist>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O(B <directive module="mod_alias">Alias</directive>
$B$H$[$H$s$IF1$8$G$9$,!"4JC1$J@hF,$+$i$N%^%C%A$r9T$J$&$N$G$O$J$/!"(B
$BI8=`@55,I=8=$rMxMQ$7$^$9!#$3$3$G;XDj$5$l$?@55,I=8=$H(B URL $B$N%Q%9(B
$B$,9g$&$+$I$&$+$rD4$Y!"9g$&>l9g$O3g8L$G3g$i$l$?%^%C%A$r(B
$BM?$($i$l$?J8;zNs$GCV$-49$(!"$=$l$r%U%!%$%kL>$H$7$F;HMQ$7$^$9!#$?$H$($P!"(B
<code>/icons</code> $B%G%#%l%/%H%j$r;H$&(B
$B$?$a$K$O0J2<$N$h$&$J$b$N$,;HMQ$G$-$^$9(B:</p>
<p>このディレクティブは <directive module="mod_alias">Alias</directive>
とほとんど同じですが、簡単な先頭からのマッチを行なうのではなく、
標準正規表現を利用します。ここで指定された正規表現と URL のパス
が合うかどうかを調べ、合う場合は括弧で括られたマッチを
与えられた文字列で置き換え、それをファイル名として使用します。たとえば、
<code>/icons</code> ディレクトリを使う
ためには以下のようなものが使用できます:</p>
<example>
AliasMatch ^/icons(.*) /usr/local/apache/icons$1
@@ -178,8 +178,8 @@ module="mod_alias">Alias</directive> $B$h$j@h$K%^%C%A$7$^$9$N$G!"8e<T$O(B
<directivesynopsis>
<name>Redirect</name>
<description>$B%/%i%$%"%s%H$,0c$&(B URL $B$r<hF@$9$k$h$&$K30It$X$N%j%@%$%l%/%H$r(B
$BAw$k(B</description>
<description>クライアントが違う URL を取得するように外部へのリダイレクトを
送る</description>
<syntax>Redirect [<var>status</var>] <var>URL-path</var>
<var>URL</var></syntax>
<contextlist><context>server config</context>
@@ -188,67 +188,67 @@ module="mod_alias">Alias</directive> $B$h$j@h$K%^%C%A$7$^$9$N$G!"8e<T$O(B
<override>FileInfo</override>
<usage>
<p>Redirect $B%G%#%l%/%F%#%V$O8E$$(B URL $B$r?7$7$$$b$N$X%^%C%W$7$^$9!#(B
$B?7$7$$(B URL $B$,%/%i%$%"%s%H$KJV$5$l$^$9!#$=$7$F!"(B
$B%/%i%$%"%s%H$O?7$7$$%"%I%l%9$r$b$&0l2s<hF@$7$h$&$H$7$^$9!#(B
<var>URL-path</var> (% $B$,I|9f$5$l$?(B) $B%Q%9$G;O$^$k%I%-%e%a%s%H$X$N(B
$B$9$Y$F$N%j%/%(%9%H$O(B <var>URL</var> $B$G;O$^$k?7$7$$(B
(% $B$,Id9f2=$5$l$?(B) URL $B$X$N%j%@%$%l%/%H%(%i!<$,JV$5$l$^$9!#(B</p>
<p>Redirect ディレクティブは古い URL を新しいものへマップします。
新しい URL がクライアントに返されます。そして、
クライアントは新しいアドレスをもう一回取得しようとします。
<var>URL-path</var> (% が復号された) パスで始まるドキュメントへの
すべてのリクエストは <var>URL</var> で始まる新しい
(% が符号化された) URL へのリダイレクトエラーが返されます。</p>
<example><title>$BNc(B</title>
<example><title></title>
Redirect /service http://foo2.bar.com/service
</example>
<p>$B%/%i%$%"%s%H$O(B http://myserver/service/foo.txt
$B$X$N%j%/%(%9%H$r9T$J$&$H!"Be$o$j$K(B http://foo2.bar.com/service/foo.txt
$B$r%"%/%;%9$9$k$h$&$K9p$2$i$l$^$9!#(B</p>
<p>クライアントは http://myserver/service/foo.txt
へのリクエストを行なうと、代わりに http://foo2.bar.com/service/foo.txt
をアクセスするように告げられます。</p>
<note><title>$BCm0U(B</title><p>$B@_Dj%U%!%$%kCf$N=gHV$K4X$o$i$:!"(B
Redirect $B7O$N%G%#%l%/%F%#%V$O(B Alias
$B%G%#%l%/%F%#%V$H(B ScriptAlias $B%G%#%l%/%F%#%V$h$j$bM%@h$5$l$^$9!#(B
$B$^$?!"(B.htaccess $B%U%!%$%k$d(B <directive
<note><title>注意</title><p>設定ファイル中の順番に関わらず、
Redirect 系のディレクティブは Alias
ディレクティブと ScriptAlias ディレクティブよりも優先されます。
また、.htaccess ファイルや <directive
type="section" module="core">Directory</directive>
$B%;%/%7%g%s$NCf$G;H$o$l$F$$$?$H$7$F$b!"(B<var>URL-path</var>
$B$OAjBP%Q%9$G$O$J$/!"40A4$J(B URL $B$G$J$1$l$P$J$j$^$;$s!#(B</p></note>
セクションの中で使われていたとしても、<var>URL-path</var>
は相対パスではなく、完全な URL でなければなりません。</p></note>
<p>$B$b$7(B <var>status</var> $B0z?t$,M?$($i$l$F$$$J$1$l$P!"%j%@%$%l%/%H$O(B
"temporary" (HTTP $B%9%F!<%?%9(B 302) $B$K$J$j$^$9!#$3$l$O%/%i%$%"%s%H$K(B
$B%j%=!<%9$,0l;~E*$K0\F0$7$?$H$$$&$3$H$r<($7$^$9!#(B<var>Status</var>
$B0z?t$O(B $BB>$N(B HTTP $B$N%9%F!<%?%9%3!<%I$rJV$9$?$a$K;HMQ$9$k$3$H$,$G$-$^$9(B:</p>
<p>もし <var>status</var> 引数が与えられていなければ、リダイレクトは
"temporary" (HTTP ステータス 302) になります。これはクライアントに
リソースが一時的に移動したということを示します。<var>Status</var>
引数は 他の HTTP のステータスコードを返すために使用することができます:</p>
<dl>
<dt>permanent</dt>
<dd>$B1J5W$K%j%@%$%l%/%H$r$9$k%9%F!<%?%9(B (301) $B$rJV$7$^$9!#(B
$B$3$l$O%j%=!<%9$,1J5W$K0\F0$7$?$H$$$&$3$H$r0UL#$7$^$9!#(B</dd>
<dd>永久にリダイレクトをするステータス (301) を返します。
これはリソースが永久に移動したということを意味します。</dd>
<dt>temp</dt>
<dd>$B0l;~E*$J%j%@%$%l%/%H%9%F!<%?%9(B (302)
$B$rJV$7$^$9!#$3$l$,%G%U%)%k%H$G$9!#(B</dd>
<dd>一時的なリダイレクトステータス (302)
を返します。これがデフォルトです。</dd>
<dt>seeother</dt>
<dd>"See Other" $B%9%F!<%?%9(B (303) $B$rJV$7$^$9!#(B
$B$3$l$O%j%=!<%9$,B>$N$b$N$GCV$-49$($i$l$?$3$H$r0UL#$7$^$9!#(B</dd>
<dd>"See Other" ステータス (303) を返します。
これはリソースが他のもので置き換えられたことを意味します。</dd>
<dt>gone</dt>
<dd>"Gone" $B%9%F!<%?%9(B (410) $B$rJV$7$^$9!#$3$l$O%j%=!<%9$,1J5W$K(B
$B:o=|$5$l$?$3$H$r0UL#$7$^$9!#$3$N%9%F!<%?%9$,;HMQ$5$l$?>l9g!"(B
<var>url</var> $B0z?t$O>JN,$5$l$J$1$l$P$J$j$^$;$s!#(B</dd>
<dd>"Gone" ステータス (410) を返します。これはリソースが永久に
削除されたことを意味します。このステータスが使用された場合、
<var>url</var> 引数は省略されなければなりません。</dd>
</dl>
<p><var>Status</var> $B$NCM$K%9%F!<%?%9%3!<%I$r?tCM$GM?$($k$3$H$G(B
$BB>$N%9%F!<%?%9%3!<%I$bJV$9$3$H$,$G$-$^$9!#%9%F!<%?%9$,(B 300 $B$H(B 399
$B$N4V$K$"$k>l9g!"(B<var>url</var> $B0z?t$OB8:_$7$F$$$J$1$l$P$$$1$^$;$s!#(B
$B$=$NB>$N>l9g$O>JN,$5$l$F$$$J$1$l$P$J$j$^$;$s!#$?$@$7!"(B
$B%9%F!<%?%9$O(B Apache $B$N%3!<%I$,CN$C$F$$$k$b$N$G$"$kI,MW$,$"$j$^$9(B
(http_protocol.c $B$N4X?t(B <code>send_error_response</code>
$B$r8+$F$/$@$5$$(B)$B!#(B</p>
<p>$BNc(B:</p>
<p><var>Status</var> の値にステータスコードを数値で与えることで
他のステータスコードも返すことができます。ステータスが 300 と 399
の間にある場合、<var>url</var> 引数は存在していなければいけません。
その他の場合は省略されていなければなりません。ただし、
ステータスは Apache のコードが知っているものである必要があります
(http_protocol.c の関数 <code>send_error_response</code>
を見てください)。</p>
<p>:</p>
<example><title>$BNc(B</title>
<example><title></title>
Redirect permanent /one http://example.com/two<br />
Redirect 303 /three http://example.com/other
</example>
@@ -258,8 +258,8 @@ type="section" module="core">Directory</directive>
<directivesynopsis>
<name>RedirectMatch</name>
<description>$B8=:_$N(B URL $B$X$N@55,I=8=$N%^%C%A$K$h$j(B
$B30It$X$N%j%@%$%l%/%H$rAw$k(B</description>
<description>現在の URL への正規表現のマッチにより
外部へのリダイレクトを送る</description>
<syntax>RedirectMatch [<var>status</var>] <var>regex</var>
<var>URL</var></syntax>
<contextlist><context>server config</context>
@@ -268,13 +268,13 @@ type="section" module="core">Directory</directive>
<override>FileInfo</override>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O(B <directive module="mod_alias">Redirect</directive>
$B$H$[$H$s$IF1$8$G$9$,!"4JC1$J@hF,$+$i$N%^%C%A$r9T$J$&$N$G$O$J$/!"(B
$BI8=`@55,I=8=$rMxMQ$7$^$9!#$3$3$G;XDj$5$l$?@55,I=8=$H(B URL-path
$B$,9g$&$+$I$&$+$rD4$Y!"9g$&>l9g$O3g8L$G3g$i$l$?%^%C%A$r(B
$BM?$($i$l$?J8;zNs$GCV$-49$(!"$=$l$r%U%!%$%kL>$H$7$F;HMQ$7$^$9!#(B
$B$?$H$($P!"$9$Y$F$N(B GIF $B%U%!%$%k$rJL%5!<%P$NF1MM$JL>A0$N(B JPEG
$B%U%!%$%k$K%j%@%$%l%/%H$9$k$K$O!"0J2<$N$h$&$J$b$N$r;H$$$^$9(B:
<p>このディレクティブは <directive module="mod_alias">Redirect</directive>
とほとんど同じですが、簡単な先頭からのマッチを行なうのではなく、
標準正規表現を利用します。ここで指定された正規表現と URL-path
が合うかどうかを調べ、合う場合は括弧で括られたマッチを
与えられた文字列で置き換え、それをファイル名として使用します。
たとえば、すべての GIF ファイルを別サーバの同様な名前の JPEG
ファイルにリダイレクトするには、以下のようなものを使います:
</p>
<example>
@@ -285,8 +285,8 @@ type="section" module="core">Directory</directive>
<directivesynopsis>
<name>RedirectTemp</name>
<description>$B%/%i%$%"%s%H$,0c$&(B URL $B$r<hF@$9$k$h$&$K30It$X$N0l;~E*$J(B
$B%j%@%$%l%/%H$rAw$k(B</description>
<description>クライアントが違う URL を取得するように外部への一時的な
リダイレクトを送る</description>
<syntax>RedirectTemp <var>URL-path</var> <var>URL</var></syntax>
<contextlist><context>server config</context>
<context>virtual host</context>
@@ -294,16 +294,16 @@ type="section" module="core">Directory</directive>
<override>FileInfo</override>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O%/%i%$%"%s%H$K(B Redirect
$B$,0l;~E*$J$b$N$G$"$k(B ($B%9%F!<%?%9(B 302) $B$3$H$rCN$i$;$^$9!#(B
<code>Redirect temp</code> $B$H$^$C$?$/F1$8$G$9!#(B</p>
<p>このディレクティブはクライアントに Redirect
が一時的なものである (ステータス 302) ことを知らせます。
<code>Redirect temp</code> とまったく同じです。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>RedirectPermanent</name>
<description>$B%/%i%$%"%s%H$,0c$&(B URL $B$r<hF@$9$k$h$&$K30It$X$N1J5WE*$J(B
$B%j%@%$%l%/%H$rAw$k(B</description>
<description>クライアントが違う URL を取得するように外部への永久的な
リダイレクトを送る</description>
<syntax>RedirectPermanent <var>URL-path</var> <var>URL</var></syntax>
<contextlist><context>server config</context>
<context>virtual host</context>
@@ -311,16 +311,16 @@ type="section" module="core">Directory</directive>
<override>FileInfo</override>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O%/%i%$%"%s%H$K(B Redirect $B$,1J5WE*$J$b$N(B
($B%9%F!<%?%9(B 301) $B$G$"$k$3$H$rCN$i$;$^$9!#(B
<code>Redirect permanent</code> $B$H$^$C$?$/F1$8$G$9!#(B</p>
<p>このディレクティブはクライアントに Redirect が永久的なもの
(ステータス 301) であることを知らせます。
<code>Redirect permanent</code> とまったく同じです。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>ScriptAlias</name>
<description>URL $B$r%U%!%$%k%7%9%F%`$N0LCV$X%^%C%W$7!"%^%C%W@h$r(B
CGI $B%9%/%j%W%H$K;XDj(B</description>
<description>URL をファイルシステムの位置へマップし、マップ先を
CGI スクリプトに指定</description>
<syntax>ScriptAlias <var>URL-path</var>
<var>file-path</var>|<var>directory-path</var></syntax>
<contextlist><context>server config</context>
@@ -328,30 +328,30 @@ CGI $B%9%/%j%W%H$K;XDj(B</description>
</contextlist>
<usage>
<p><directive>ScriptAlias</directive> $B%G%#%l%/%F%#%V$O!"BP>]%G%#%l%/%H%j$K(B
<module>mod_cgi</module> $B$N(B cgi-script
$B%O%s%I%i$G=hM}$5$l$k(B CGI
$B%9%/%j%W%H$,$"$k$3$H$r<($90J30$O(B
<p><directive>ScriptAlias</directive> ディレクティブは、対象ディレクトリに
<module>mod_cgi</module> cgi-script
ハンドラで処理される CGI
スクリプトがあることを示す以外は
<directive module="mod_alias">Alias</directive>
$B%G%#%l%/%F%#%V$HF1$8?6$kIq$$$r$7$^$9!#(B
URL $B$N(B (% $B$,I|9f$5$l$?(B) $B%Q%9$,(B <var>URL-path</var> $B$G;O$^$k$b$N$O(B
$B%m!<%+%k$N%U%!%$%k%7%9%F%`$N(B
$B%U%k%Q%9$G$"$kFsHVL\$N0z?t$K%^%C%W$5$l$^$9!#(B</p>
ディレクティブと同じ振る舞いをします。
URL の (% が復号された) パスが <var>URL-path</var> で始まるものは
ローカルのファイルシステムの
フルパスである二番目の引数にマップされます。</p>
<example><title>$BNc(B</title>
<example><title></title>
ScriptAlias /cgi-bin/ /web/cgi-bin/
</example>
<p><code>http://myserver/cgi-bin/foo</code>
$B$X$N%j%/%(%9%H$KBP$7$F%5!<%P$O%9%/%j%W%H(B
<code>/web/cgi-bin/foo</code> $B$r<B9T$7$^$9!#(B</p>
へのリクエストに対してサーバはスクリプト
<code>/web/cgi-bin/foo</code> を実行します。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>ScriptAliasMatch</name>
<description>URL $B$r@55,I=8=$r;H$C$F%U%!%$%k%7%9%F%`$N0LCV$X%^%C%W$7!"%^%C%W@h$r(B
CGI $B%9%/%j%W%H$K;XDj(B</description>
<description>URL を正規表現を使ってファイルシステムの位置へマップし、マップ先を
CGI スクリプトに指定</description>
<syntax>ScriptAliasMatch <var>regex</var>
<var>file-path</var>|<var>directory-path</var></syntax>
<contextlist><context>server config</context>
@@ -359,13 +359,13 @@ CGI $B%9%/%j%W%H$K;XDj(B</description>
</contextlist>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O(B <directive module="mod_alias">ScriptAlias</directive>
$B$H$[$H$s$IF1$8$G$9$,!"4JC1$J@hF,$+$i$N%^%C%A$r9T$J$&$N$G$O$J$/!"(B
$BI8=`@55,I=8=$rMxMQ$7$^$9!#$3$3$G;XDj$5$l$?@55,I=8=$H(B URL-path
$B$,9g$&$+$I$&$+$rD4$Y!"9g$&>l9g$O3g8L$G3g$i$l$?%^%C%A$r(B
$BM?$($i$l$?J8;zNs$GCV$-49$(!"$=$l$r%U%!%$%kL>$H$7$F;HMQ$7$^$9!#(B
$B$?$H$($P!"I8=`$N(B <code>/cgi-bin</code>
$B$r;HMQ$9$k$h$&$K$9$k$?$a$K$O!"0J2<$N$h$&$J$b$N$r;H$$$^$9(B:
<p>このディレクティブは <directive module="mod_alias">ScriptAlias</directive>
とほとんど同じですが、簡単な先頭からのマッチを行なうのではなく、
標準正規表現を利用します。ここで指定された正規表現と URL-path
が合うかどうかを調べ、合う場合は括弧で括られたマッチを
与えられた文字列で置き換え、それをファイル名として使用します。
たとえば、標準の <code>/cgi-bin</code>
を使用するようにするためには、以下のようなものを使います:
</p>
<example>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -23,43 +23,43 @@
<modulesynopsis metafile="mod_asis.xml.meta">
<name>mod_asis</name>
<description>$B<+J,MQ$N(B HTTP $B%X%C%@$N=q$+$l$F$$$k%U%!%$%k$rAw?.$9$k(B</description>
<description>自分用の HTTP ヘッダの書かれているファイルを送信する</description>
<status>Base</status>
<sourcefile>mod_asis.c</sourcefile>
<identifier>asis_module</identifier>
<summary>
<p>$B$3$N%b%8%e!<%k$O%O%s%I%i(B <code>send-as-is</code>
$B$rDs6!$7$^$9!#$3$N%O%s%I%i$ODL>o$N(B HTTP
$B%X%C%@$r$[$H$s$IDI2C$9$k$3$H$J$/%I%-%e%a%s%H$rAw?.$7$^$9!#(B</p>
<p>このモジュールはハンドラ <code>send-as-is</code>
を提供します。このハンドラは通常の HTTP
ヘッダをほとんど追加することなくドキュメントを送信します。</p>
<p>$B$3$l$O%5!<%P$+$i$I$s$J<oN`$N%G!<%?$rAw$k$H$-$K$b;HMQ$G$-$^$9!#(B
Cgi $B%9%/%j%W%H$d(B nph $B%9%/%j%W%H$,L5$/$F$b%j%@%$%l%/%H$dB>$NFCJL$J(B
HTTP $B1~Ez$rAw$k$3$H$,$G$-$^$9!#(B</p>
<p>これはサーバからどんな種類のデータを送るときにも使用できます。
Cgi スクリプトや nph スクリプトが無くてもリダイレクトや他の特別な
HTTP 応答を送ることができます。</p>
<p>$BNr;KE*$JM}M3$K$h$j!"$3$N%b%8%e!<%k$O(B mime $B%?%$%W(B
<code>httpd/send-as-is</code> $B$N%U%!%$%k$b=hM}$7$^$9!#(B</p>
<p>歴史的な理由により、このモジュールは mime タイプ
<code>httpd/send-as-is</code> のファイルも処理します。</p>
</summary>
<seealso><module>mod_headers</module></seealso>
<seealso><module>mod_cern_meta</module></seealso>
<seealso><a href="../handler.html">Apache $B$N%O%s%I%i$N;HMQ(B</a></seealso>
<seealso><a href="../handler.html">Apache のハンドラの使用</a></seealso>
<section id="usage"><title>$B;HMQK!(B</title>
<section id="usage"><title>使用法</title>
<p>$B%5!<%P@_Dj%U%!%$%k$G!"%U%!%$%k$H(B <code>send-as-is</code>
$B%O%s%I%i$rNc$($P0J2<$N$h$&$K4XO"IU$1$F$/$@$5$$!#(B</p>
<p>サーバ設定ファイルで、ファイルと <code>send-as-is</code>
ハンドラを例えば以下のように関連付けてください。</p>
<example>AddHandler send-as-is asis</example>
<p>$B3HD%;R$,(B <code>.asis</code> $B$N$9$Y$F$N%U%!%$%k$NFbMF$O(B Apache
$B$+$i%/%i%$%"%s%H$X$[$H$s$IJQ99L5$/Aw$i$l$^$9!#%/%i%$%"%s%H$K$O(B
HTTP $B%X%C%@$,I,MW$G$9$N$G!"%U%!%$%k$K=q$/$3$H$rK:$l$J$$$G$/$@$5$$!#(B
Status: $B%X%C%@$bI,MW$G$9!#%G!<%?$O(B 3 $B7e$N(B HTTP
$B1~Ez%3!<%I$H!"$=$N8e$K%F%-%9%H%a%C%;!<%8$,B3$$$?$b$N$G$J$1$l$P$J$j$^$;$s!#(B</p>
<p>拡張子が <code>.asis</code> のすべてのファイルの内容は Apache
からクライアントへほとんど変更無く送られます。クライアントには
HTTP ヘッダが必要ですので、ファイルに書くことを忘れないでください。
Status: ヘッダも必要です。データは 3 桁の HTTP
応答コードと、その後にテキストメッセージが続いたものでなければなりません。</p>
<p>$B$3$l$O%/%i%$%"%s%H$K%U%!%$%k$,0\F0$7$?$3$H$rCN$i$;$k$?$a$K(B
<em>as is</em> ($B$=$N$^$^(B) $B$GAw$i$l$k%U%!%$%k$NFbMF$NNc$G$9!#(B
<p>これはクライアントにファイルが移動したことを知らせるために
<em>as is</em> (そのまま) で送られるファイルの内容の例です。
</p>
@@ -81,12 +81,12 @@
&lt;/html&gt;
</example>
<note><title>$BCm0U(B</title>
<p>$BCm0U(B: $B%5!<%P$O%/%i%$%"%s%H$KJV$5$l$k%G!<%?$K>o$K(B <code>Date:</code>
$B$H(B <code>Server:</code> $B%X%C%@$rDI2C$7$^$9$N$G!"(B
$B$=$l$i$,%U%!%$%k$K=q$+$l$F$$$F$O$$$1$^$;$s!#(B
$B%5!<%P$O(B <code>Last-Modified</code> $B%X%C%@$rDI2C(B<em>$B$7$^$;$s(B</em>$B!#(B
$B$*$=$i$/$O$=$&$9$Y$-$G$7$g$&$1$l$I!#(B</p>
<note><title>注意</title>
<p>注意: サーバはクライアントに返されるデータに常に <code>Date:</code>
<code>Server:</code> ヘッダを追加しますので、
それらがファイルに書かれていてはいけません。
サーバは <code>Last-Modified</code> ヘッダを追加<em>しません</em>。
おそらくはそうすべきでしょうけれど。</p>
</note>
</section>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -23,24 +23,24 @@
<modulesynopsis metafile="mod_auth_basic.xml.meta">
<name>mod_auth_basic</name>
<description>$B4pK\G'>Z(B</description>
<description>基本認証</description>
<status>Base</status>
<sourcefile>mod_auth_basic.c</sourcefile>
<identifier>auth_basic_module</identifier>
<compatibility>Apache 2.1 $B0J9_(B</compatibility>
<compatibility>Apache 2.1 以降</compatibility>
<summary>
<p>$BM?$($i$l$?%W%m%P%$%@(B ($BLuCm(B: $BG'>Z$G$N>H2q$r9T$&Ld$$9g$o$;@h(B)
$B$G%f!<%6$r8!:w$7!"(BHTTP $B4pK\G'>Z$G%"%/%;%9@)8B$G$-$k$h$&$K$J$j$^$9!#(B
HTTP $B%@%$%8%'%9%HG'>Z$K$D$$$F$O(B <module>mod_auth_digest</module>
$B$GDs6!$5$l$^$9!#(B</p>
<p>与えられたプロバイダ (訳注: 認証での照会を行う問い合わせ先)
でユーザを検索し、HTTP 基本認証でアクセス制限できるようになります。
HTTP ダイジェスト認証については <module>mod_auth_digest</module>
で提供されます。</p>
</summary>
<seealso><directive module="core">AuthName</directive></seealso>
<seealso><directive module="core">AuthType</directive></seealso>
<directivesynopsis>
<name>AuthBasicProvider</name>
<description>$B$3$N0LCV$KBP$9$kG'>Z%W%m%P%$%@$r@_Dj$7$^$9!#(B</description>
<description>この位置に対する認証プロバイダを設定します。</description>
<syntax>AuthBasicProvider On|Off|<var>provider-name</var>
[<var>provider-name</var>] ...</syntax>
<default>AuthBasicProvider On</default>
@@ -48,13 +48,13 @@
<override>AuthConfig</override>
<usage>
<p><directive>AuthBasicProvider</directive> $B%G%#%l%/%F%#%V$G!"(B
$B$3$N0LCV$KBP$9$k%f!<%6G'>Z$KMQ$$$i$l$kG'>Z%W%m%P%$%@$r@_Dj$7$^$9!#(B
<code>On</code> $B$K@_Dj$9$k$H%G%U%)%k%H$NG'>Z%W%m%P%$%@(B
(<code>file</code>) $B$,;HMQ$5$l$^$9!#(B<code>file</code>
$B%W%m%P%$%@$O(B <module>mod_authn_file</module>
$B%b%8%e!<%k$G<BAu$5$l$F$$$^$9$N$G!"(B
$B$3$N%b%8%e!<%k$,%5!<%P$KF~$C$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#(B</p>
<p><directive>AuthBasicProvider</directive> ディレクティブで、
この位置に対するユーザ認証に用いられる認証プロバイダを設定します。
<code>On</code> に設定するとデフォルトの認証プロバイダ
(<code>file</code>) が使用されます。<code>file</code>
プロバイダは <module>mod_authn_file</module>
モジュールで実装されていますので、
このモジュールがサーバに入っていることを確認してください。</p>
<example><title>Example</title>
&lt;Location /secure&gt;<br />
@@ -67,19 +67,19 @@
&lt;/Location&gt;
</example>
<p>$BG'>Z%W%m%P%$%@$K$D$$$F$O(B
<module>mod_authn_dbm</module> $B$H(B <module>mod_authn_file</module>
$B$r$4Mw2<$5$$!#(B</p>
<p>認証プロバイダについては
<module>mod_authn_dbm</module> <module>mod_authn_file</module>
をご覧下さい。</p>
<p><code>Off</code> $B$O%W%m%P%$%@%j%9%H$r%/%j%"$7$F!"%G%U%)%k%H$N(B
$B>uBV$KLa$7$^$9!#(B</p>
<p><code>Off</code> はプロバイダリストをクリアして、デフォルトの
状態に戻します。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>AuthBasicAuthoritative</name>
<description>$BG'>Z$H>5G'$r!"$h$jDc$$%l%Y%k$N%b%8%e!<%k$K0\9T$5$;$k$+$r(B
$B@_Dj$7$^$9!#(B</description>
<description>認証と承認を、より低いレベルのモジュールに移行させるかを
設定します。</description>
<syntax>AuthBasicAuthoritative On|Off</syntax>
<default>AuthBasicAuthoritative On</default>
<contextlist><context>directory</context><context>.htaccess</context></contextlist>
@@ -87,26 +87,26 @@
<usage>
<p><directive>AuthBasicAuthoritative</directive>
$B%G%#%l%/%F%#%V$GL@<(E*$K(B <code>Off</code>$B$K@_Dj$9$k$H!"(B
$BM?$($i$l$?G'>Z%f!<%6(B ID $B$KBP$7$F(B<strong>$B%f!<%6(B ID $B$,$J$$(B</strong>
$B$^$?$O(B<strong>$B%k!<%k$,$J$$(B</strong>$B>l9g$K!"(B
$BG'>Z$H>5G'$NN>J}$N%W%m%;%9$,!"(B
$B$h$jDc$$%l%Y%k$N%b%8%e!<%k(B (<code>modules.c</code> $B%U%!%$%k$GDj5A(B) $B$K0\9T$9$k$h$&$K$G$-$^$9!#(B
$B%f!<%6(B ID $B$,$"$k!"$+$D$^$?$O!"%k!<%k$,;XDj$5$l$F$$$k>l9g$O!"(B
$BDL>o$N%Q%9%o!<%I$H%"%/%;%9%A%'%C%/$,E,MQ$5$l$F!"(B
$BG'>Z$K<:GT$9$k$H(B "Authentication Required" $B1~Ez$,JV$5$l$^$9!#(B</p>
ディレクティブで明示的に <code>Off</code>に設定すると、
与えられた認証ユーザ ID に対して<strong>ユーザ ID がない</strong>
または<strong>ルールがない</strong>場合に、
認証と承認の両方のプロセスが、
より低いレベルのモジュール (<code>modules.c</code> ファイルで定義) に移行するようにできます。
ユーザ ID がある、かつまたは、ルールが指定されている場合は、
通常のパスワードとアクセスチェックが適用されて、
認証に失敗すると "Authentication Required" 応答が返されます。</p>
<p>$B$G$9$+$i!"Fs$D0J>e$N%b%8%e!<%k$N%G!<%?%Y!<%9$GF10l$N(B
$B%f!<%6(B ID $B$,8=$o$l$?$j!"(B
$B$^$?$O!"@5$7$$(B <directive module="core">Require</directive>
$B%G%#%l%/%F%#%V$,Fs$D0J>e$N%b%8%e!<%k$G8=$o$l$?$j$7$?>l9g$O!"(B
$B0l$DL\$N%b%8%e!<%k$,G'Dj$r9T$C$F!"(B<directive>AuthAuthoritative</directive>
$B@_Dj$K4X$o$i$:!"%"%/%;%9$O0\9T$7$^$;$s!#(B</p>
<p>ですから、二つ以上のモジュールのデータベースで同一の
ユーザ ID が現われたり、
または、正しい <directive module="core">Require</directive>
ディレクティブが二つ以上のモジュールで現われたりした場合は、
一つ目のモジュールが認定を行って、<directive>AuthAuthoritative</directive>
設定に関わらず、アクセスは移行しません。</p>
<p>$B%G%U%)%k%H$G$O!"@)8f$O0\9T$7$^$;$s!#$=$7$F!"L$CN$N%f!<%6(B ID $B$d(B
$B%k!<%k$,$"$C$F$b(B "Authentication Required" $B1~Ez$,JV$5$l$^$9!#(B
$B$G$9$+$i!"$3$N%G%#%l%/%F%#%V$r@_Dj$7$J$$$3$H$G%7%9%F%`$N0BA4$r0];}$G$-$F!"$^$?!"(B
NCSA $B=`5r$N5sF0$r6/@)$G$-$^$9!#(B</p>
<p>デフォルトでは、制御は移行しません。そして、未知のユーザ ID や
ルールがあっても "Authentication Required" 応答が返されます。
ですから、このディレクティブを設定しないことでシステムの安全を維持できて、また、
NCSA 準拠の挙動を強制できます。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 659902 -->
@@ -23,64 +23,64 @@
<modulesynopsis metafile="mod_authn_anon.xml.meta">
<name>mod_authn_anon</name>
<description>$BG'>Z$,I,MW$JNN0h$X$N(B "anonymous" $B%f!<%6$N%"%/%;%9$r5v2D$9$k(B
<description>認証が必要な領域への "anonymous" ユーザのアクセスを許可する
</description>
<status>Extension</status>
<sourcefile>mod_authn_anon.c</sourcefile>
<identifier>authn_anon_module</identifier>
<compatibility>Apache 2.1 $B0J9_(B</compatibility>
<compatibility>Apache 2.1 以降</compatibility>
<summary>
<p>$B$3$N%b%8%e!<%k$O(B <module>mod_auth_basic</module> $B$N$h$&$J(B
$BG'>Z%U%m%s%H%(%s%I$H$7$F!"(Banonymous-ftp $B%5%$%H$N$h$&$J!"!VKbK!$N!W%f!<%6(B ID
'anonymous' $B$HEE;R%a!<%k%"%I%l%9$r%Q%9%o!<%I$K$7$?%f!<%6G'>Z$r(B
$B9T$J$&5!G=$rDs6!$7$^$9!#$3$NEE;R%a!<%k%"%I%l%9$O%m%0<}=8$9$k$3$H$,(B
$B$G$-$^$9!#(B</p>
<p>このモジュールは <module>mod_auth_basic</module> のような
認証フロントエンドとして、anonymous-ftp サイトのような、「魔法の」ユーザ ID
'anonymous' と電子メールアドレスをパスワードにしたユーザ認証を
行なう機能を提供します。この電子メールアドレスはログ収集することが
できます。</p>
<p>$BB>$N(B ($B%G!<%?%Y!<%9$K$h$k(B) $B%"%/%;%9@)8fJ}K!$HAH$_9g$o$;$k$3$H$G!"(B
$B!VL$EPO?!W%f!<%6$KBP$7$F%5%$%H$r8x3+$7$D$D!"8zN($h$/%f!<%6DI@W$7$?$j!"(B
$B%f!<%6$N%W%m%U%!%$%k$K1~$8$?%+%9%?%^%$%:$r$7$?$j$G$-$^$9!#(B
$B$3$N$h$&$JG'>Z$K4p$E$$$?%f!<%6DI@W$NMxE@$N0l$D$O!"(B
$B%^%8%C%/%/%C%-!<$K4p$E$/%f!<%6DI@WJ}K!$d!"(B
$BDAL/$J(B URL $B$N@\F,<-$d@\Hx<-$rMxMQ$7$?%f!<%6DI@WJ}K!$H$O0[$J$j!"(B
$B40A4$K%V%i%&%6Hs0MB8$G$"$j!"%f!<%64V$G(B URL $B$r6&M-$9$k$3$H$,$G$-$k$H$$$&(B
$BE@$G$9!#(B</p>
<p>他の (データベースによる) アクセス制御方法と組み合わせることで、
「未登録」ユーザに対してサイトを公開しつつ、効率よくユーザ追跡したり、
ユーザのプロファイルに応じたカスタマイズをしたりできます。
このような認証に基づいたユーザ追跡の利点の一つは、
マジッククッキーに基づくユーザ追跡方法や、
珍妙な URL の接頭辞や接尾辞を利用したユーザ追跡方法とは異なり、
完全にブラウザ非依存であり、ユーザ間で URL を共有することができるという
点です。</p>
<p><module>mod_auth_basic</module> $B$r;HMQ$7$F$$$k>l9g$O!"$3$N%b%8%e!<%k$O(B
<directive module="mod_auth_basic">AuthBasicProvider</directive> $B$K(B
<code>anon</code> $B$H$$$&CM$r@_Dj$9$k$3$H$G5/F0$5$l$^$9!#(B</p>
<p><module>mod_auth_basic</module> を使用している場合は、このモジュールは
<directive module="mod_auth_basic">AuthBasicProvider</directive>
<code>anon</code> という値を設定することで起動されます。</p>
</summary>
<section id="example"><title>$BNc(B</title>
<p>$B0J2<$NNc$O!VIaDL!W$N(B htpasswd $B%U%!%$%k$K4p$E$$$?G'>Z$HAH$_9g$o$5$l$F(B
$B$*$j!"0J2<$NMW7o$r8+$?$9%f!<%6$r!V%2%9%H!W$H$7$F5v2D$7$^$9(B:</p>
<section id="example"><title></title>
<p>以下の例は「普通」の htpasswd ファイルに基づいた認証と組み合わされて
おり、以下の要件を見たすユーザを「ゲスト」として許可します:</p>
<ul>
<li>$B%f!<%6$O(B userID $B$rF~NO$7$J$1$l$P$J$j$^$;$s!#(B
<li>ユーザは userID を入力しなければなりません。
(<directive module="mod_authn_anon"
>Anonymous_NoUserID</directive>)</li>
<li>$B%f!<%6$O%Q%9%o!<%I$rF~NO$7$J$1$l$P$J$j$^$;$s!#(B
<li>ユーザはパスワードを入力しなければなりません。
(<directive module="mod_authn_anon"
>Anonymous_MustGiveEmail</directive>)</li>
<li>$BF~NO$5$l$?%Q%9%o!<%I$OM-8z$JEE;R%a!<%k%"%I%l%9$G$J$1$l$P(B
$B$J$j$^$;$s!#(B<em>$B$9$J$o$A(B</em>$B!">/$/$H$b0l$D$N(B '@' $B$H(B '.' $B$,(B
$B4^$^$l$F$$$kI,MW$,$"$j$^$9!#(B
<li>入力されたパスワードは有効な電子メールアドレスでなければ
なりません。<em>すなわち</em>、少くとも一つの '@' と '.' が
含まれている必要があります。
(<directive module="mod_authn_anon"
>Anonymous_VerifyEmail</directive>)</li>
<li>userID $B$O(B <code>anonymous guest www test
welcome</code> $B$N$I$l$+$G$J$1$l$P$J$j$^$;$s!#(B
$B%f!<%6L>$NHf3S$OBgJ8;z>.J8;z$r6hJL(B<strong>$B$7$^$;$s!#(B</strong></li>
<li>userID <code>anonymous guest www test
welcome</code> のどれかでなければなりません。
ユーザ名の比較は大文字小文字を区別<strong>しません。</strong></li>
<li>$B%Q%9%o!<%IMs$KF~NO$5$l$?EE;R%a!<%k%"%I%l%9$O%(%i!<%m%0%U%!%$%k$K(B
$B%m%.%s%0$5$l$^$9!#(B
<li>パスワード欄に入力された電子メールアドレスはエラーログファイルに
ロギングされます。
(<directive module="mod_authn_anon"
>Anonymous_LogEmail</directive>)</li>
</ul>
<example><title>$BNc(B</title>
<example><title></title>
&lt;Directory /foo&gt;
<indent>
AuthName "Use 'anonymous' &amp; Email address for guest entry"<br />
@@ -105,7 +105,7 @@
<directivesynopsis>
<name>Anonymous</name>
<description>$B%Q%9%o!<%I$N8!::L5$7$G%"%/%;%9$r5v2D$9$k(B userID $B$r;XDj$9$k(B
<description>パスワードの検査無しでアクセスを許可する userID を指定する
</description>
<syntax>Anonymous <var>user</var> [<var>user</var>] ...</syntax>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -113,33 +113,33 @@
<override>AuthConfig</override>
<usage>
<p>$B%Q%9%o!<%I$N8!::$r$7$J$$$G%"%/%;%9$r5v2D$9$k!VKbK!$N!W(B userID $B$r(B
$B@_Dj$7$^$9!#(BuserID $BCf$K6uGr$r;H$($k$h$&$K$9$k$?$a!"(B
$B%(%9%1!<%WJ8;z(B \ $B$K$h$kJ}K!$H!"0zMQId(B ' $B$H(B " $B$K$h$k%/%*!<%F%#%s%0(B
$B$r;H$&$3$H$,$G$-$^$9!#(B</p>
<p>パスワードの検査をしないでアクセスを許可する「魔法の」 userID を
設定します。userID 中に空白を使えるようにするため、
エスケープ文字 \ による方法と、引用符 ' と " によるクオーティング
を使うことができます。</p>
<p>$B%f!<%6L>$NHf3S$O(B<strong>$BBgJ8;z>.J8;z$r6hJL$7$J$$(B</strong>$B$3$H$K(B
$BCm0U$7$F$/$@$5$$!#(B<br />
$BKbK!$N%f!<%6L>(B '<code>anonymous</code>' $B$,5v2D$5$l$F$$$k(B userID $B$K(B
$B4^$`$h$&$K$9$k$3$H$O6/$/?d>)$5$l$F$$$^$9!#(B</p>
<p>ユーザ名の比較は<strong>大文字小文字を区別しない</strong>ことに
注意してください。<br />
魔法のユーザ名 '<code>anonymous</code>' が許可されている userID に
含むようにすることは強く推奨されています。</p>
<example><title>$BNc(B:</title>
<example><title>:</title>
Anonymous anonymous "Not Registered" "I don't know"
</example>
<p>$B$3$l$O!"(BuserID "anonymous",
"AnonyMous", "Not Registered", "I Don't Know" $B$N$I$l$+$r;H$C$F$b(B
$B%Q%9%o!<%IL5$7$G%f!<%6$,%5%$%H$KF~$l$k$h$&$K$7$^$9!#(B</p>
<p>これは、userID "anonymous",
"AnonyMous", "Not Registered", "I Don't Know" のどれかを使っても
パスワード無しでユーザがサイトに入れるようにします。</p>
<p>Apache 2.1 $B$G$O(B userID $B$K(B "<code>*</code>" $B$r;XDj$9$k$3$H$,$G$-$^$9!#(B
$B$3$N>l9g!"(B<em>$B$9$Y$F$N(B</em>userID $B$r5v2D$7$^$9!#(B</p>
<p>Apache 2.1 では userID に "<code>*</code>" を指定することができます。
この場合、<em>すべての</em>userID を許可します。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>Anonymous_LogEmail</name>
<description>$BF~NO$5$l$?%Q%9%o!<%I$,%(%i!<%m%0$K%m%.%s%0$5$l$k$+$I$&$+$r(B
$B@_Dj$9$k(B</description>
<description>入力されたパスワードがエラーログにロギングされるかどうかを
設定する</description>
<syntax>Anonymous_LogEmail On|Off</syntax>
<default>Anonymous_LogEmail On</default>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -147,15 +147,15 @@
<override>AuthConfig</override>
<usage>
<p>$B%G%U%)%k%H$N(B <code>On</code> $B$K@_Dj$5$l$?>l9g$O!"(B
$BF~NO$5$l$?(B ($B$^$C$H$&$JEE;R%a!<%k%"%I%l%9$G$"$k$3$H$,(B
$B4|BT$5$l$k(B) $B!V%Q%9%o!<%I!W$,%(%i!<%m%0$K%m%.%s%0$5$l$^$9!#(B</p>
<p>デフォルトの <code>On</code> に設定された場合は、
入力された (まっとうな電子メールアドレスであることが
期待される) 「パスワード」がエラーログにロギングされます。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>Anonymous_MustGiveEmail</name>
<description>$B6u%Q%9%o!<%I$r5v2D$9$k$+$I$&$+$r;XDj$9$k(B</description>
<description>空パスワードを許可するかどうかを指定する</description>
<syntax>Anonymous_MustGiveEmail On|Off</syntax>
<default>Anonymous_MustGiveEmail On</default>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -163,14 +163,14 @@
<override>AuthConfig</override>
<usage>
<p>$B%f!<%6$,%Q%9%o!<%I$H$7$FEE;R%a!<%k%"%I%l%9$r;XDj$9$kI,MW$,$"$k$+$I$&$+$r(B
$B@_Dj$7$^$9!#$3$l$O6u%Q%9%o!<%I$r6X;_$7$^$9!#(B</p>
<p>ユーザがパスワードとして電子メールアドレスを指定する必要があるかどうかを
設定します。これは空パスワードを禁止します。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>Anonymous_NoUserID</name>
<description>$B6u(B userID $B$r5v2D$9$k$+$r;XDj$9$k(B</description>
<description>空 userID を許可するかを指定する</description>
<syntax>Anonymous_NoUserID On|Off</syntax>
<default>Anonymous_NoUserID Off</default>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -178,17 +178,17 @@
<override>AuthConfig</override>
<usage>
<p><code>On</code> $B$K@_Dj$9$k$H!"%f!<%6$O(B userID ($B$H$*$=$i$/$O(B
$B%Q%9%o!<%IMs$b(B) $B6u$K$9$k$3$H$,$G$-$^$9!#$3$l$OC1$K%j%?!<%s%-!<$r(B
$BC!$$$?$j(B OK $B%\%?%s$rD>@\%/%j%C%/$7$?$j$9$k(B MS-Explorer $B%f!<%6$K$O(B
$BHs>o$KJXMx$G$9!#$=$N$h$&$JA`:n$O$4$/$4$/<+A3$J$b$N$G$7$g$&!#(B</p>
<p><code>On</code> に設定すると、ユーザは userID (とおそらくは
パスワード欄も) 空にすることができます。これは単にリターンキーを
叩いたり OK ボタンを直接クリックしたりする MS-Explorer ユーザには
非常に便利です。そのような操作はごくごく自然なものでしょう。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>Anonymous_VerifyEmail</name>
<description>$B%Q%9%o!<%IMs$,@5$7$$7A<0$NEE;R%a!<%k%"%I%l%9$G$"$k$3$H$r(B
$BD4$Y$k$+$I$&$+$r@_Dj$9$k(B</description>
<description>パスワード欄が正しい形式の電子メールアドレスであることを
調べるかどうかを設定する</description>
<syntax>Anonymous_VerifyEmail On|Off</syntax>
<default>Anonymous_VerifyEmail Off</default>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -196,11 +196,11 @@
<override>AuthConfig</override>
<usage>
<p><code>On</code> $B$K@_Dj$5$l$F$$$k>l9g!"%f!<%6$,M-8z$JEE;R%a!<%k(B
$B%"%I%l%9$rF~NO$9$k$3$H$r?d>)$9$k$?$a!"F~NO$5$l$?!V%Q%9%o!<%I!W$O(B
$B>/$J$/$H$b0l$D$N(B '@' $B$H(B '.' $B$r4^$s$G$$$k$+$I$&$+$rD4$Y$^$9(B
($B>e$N(B <directive
module="mod_authn_anon">Anonymous_LogEmail</directive> $B;2>H(B)$B!#(B</p>
<p><code>On</code> に設定されている場合、ユーザが有効な電子メール
アドレスを入力することを推奨するため、入力された「パスワード」は
少なくとも一つの '@' と '.' を含んでいるかどうかを調べます
(上の <directive
module="mod_authn_anon">Anonymous_LogEmail</directive> 参照)。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990:574882 (outdated) -->
@@ -23,24 +23,24 @@
<modulesynopsis metafile="mod_authn_dbm.xml.meta">
<name>mod_authn_dbm</name>
<description>DBM $B%U%!%$%k$rMQ$$$?%f!<%6G'>Z(B</description>
<description>DBM ファイルを用いたユーザ認証</description>
<status>Extension</status>
<sourcefile>mod_authn_dbm.c</sourcefile>
<identifier>authn_dbm_module</identifier>
<compatibility>Apache 2.1 $B0J9_(B</compatibility>
<compatibility>Apache 2.1 以降</compatibility>
<summary>
<p>$BK\%b%8%e!<%k$O(B <module>mod_auth_digest</module> $B$d(B
<module>mod_auth_basic</module> $B$H$$$C$?G'>Z%U%m%s%H%(%s%I$KBP$7$F!"(B
<dfn>dbm</dfn> $B%Q%9%o!<%I%U%!%$%kFb$+$i$N%f!<%68!:w$K$h$k(B
$B%f!<%6G'>Z5!G=$rDs6!$7$^$9!#;w$?$h$&$J5!G=$O(B <module>mod_authn_file</module>
$B$G$bDs6!$5$l$F$$$^$9!#(B</p>
<p>本モジュールは <module>mod_auth_digest</module>
<module>mod_auth_basic</module> といった認証フロントエンドに対して、
<dfn>dbm</dfn> パスワードファイル内からのユーザ検索による
ユーザ認証機能を提供します。似たような機能は <module>mod_authn_file</module>
でも提供されています。</p>
<p><module>mod_auth_basic</module> $B$d(B <module>mod_auth_digest</module>
$B$r;HMQ$9$k:]$K$O!"$3$N%b%8%e!<%k$O(B
<directive module="mod_auth_basic">AuthBasicProvider</directive> $B$d(B
<p><module>mod_auth_basic</module> <module>mod_auth_digest</module>
を使用する際には、このモジュールは
<directive module="mod_auth_basic">AuthBasicProvider</directive>
<directive module="mod_auth_digest">AuthDigestPrivider</directive>
$B$G(B <code>dbm</code> $B$H;XDj$9$k$3$H$G5/F0$5$l$^$9!#(B</p>
<code>dbm</code> と指定することで起動されます。</p>
</summary>
<seealso><directive module="core">AuthName</directive></seealso>
@@ -54,51 +54,51 @@
<directivesynopsis>
<name>AuthDBMUserFile</name>
<description>$BG'>ZMQ$N%f!<%6$H%Q%9%o!<%I$N%j%9%H$rJ];}$7$F$$$k(B
$B%G!<%?%Y!<%9%U%!%$%kL>$r@_Dj$9$k(B</description>
<description>認証用のユーザとパスワードのリストを保持している
データベースファイル名を設定する</description>
<syntax>AuthDBMUserFile <var>file-path</var></syntax>
<contextlist><context>directory</context><context>.htaccess</context>
</contextlist>
<override>AuthConfig</override>
<usage>
<p><directive>AuthDBMUserFile</directive> $B%G%#%l%/%F%#%V$O(B
$BG'>ZMQ$N%f!<%6$H%Q%9%o!<%I$N%j%9%H$rJ];}$7$F$$$k(B DBM $B%U%!%$%k$N(B
$BL>A0$r@_Dj$7$^$9!#(B<var>File-path</var> $B$O%f!<%6%U%!%$%k$X$N(B
$B@dBP%Q%9$G$9!#(B</p>
<p><directive>AuthDBMUserFile</directive> ディレクティブは
認証用のユーザとパスワードのリストを保持している DBM ファイルの
名前を設定します。<var>File-path</var> はユーザファイルへの
絶対パスです。</p>
<p>$B%f!<%6%U%!%$%k$N%-!<$O%f!<%6L>$G$9!#%f!<%6$KBP$7$FJV$5$l$kCM$O(B
$B0E9f2=$5$l$?%Q%9%o!<%I$G!"$=$N8e$K!"%3%m%s$KB3$$$FG$0U$N%G!<%?$,(B
$BB3$$$F$$$k$3$H$b$"$j$^$9!#%3%m%s$H$=$N8e$N%G!<%?$O%5!<%P$O(B
$BL5;k$7$^$9!#(B</p>
<p>ユーザファイルのキーはユーザ名です。ユーザに対して返される値は
暗号化されたパスワードで、その後に、コロンに続いて任意のデータが
続いていることもあります。コロンとその後のデータはサーバは
無視します。</p>
<note type="warning"><title>$B%;%-%e%j%F%#(B</title>
<p><directive>AuthDBMUserFile </directive> $B$O!"(B
$B%&%'%V%5!<%P$N%I%-%e%a%s%H%D%j!<$N30B&$KJ]4I$9$k$h$&$K$7$F$/$@$5$$!#(B
$BJ]8n$7$h$&$H$7$F$$$k%G%#%l%/%H%j0J2<$K$O(B
<strong>$BCV$+$J$$$G2<$5$$(B</strong>$B!#(B
$B$=$&$7$J$$$H%/%i%$%"%s%H$,(B <directive>AuthUserFile</directive> $B$r(B
$B%@%&%s%m!<%I$G$-$F$7$^$$$^$9!#(B</p>
<note type="warning"><title>セキュリティ</title>
<p><directive>AuthDBMUserFile </directive> は、
ウェブサーバのドキュメントツリーの外側に保管するようにしてください。
保護しようとしているディレクトリ以下には
<strong>置かないで下さい</strong>
そうしないとクライアントが <directive>AuthUserFile</directive>
ダウンロードできてしまいます。</p>
</note>
<p>$B=EMW$J8_49@-$K4X$9$kCm0U(B: apache module $B$N(B <code>dbmopen</code> $B$N<BAu$O(B
$BJ8;zNs$,(B NULL $B$G=*$o$C$F$$$k$3$H$K0MB8$9$k$N$G$O$J$/!"(BDBM $B%G!<%?%9%H%i%/%A%c(B
$B$N%O%C%7%eCM$NJ8;zNs$ND9$5$rFI$_<h$j$^$9!#(BNetscape $B%&%'%V%5!<%P$J$I!"(B
$B%"%W%j%1!<%7%g%s$NCf$K$OJ8;zNs$,(B NULL $B$G=*$o$C$F$$$k$3$H$K0MB8$7$F$$$k(B
$B$b$N$,$"$j$^$9!#$G$9$+$i!"0[$J$k%"%W%j%1!<%7%g%s4V$G$N(B DBM $B%U%!%$%k$N(B
$B;HMQ$KLdBj$,$"$k>l9g$O!"$3$l$,860x$K$J$C$F$$$k2DG=@-$,$"$j$^$9!#(B</p>
<p>重要な互換性に関する注意: apache module <code>dbmopen</code> の実装は
文字列が NULL で終わっていることに依存するのではなく、DBM データストラクチャ
のハッシュ値の文字列の長さを読み取ります。Netscape ウェブサーバなど、
アプリケーションの中には文字列が NULL で終わっていることに依存している
ものがあります。ですから、異なるアプリケーション間での DBM ファイルの
使用に問題がある場合は、これが原因になっている可能性があります。</p>
<p>Apache $B$K$O(B <program>dbmmanage</program> $B$H$$$&(B
perl $B%9%/%j%W%H$,4^$^$l$F$$$^$9!#$3$N%W%m%0%i%`$r;H$C$F$3$N(B
$B%b%8%e!<%k$,;HMQ$9$k(B DBM $B%U%)!<%^%C%H$N%Q%9%o!<%I%U%!%$%k$r:n@.$7$?$j(B
$B99?7$7$?$j$9$k$3$H$,$G$-$^$9!#(B</p>
<p>Apache には <program>dbmmanage</program> という
perl スクリプトが含まれています。このプログラムを使ってこの
モジュールが使用する DBM フォーマットのパスワードファイルを作成したり
更新したりすることができます。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>AuthDBMType</name>
<description>$B%Q%9%o!<%I$rJ]B8$9$k$?$a$KI,MW$J%G!<%?%Y!<%9%U%!%$%k$N<oN`$r(B
$B@_Dj$9$k(B</description>
<description>パスワードを保存するために必要なデータベースファイルの種類を
設定する</description>
<syntax>AuthDBMType default|SDBM|GDBM|NDBM|DB</syntax>
<default>AuthDBMType default</default>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -106,13 +106,13 @@
<override>AuthConfig</override>
<usage>
<p>$B%Q%9%o!<%I$rJ]B8$9$k$?$a$K;HMQ$9$k%G!<%?%Y!<%9%U%!%$%k$N<oN`$r(B
$B@_Dj$7$^$9!#%G%U%)%k%H$N%G!<%?%Y!<%9$N<oN`$O%3%s%Q%$%k;~$K7h$^$j$^$9!#(B
$BB>$N<oN`$N%G!<%?%Y!<%9$,;HMQ2DG=$+$I$&$+$b(B <a href="../install.html#dbm"
>$B%3%s%Q%$%k;~$N@_Dj(B</a>$B$K0MB8$7$^$9!#(B</p>
<p>パスワードを保存するために使用するデータベースファイルの種類を
設定します。デフォルトのデータベースの種類はコンパイル時に決まります。
他の種類のデータベースが使用可能かどうかも <a href="../install.html#dbm"
>コンパイル時の設定</a>に依存します。</p>
<p>$B%Q%9%o!<%I%U%!%$%k$r:n@.$9$k$N$K;HMQ$9$k%W%m%0%i%`$,F1$8<oN`$N%G!<%?%Y!<%9$r(B
$B;HMQ$9$k$h$&$K@_Dj$9$k$3$H$OHs>o$K=EMW$G$9!#(B</p>
<p>パスワードファイルを作成するのに使用するプログラムが同じ種類のデータベースを
使用するように設定することは非常に重要です。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -23,22 +23,22 @@
<modulesynopsis metafile="mod_authn_default.xml.meta">
<name>mod_authn_default</name>
<description>$BG'>Z%U%)!<%k%P%C%/%b%8%e!<%k(B</description>
<description>認証フォールバックモジュール</description>
<status>Base</status>
<sourcefile>mod_authn_default.c</sourcefile>
<identifier>authn_default_module</identifier>
<compatibility>Apache 2.1 $B0J9_(B</compatibility>
<compatibility>Apache 2.1 以降</compatibility>
<summary>
<p><module>mod_auth_basic</module> $B$N$h$&$JG'>Z%b%8%e!<%k$r(B
$B@_Dj$7$J$+$C$?>l9g$O!"K\%b%8%e!<%k$,%U%)!<%k%P%C%/$H$J$j$^$9!#(B
$B%f!<%6$+$iDs<($5$l$?$I$s$J>Z=q$bC1$K5qH]$7$^$9!#(B</p>
<p><module>mod_auth_basic</module> のような認証モジュールを
設定しなかった場合は、本モジュールがフォールバックとなります。
ユーザから提示されたどんな証書も単に拒否します。</p>
</summary>
<directivesynopsis>
<name>AuthDefaultAuthoritative</name>
<description>$B<!$NDc<!%l%Y%k$NG'>Z%b%8%e!<%k$K@)8f$rEO$9$+$I$&$+$r(B
$B@_Dj$7$^$9(B</description>
<description>次の低次レベルの認証モジュールに制御を渡すかどうかを
設定します</description>
<syntax>AuthDefaultAuthoritative On|Off</syntax>
<default>AuthDefaultAuthoritative On</default>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -46,18 +46,18 @@
<override>AuthConfig</override>
<usage>
<p><directive>AuthDefaultAuthoritative</directive> $B%G%#%l%/%F%#%V$r(B
$BL@<(E*$K(B <code>Off</code> $B$K@_Dj$9$k$H!"(B
$BG'>Z$r<!$N(B (<code>modules.c</code> $B%U%!%$%k$GDj5A$5$l$F$$$k(B)
$BDc<!%l%Y%k$N%b%8%e!<%k$KEO$7$^$9!#(B
<p><directive>AuthDefaultAuthoritative</directive> ディレクティブを
明示的に <code>Off</code> に設定すると、
認証を次の (<code>modules.c</code> ファイルで定義されている)
低次レベルのモジュールに渡します。
</p>
<note><title>$BCm0U(B</title>
<p><module>mod_authn_default</module> $B<+BN$,(B<em>$B$H$F$bDc$$(B</em>
$B%l%Y%k$H$7$FDj5A$5$l$F$$$^$9$N$G!"DL>o$O$3$l$h$j$bDc<!$N(B
$B%b%8%e!<%k$OB8:_$7$^$;$s!#$G$9$+$i(B
<directive>AuthDefaultAuthoritative</directive> $B$O%G%U%)%k%H(B
(<code>On</code>) $B$N$^$^$K$7$?$[$&$,NI$$$G$7$g$&!#(B</p>
<note><title>注意</title>
<p><module>mod_authn_default</module> 自体が<em>とても低い</em>
レベルとして定義されていますので、通常はこれよりも低次の
モジュールは存在しません。ですから
<directive>AuthDefaultAuthoritative</directive> はデフォルト
(<code>On</code>) のままにしたほうが良いでしょう。</p>
</note>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -23,24 +23,24 @@
<modulesynopsis metafile="mod_authn_file.xml.meta">
<name>mod_authn_file</name>
<description>$B%F%-%9%H%U%!%$%k$rMQ$$$?%f!<%6G'>Z(B</description>
<description>テキストファイルを用いたユーザ認証</description>
<status>Base</status>
<sourcefile>mod_authn_file.c</sourcefile>
<identifier>authn_file_module</identifier>
<compatibility>Apache 2.1 $B0J9_(B</compatibility>
<compatibility>Apache 2.1 以降</compatibility>
<summary>
<p>$BK\%b%8%e!<%k$O(B <module>mod_auth_digest</module> $B$d(B
<module>mod_auth_basic</module> $B$H$$$C$?G'>Z%U%m%s%H%(%s%I$KBP$7$F!"(B
$B%W%l%$%s%F%-%9%H$N%Q%9%o!<%I%U%!%$%kFb$+$i%f!<%6$r8!:w$9$k$3$H$G!"(B
$B%f!<%6G'>Z5!G=$rDs6!$7$^$9!#;w$?$h$&$J5!G=$O(B <module>mod_authn_dbm</module>
$B$G$bDs6!$5$l$F$$$^$9!#(B</p>
<p>本モジュールは <module>mod_auth_digest</module>
<module>mod_auth_basic</module> といった認証フロントエンドに対して、
プレインテキストのパスワードファイル内からユーザを検索することで、
ユーザ認証機能を提供します。似たような機能は <module>mod_authn_dbm</module>
でも提供されています。</p>
<p><module>mod_auth_basic</module> $B$d(B <module>mod_auth_digest</module>
$B$r;HMQ$9$k:]$K$O!"(B
<directive module="mod_auth_basic">AuthBasicProvider</directive> $B$d(B
<p><module>mod_auth_basic</module> <module>mod_auth_digest</module>
を使用する際には、
<directive module="mod_auth_basic">AuthBasicProvider</directive>
<directive module="mod_auth_digest">AuthDigestPrivider</directive>
$B$G(B <code>file</code> $B$H;XDj$9$k$3$H$G$3$N%b%8%e!<%k$O5/F0$5$l$^$9!#(B</p>
<code>file</code> と指定することでこのモジュールは起動されます。</p>
</summary>
<seealso>
<directive module="mod_auth_basic">AuthBasicProvider</directive>
@@ -53,71 +53,71 @@
<directivesynopsis>
<name>AuthUserFile</name>
<description>$BG'>Z$K;HMQ$9$k%f!<%6$H%Q%9%o!<%I$N0lMw$,3JG<$5$l$F$$$k!"(B
$B%F%-%9%H%U%!%$%k$NL>A0$r@_Dj$9$k(B</description>
<description>認証に使用するユーザとパスワードの一覧が格納されている、
テキストファイルの名前を設定する</description>
<syntax>AuthUserFile <var>file-path</var></syntax>
<contextlist><context>directory</context><context>.htaccess</context>
</contextlist>
<override>AuthConfig</override>
<usage>
<p><directive>AuthUserFile</directive> $B%G%#%l%/%F%#%V$O!"(B
$B%f!<%6G'>Z$N$?$a$N%f!<%6$H%Q%9%o!<%I$N0lMw$r3JG<$7$?(B
$B%F%-%9%H%U%!%$%k$NL>A0$r@_Dj$7$^$9!#(B<var>file-path</var>
$B$O%f!<%6%U%!%$%k$X$N%Q%9$G$9!#(B
$B$b$7@dBP%Q%9$G$J$1$l$P!"(B
<p><directive>AuthUserFile</directive> ディレクティブは、
ユーザ認証のためのユーザとパスワードの一覧を格納した
テキストファイルの名前を設定します。<var>file-path</var>
はユーザファイルへのパスです。
もし絶対パスでなければ、
<directive module="core">ServerRoot</directive>
$B$+$i$NAjBP%Q%9$H$7$F07$o$l$^$9!#(B</p>
からの相対パスとして扱われます。</p>
<p>$B%f!<%6%U%!%$%k$N3F9T$K$O!"%f!<%6L>!"%3%m%s!"(B
$B0E9f2=$7$?%Q%9%o!<%I$r5-=R$7$^$9!#(B
$BF10l%f!<%6(B ID $B$,J#?t2sEPO?$5$l$?;~$O!"(B
<p>ユーザファイルの各行には、ユーザ名、コロン、
暗号化したパスワードを記述します。
同一ユーザ ID が複数回登録された時は、
<module>mod_authn_file</module>
$B$O:G=i$K8+$D$+$C$?%Q%9%o!<%I$r;HMQ$7$FG'>Z$7$^$9!#(B</p>
は最初に見つかったパスワードを使用して認証します。</p>
<p>$B%P%$%J%jG[I[$N0lIt$H$7$F%$%s%9%H!<%k$5$l$k$+!"(B
$B$"$k$$$O(B <code>src/support</code> $B$K$"$k(B
<p>バイナリ配布の一部としてインストールされるか、
あるいは <code>src/support</code> にある
<program>htpasswd</program>
$B%f!<%F%#%j%F%#$G!"$3$N(B <em>HTTP $B4pK\G'>Z(B</em>
$BMQ%Q%9%o!<%I%U%!%$%k$r%a%$%s%F%J%s%9$7$^$9!#(B
$B>\:Y$O(B <a href="../programs/htpasswd.html">man
$B%Z!<%8(B</a>$B$r$4MwD:$/$H$7$F!"4JC1$K$O(B:</p>
ユーティリティで、この <em>HTTP 基本認証</em>
用パスワードファイルをメインテナンスします。
詳細は <a href="../programs/htpasswd.html">man
ページ</a>をご覧頂くとして、簡単には:</p>
<p>$B=i4|(B ID <code>username</code> $B$G!"(B<code>Filename</code>
$B$H$$$&%Q%9%o!<%I%U%!%$%k$r@8@.$7$^$9!#(B
$B<!$N%3%^%s%I$rH/9T$9$k$H%Q%9%o!<%I$,MW5a$5$l$^$9(B:</p>
<p>初期 ID <code>username</code> で、<code>Filename</code>
というパスワードファイルを生成します。
次のコマンドを発行するとパスワードが要求されます:</p>
<example>
htpasswd -c Filename username
</example>
<p>$B%Q%9%o!<%I%U%!%$%k(B <code>Filename</code> $B$K!"(B<code>username2</code>
$B$rDI2C$7$?$j=$@5$7$?$j$7$^$9(B:</p>
<p>パスワードファイル <code>Filename</code> に、<code>username2</code>
を追加したり修正したりします:</p>
<example>
htpasswd Filename username2
</example>
<p>($BLuCm(B: $BHs>o$KB?$/$N%f!<%6$rEPO?$9$k$HBg$-$J%U%!%$%k$K$J$j$^$9$,(B)
$BBg$-$J%F%-%9%H%U%!%$%k$r8!:w$9$k$N$O(B<em>$BHs>o$K8zN($,0-$$(B</em>
$B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#$=$N$h$&$JI,MW$N$"$k;~$O!"(B
<p>(訳注: 非常に多くのユーザを登録すると大きなファイルになりますが)
大きなテキストファイルを検索するのは<em>非常に効率が悪い</em>
ということに注意してください。そのような必要のある時は、
<directive module="mod_authn_dbm">AuthDBMUserFile</directive>
$B$rBe$o$j$K;H$C$F$/$@$5$$!#(B</p>
を代わりに使ってください。</p>
<p><em>HTTP $B%@%$%8%'%9%HG'>Z(B</em>$B$r;HMQ$9$k>l9g$O!"(B
<p><em>HTTP ダイジェスト認証</em>を使用する場合は、
<a href="../programs/htpasswd.html">htpasswd</a>
$B%W%m%0%i%`$G$OIT==J,$G$9!#$=$NBe$o$j$K(B
プログラムでは不十分です。その代わりに
<program>htdigest</program>
$B$r;HMQ$7$F$/$@$5$$!#%@%$%8%'%9%HG'>ZMQ$N%G!<%?$H(B
$B4pK\G'>ZMQ$N%G!<%?$rF10l%U%!%$%k$K:.$<$FJ]B8$G$-$J$$!"(B
$B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
を使用してください。ダイジェスト認証用のデータと
基本認証用のデータを同一ファイルに混ぜて保存できない、
ということに注意してください。</p>
<note type="warning"><title>$B%;%-%e%j%F%#(B</title>
<note type="warning"><title>セキュリティ</title>
<p><directive>AuthUserFile </directive>
$B$O!"%&%'%V%5!<%P$N%I%-%e%a%s%H%D%j!<$N30B&$KJ]4I$9$k$h$&$K$7$F$/$@$5$$!#(B
$BJ]8n$7$h$&$H$7$F$$$k%G%#%l%/%H%j0J2<$K$O!"(B<strong>$BCV$+$J$$$G2<$5$$(B</strong>$B!#(B
$B$=$&$7$J$$$H(B <directive>AuthUserFile</directive> $B$O(B
$B%@%&%s%m!<%I$G$-$F$7$^$$$^$9!#(B</p>
は、ウェブサーバのドキュメントツリーの外側に保管するようにしてください。
保護しようとしているディレクトリ以下には、<strong>置かないで下さい</strong>
そうしないと <directive>AuthUserFile</directive>
ダウンロードできてしまいます。</p>
</note>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -23,22 +23,22 @@
<modulesynopsis metafile="mod_authz_default.xml.meta">
<name>mod_authz_default</name>
<description>$B>5G'%U%)!<%k%P%C%/%b%8%e!<%k(B</description>
<description>承認フォールバックモジュール</description>
<status>Base</status>
<sourcefile>mod_authz_default.c</sourcefile>
<identifier>authz_default_module</identifier>
<compatibility>Apache 2.1 $B0J9_(B</compatibility>
<compatibility>Apache 2.1 以降</compatibility>
<summary>
<p>$B$3$N%b%8%e!<%k$O(B <module>mod_authz_user</module> $B$d(B
<module>mod_authz_groupfile</module> $B$H$$$C$?>5G'%b%8%e!<%k$r(B
$B@_Dj$7$J$+$C$?>l9g$N%U%)!<%k%P%C%/%b%8%e!<%k$H$7$F@_7W$5$l$F$$$^$9!#(B
$B$I$N$h$&$J>5G'%j%/%(%9%H$bC1$K5qH]$7$^$9!#(B</p>
<p>このモジュールは <module>mod_authz_user</module>
<module>mod_authz_groupfile</module> といった承認モジュールを
設定しなかった場合のフォールバックモジュールとして設計されています。
どのような承認リクエストも単に拒否します。</p>
</summary>
<directivesynopsis>
<name>AuthzDefaultAuthoritative</name>
<description>$B>5G'$,Dc0L$N%b%8%e!<%k$KEO$5$l$k$+$I$&$+$r@_Dj$9$k(B</description>
<description>承認が低位のモジュールに渡されるかどうかを設定する</description>
<syntax>AuthzDefaultAuthoritative On|Off</syntax>
<default>AuthzDefaultAuthoritative On</default>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -46,17 +46,17 @@
<override>AuthConfig</override>
<usage>
<p><directive>AuthzDefaultAuthoritative</directive> $B%G%#%l%/%F%#%V$r(B
$BL@<(E*$K(B <code>Off</code> $B$K@_Dj$9$k$H(B
$BG'>Z$r<!$N(B (<code>modules.c</code> $B%U%!%$%k$GDj5A$5$l$F$$$k(B)
$BDc0L$N%b%8%e!<%k$KEO$9$3$H$r5v2D$7$^$9!#(B</p>
<p><directive>AuthzDefaultAuthoritative</directive> ディレクティブを
明示的に <code>Off</code> に設定すると
認証を次の (<code>modules.c</code> ファイルで定義されている)
低位のモジュールに渡すことを許可します。</p>
<note><title>$BCm0U(B</title>
<p><module>mod_authz_default</module> $B<+BN$,(B<em>$B$H$F$bDc$$(B</em>
$B%l%Y%k$H$7$FDj5A$5$l$F$$$^$9$N$G!"DL>o$O$3$l$h$j$bDc<!$N(B
$B%b%8%e!<%k$OB8:_$7$^$;$s!#$G$9$+$i(B
<directive>AuthDefaultAuthoritative</directive> $B$O%G%U%)%k%H(B
(<code>On</code>) $B$N$^$^$K$7$?$[$&$,NI$$$G$7$g$&!#(B</p>
<note><title>注意</title>
<p><module>mod_authz_default</module> 自体が<em>とても低い</em>
レベルとして定義されていますので、通常はこれよりも低次の
モジュールは存在しません。ですから
<directive>AuthDefaultAuthoritative</directive> はデフォルト
(<code>On</code>) のままにしたほうが良いでしょう。</p>
</note>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:574882 (outdated) -->
@@ -23,17 +23,17 @@
<modulesynopsis metafile="mod_authz_groupfile.xml.meta">
<name>mod_authz_groupfile</name>
<description>$B%W%l!<%s%F%-%9%H%U%!%$%k$rMQ$$$?%0%k!<%W>5G'(B</description>
<description>プレーンテキストファイルを用いたグループ承認</description>
<status>Base</status>
<sourcefile>mod_authz_groupfile.c</sourcefile>
<identifier>authz_groupfile_module</identifier>
<compatibility>Apache 2.1 $B0J9_(B</compatibility>
<compatibility>Apache 2.1 以降</compatibility>
<summary>
<p>$B$3$N%b%8%e!<%k$OG'>Z$5$l$?%f!<%6$,%0%k!<%W$N%a%s%P!<$+(B
$BH]$+$K$h$C$F%&%'%V%5%$%H$N0lIt$X$N%"%/%;%9$r5v2D$9$k$+5qH]$9$k$+$N(B
$B>5G'5!G=$rDs6!$7$^$9!#F1MM$N5!G=$O(B <module>mod_authz_dbm</module>
$B$K$h$C$F$bDs6!$5$l$F$$$^$9!#(B</p>
<p>このモジュールは認証されたユーザがグループのメンバーか
否かによってウェブサイトの一部へのアクセスを許可するか拒否するかの
承認機能を提供します。同様の機能は <module>mod_authz_dbm</module>
によっても提供されています。</p>
</summary>
<seealso><directive module="core">Require</directive></seealso>
@@ -41,48 +41,48 @@
<directivesynopsis>
<name>AuthGroupFile</name>
<description>$B>ZG'$K;HMQ$9$k%f!<%6%0%k!<%W$N0lMw$,3JG<$5$l$F$$$k!"(B
$B%F%-%9%H%U%!%$%k$NL>A0$r@_Dj$9$k(B</description>
<description>証認に使用するユーザグループの一覧が格納されている、
テキストファイルの名前を設定する</description>
<syntax>AuthGroupFile <var>file-path</var></syntax>
<contextlist><context>directory</context><context>.htaccess</context>
</contextlist>
<override>AuthConfig</override>
<usage>
<p><directive>AuthGroupFile</directive> $B%G%#%l%/%F%#%V$O!"(B
$B>ZG'$K;HMQ$9$k%f!<%6%0%k!<%W$N0lMw$,3JG<$5$l$F$$$k!"(B
$B%F%-%9%H%U%!%$%k$NL>A0$r@_Dj$7$^$9!#(B
<var>file-path</var> $B$O%0%k!<%W%U%!%$%k$X$N%Q%9$G$9!#(B
$B@dBP%Q%9$G$J$1$l$P!"(B
<p><directive>AuthGroupFile</directive> ディレクティブは、
証認に使用するユーザグループの一覧が格納されている、
テキストファイルの名前を設定します。
<var>file-path</var> はグループファイルへのパスです。
絶対パスでなければ、
<directive module="core">ServerRoot</directive>
$B$+$i$NAjBP%Q%9$H$7$F07$o$l$^$9!#(B</p>
からの相対パスとして扱われます。</p>
<p>$B%0%k!<%W%U%!%$%k3F9T$O!"%0%k!<%WL>!"%3%m%s!"$=$7$F(B
$B%9%Z!<%96h@Z$j$G$=$N%a%s%P!<$N%f!<%6L>$r5-=R$7$^$9!#(B</p>
<p>グループファイル各行は、グループ名、コロン、そして
スペース区切りでそのメンバーのユーザ名を記述します。</p>
<example><title>$BNc(B:</title>
<example><title>:</title>
mygroup: bob joe anne
</example>
<p>$BBg$-$J%U%!%$%k$rC5:w$9$k$N$O!"(B<em>$BHs>o$K(B</em>$B8zN($,0-$$$H$$$&E@$K(B
$BCm0U$7$F$/$@$5$$!#$=$N$h$&$J>l9g$O!"(B
<p>大きなファイルを探索するのは、<em>非常に</em>効率が悪いという点に
注意してください。そのような場合は、
<directive module="mod_authz_dbm">AuthDBMGroupFile</directive>
$B$NJ}$,$:$C$HNI$$@-G=$rH/4x$7$^$9!#(B</p>
の方がずっと良い性能を発揮します。</p>
<note type="warning"><title>$B%;%-%e%j%F%#(B</title>
<p><directive>AuthGroupFile</directive> $B$O!"(B
$B%&%'%V%5!<%P$N%I%-%e%a%s%H%D%j!<$N30B&$K(B
$BJ]4I$9$k$h$&$K$7$F$/$@$5$$!#(B
$BJ]8n$7$h$&$H$7$F$$$k%G%#%l%/%H%j0J2<$K$O!"(B<em>$BCV$+$J$$$G2<$5$$(B</em>$B!#(B
$B$=$&$7$J$$$H%/%i%$%"%s%H$,(B <directive>AuthGroupFile</directive> $B$r(B
$B%@%&%s%m!<%I$G$-$F$7$^$&2DG=@-$,$"$j$^$9!#(B</p>
<note type="warning"><title>セキュリティ</title>
<p><directive>AuthGroupFile</directive> は、
ウェブサーバのドキュメントツリーの外側に
保管するようにしてください。
保護しようとしているディレクトリ以下には、<em>置かないで下さい</em>。
そうしないとクライアントが <directive>AuthGroupFile</directive>
ダウンロードできてしまう可能性があります。</p>
</note>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>AuthzGroupFileAuthoritative</name>
<description>$B>5G'$,2<0L$N%b%8%e!<%k$KEO$5$l$k$+$I$&$+$r@_Dj$9$k(B</description>
<description>承認が下位のモジュールに渡されるかどうかを設定する</description>
<syntax>AuthzGroupFileAuthoritative On|Off</syntax>
<default>AuthzGroupFileAuthoritative On</default>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -90,24 +90,24 @@
<override>AuthConfig</override>
<usage>
<p><directive>AuthzGroupFileAuthoritative</directive> $B%G%#%l%/%F%#%V$r(B
$BL@<(E*$K(B <code>Off</code> $B$K@_Dj$9$k$H(B userID $B$KBP1~$9$k(B
<strong>$B%0%k!<%W$,$J$$>l9g$K(B</strong>$B!"(B
(<code>module.c</code> $B$GDj5A$5$l$F$$$k(B) $B2<0L$N%b%8%e!<%k$K%0%k!<%W>5G'$r(B
$BEO$9$3$H$r5v2D$7$^$9!#(B</p>
<p><directive>AuthzGroupFileAuthoritative</directive> ディレクティブを
明示的に <code>Off</code> に設定すると userID に対応する
<strong>グループがない場合に</strong>
(<code>module.c</code> で定義されている) 下位のモジュールにグループ承認を
渡すことを許可します。</p>
<p>$B%G%U%)%k%H$G$O@)8f$OEO$5$l$:!"L$CN$N%0%k!<%W$N>l9g$O(B Authentication
Required $B1~Ez$,JV$5$l$^$9!#$G$9$+$i!"$3$l$r@_Dj$7$J$$$H(B
$B%7%9%F%`$r0BA4$KJ]$D$3$H$,$G$-!"(BNCSA $B8_49$N?6$kIq$$$r$5$;$k$3$H$K$J$j$^$9!#(B</p>
<p>デフォルトでは制御は渡されず、未知のグループの場合は Authentication
Required 応答が返されます。ですから、これを設定しないと
システムを安全に保つことができ、NCSA 互換の振る舞いをさせることになります。</p>
<note type="warning"><title>$B%;%-%e%j%F%#(B</title>
<p>$B%f!<%6$N(B <code>.htaccess</code> $B%U%!%$%k$GB>$N>5G'<jCJ$X$N(B
$B0Q>y$,$G$-$k$h$&$K$9$k$3$H$N0UL#$9$k$H$3$m$O==J,$K9MN8$7$F$*$$$F$/$@$5$$!#(B
$B$=$7$F$=$l$,!"K\Ev$KK>$`5sF0$G$"$k$3$H$r3N$+$a$F$/$@$5$$!#(B
$BDL>o$O0l$D$N(B <code>.htpasswd</code> $B%U%!%$%k$r0BA4$K$9$kJ}$,(B
$B$h$jB?$/$N%"%/%;%9%$%s%?%U%'!<%9$r;}$D$+$b$7$l$J$$%G!<%?%Y!<%9$r(B
$B0BA4$K$9$k$h$j$b4JC1$G$9!#(B</p>
<note type="warning"><title>セキュリティ</title>
<p>ユーザの <code>.htaccess</code> ファイルで他の承認手段への
委譲ができるようにすることの意味するところは十分に考慮しておいてください。
そしてそれが、本当に望む挙動であることを確かめてください。
通常は一つの <code>.htpasswd</code> ファイルを安全にする方が
より多くのアクセスインタフェースを持つかもしれないデータベースを
安全にするよりも簡単です。</p>
</note>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:574882 (outdated) -->
@@ -23,70 +23,70 @@
<modulesynopsis metafile="mod_authz_owner.xml.meta">
<name>mod_authz_owner</name>
<description>$B%U%!%$%k$N=jM-<T$K4p$E$$$?>5G'(B</description>
<description>ファイルの所有者に基づいた承認</description>
<status>Extension</status>
<sourcefile>mod_authz_owner.c</sourcefile>
<identifier>authz_owner_module</identifier>
<compatibility>Apache 2.1 $B0J9_$G;HMQ2DG=(B</compatibility>
<compatibility>Apache 2.1 以降で使用可能</compatibility>
<summary>
<p>$B$3$N%b%8%e!<%k$O%j%/%(%9%H$5$l$?%U%!%$%k$N%U%!%$%k%7%9%F%`$N(B
$B=jM-<T$d%0%k!<%W$r(B HTTP $BG'>Z$K;H$o$l$?%f!<%6(B ID ($B%&%'%V%f!<%6(B ID) $B$H(B
$BHf3S$9$k$3$H$G%"%/%;%9$r>5G'$7$^$9!#Ds6!$5$l$?%f!<%6L>$H%Q%9%o!<%I$O(B
<module>mod_auth_basic</module> $B$d(B
<module>mod_auth_digest</module> $B$N$h$&$JG'>Z%b%8%e!<%k$G4{$K(B
$BE,@Z$K8!>Z$5$l$F$$$kI,MW$,$"$j$^$9!#(B<module>mod_authz_owner</module>
$B$O0J2<$N$h$&$K!"(B<directive module="core"
>Require</directive> $B%G%#%l%/%F%#%V$N(B <code>file-owner</code> $B$H(B
<code>file-group</code> $B$H$$$&Fs$D$N0z?t$rG'<1$7$^$9(B:</p>
<p>このモジュールはリクエストされたファイルのファイルシステムの
所有者やグループを HTTP 認証に使われたユーザ ID (ウェブユーザ ID) と
比較することでアクセスを承認します。提供されたユーザ名とパスワードは
<module>mod_auth_basic</module>
<module>mod_auth_digest</module> のような認証モジュールで既に
適切に検証されている必要があります。<module>mod_authz_owner</module>
は以下のように、<directive module="core"
>Require</directive> ディレクティブの <code>file-owner</code>
<code>file-group</code> という二つの引数を認識します:</p>
<dl>
<dt><code>file-owner</code></dt>
<dd>$BDs6!$5$l$?%&%'%V%f!<%6L>$O%j%/%(%9%H$5$l$?%U%!%$%k$N=jM-<T$N(B
$B%7%9%F%`$K$*$1$kL>A0$H0lCW$9$kI,MW$,$"$j$^$9!#$D$^$j!"%*%Z%l!<%F%#%s%0(B
$B%7%9%F%`$,%U%!%$%k$O(B <code>jones</code> $B$K$h$j=jM-$5$l$F$$$k(B
$B$H8@$C$?$H$-$O!"%&%'%V$+$i$N%"%/%;%9$K;H$o$l$k%f!<%6L>$b(B
<code>jones</code> $B$G$J$1$l$P$J$j$^$;$s!#(B</dd>
<dd>提供されたウェブユーザ名はリクエストされたファイルの所有者の
システムにおける名前と一致する必要があります。つまり、オペレーティング
システムがファイルは <code>jones</code> により所有されている
と言ったときは、ウェブからのアクセスに使われるユーザ名も
<code>jones</code> でなければなりません。</dd>
<dt><code>file-group</code></dt>
<dd>$B%U%!%$%k$r=jM-$9$k%7%9%F%`$N%0%k!<%W$NL>A0$,!"Nc$($P(B
<module>mod_authz_groupfile</module> $B$d(B <module>mod_authz_dbm</module>
$B$K$h$jDs6!$5$l$k%0%k!<%W%G!<%?%Y!<%9$KB8:_$7$F$$$F!"(B
$B%&%'%V%f!<%6L>$,$=$N%0%k!<%W$KB0$7$F$$$J$1$l$P$J$j$^$;$s!#(B
$BNc$($P!"%*%Z%l!<%F%#%s%0%7%9%F%`$,%U%!%$%k$O(B ($B%7%9%F%`$N(B) $B%0%k!<%W(B
<code>accounts</code> $B$K$h$j=jM-$5$l$F$$$k$H8@$C$?$H$-$O!"(B
<code>accounts</code> $B$,%0%k!<%W%G!<%?%Y!<%9$KB8:_$7$F!"(B
$B%j%/%(%9%H$K;HMQ$5$l$?%&%'%V%f!<%6L>$,$=$N%0%k!<%W$KB0$7$F$$$k(B
$BI,MW$,$"$j$^$9!#(B</dd>
<dd>ファイルを所有するシステムのグループの名前が、例えば
<module>mod_authz_groupfile</module> <module>mod_authz_dbm</module>
により提供されるグループデータベースに存在していて、
ウェブユーザ名がそのグループに属していなければなりません。
例えば、オペレーティングシステムがファイルは (システムの) グループ
<code>accounts</code> により所有されていると言ったときは、
<code>accounts</code> がグループデータベースに存在して、
リクエストに使用されたウェブユーザ名がそのグループに属している
必要があります。</dd>
</dl>
<note><title>$BCm(B</title>
<p>$B%U%!%$%k%7%9%F%`$K<B:]$K$OB8:_$7$J$$%j%=!<%9(B
(<em>$B$D$^$j(B</em> $B%P!<%A%c%k$J%j%=!<%9(B) $B$N>5G'$K(B
<module>mod_authz_owner</module> $B$,;HMQ$5$l$?$H$-$O!"(B
$B%"%/%;%9$O5qH]$5$l$^$9!#(B</p>
<note><title></title>
<p>ファイルシステムに実際には存在しないリソース
(<em>つまり</em> バーチャルなリソース) の承認に
<module>mod_authz_owner</module> が使用されたときは、
アクセスは拒否されます。</p>
<p>$BFC$K!"(B<a
href="../content-negotiation.html#multiviews">$B%3%s%F%s%H(B
$B%M%4%7%(!<%7%g%s$5$l$?(B"MultiViews"</a> $B$N%j%=!<%9$O(B
$B7h$7$F>5G'$7$^$;$s!#(B</p>
<p>特に、<a
href="../content-negotiation.html#multiviews">コンテント
ネゴシエーションされた"MultiViews"</a> のリソースは
決して承認しません。</p>
</note>
</summary>
<seealso><directive module="core">Require</directive></seealso>
<seealso><directive module="core">Satisfy</directive></seealso>
<section id="examples"><title>$B@_DjNc(B</title>
<section id="examples"><title>設定例</title>
<section id="examples.file-owner"><title>Require file-owner</title>
<p>$BJ#?t%f!<%6$N%7%9%F%`$G(B Apache $B%&%'%V%5!<%P$,<B9T$5$l$F$$$F!"(B
<code>~/public_html/private</code> $B$K3F%f!<%6$,%U%!%$%k$rCV$$$F$$$k$H$7$^$9!#(B
<p>複数ユーザのシステムで Apache ウェブサーバが実行されていて、
<code>~/public_html/private</code> に各ユーザがファイルを置いているとします。
<directive module="mod_authn_dbm">AuthDBMUserFile</directive>
$B%G!<%?%Y!<%9$,0l$D$@$1$"$j!"$9$Y$F$N%&%'%V%f!<%6L>$,Ns5s$5$l$F$*$j!"(B
$B$3$N%f!<%6L>$,%5!<%P$G<B:]$K%U%!%$%k$r=jM-$7$F$$$k%f!<%6L>$H0lCW$7$F$$$k>l9g!"(B
$B<!$N@a$N$h$&$J@_Dj$G!"%f!<%6$,<+J,<+?H$N%U%!%$%k$K%"%/%;%9$G$-$k$h$&$K$J$j$^$9!#(B
<code>/home/smith/public_html/private</code> $B$NCf$N%U%!%$%k$O!"=jM-<T$,(B
<code>smith</code> $B$NBe$o$j$K(B <code>jones</code> $B$K$J$C$F$$$J$$8B$j!"(B
<code>jones</code> $B$K$O%"%/%;%9$O5v2D$5$l$^$;$s!#(B</p>
データベースが一つだけあり、すべてのウェブユーザ名が列挙されており、
このユーザ名がサーバで実際にファイルを所有しているユーザ名と一致している場合、
次の節のような設定で、ユーザが自分自身のファイルにアクセスできるようになります。
<code>/home/smith/public_html/private</code> の中のファイルは、所有者が
<code>smith</code> の代わりに <code>jones</code> になっていない限り、
<code>jones</code> にはアクセスは許可されません。</p>
<example>
&lt;Directory /home/*/public_html/private&gt;<br />
@@ -103,16 +103,16 @@
</section>
<section id="examples.file-group"><title>Require file-group</title>
<p>$B>e5-$N$h$&$J%7%9%F%`$G!"?t?M$N%f!<%6$,%W%m%8%'%/%H$N%U%!%$%k$r(B
<code>~/public_html/project-foo</code> $B$G6&M-$7$F$$$k$H$7$^$9!#(B
$B%U%!%$%k$O%7%9%F%`$N%0%k!<%W(B <code>foo</code> $B$K=jM-$5$l$F$$$F!"(B
<p>上記のようなシステムで、数人のユーザがプロジェクトのファイルを
<code>~/public_html/project-foo</code> で共有しているとします。
ファイルはシステムのグループ <code>foo</code> に所有されていて、
<directive module="mod_authz_dbm">AuthDBMGroupFile</directive>
$B%G!<%?%Y!<%9$,0l$D$@$1$"$j!"$=$3$K$9$Y$F$N%&%'%V%f!<%6L>$H(B
$B%0%k!<%W$N%a%s%P$,Ns5s$5$l$F$$$k!"(B<em>$B$D$^$j(B</em>$B!"$=$l$i$N(B
$B%f!<%6$O>/$J$/$H$b(B <code>foo</code> $B$H$$$&%0%k!<%W$KB0$7$F$$$k!"$H$7$^$9!#(B
<code>jones</code> $B$H(B<code>smith</code> $B$NFs?M6&$,%0%k!<%W(B
<code>foo</code> $B$N%a%s%P$G$"$k>l9g!"$I$A$i$N?M$bN>J}$N(B
<code>project-foo</code> $B$K%"%/%;%9$,5v2D$5$l$^$9!#(B</p>
データベースが一つだけあり、そこにすべてのウェブユーザ名と
グループのメンバが列挙されている、<em>つまり</em>、それらの
ユーザは少なくとも <code>foo</code> というグループに属している、とします。
<code>jones</code> <code>smith</code> の二人共がグループ
<code>foo</code> のメンバである場合、どちらの人も両方の
<code>project-foo</code> にアクセスが許可されます。</p>
<example>
&lt;Directory /home/*/public_html/project-foo&gt;<br />
@@ -135,7 +135,7 @@
<directivesynopsis>
<name>AuthzOwnerAuthoritative</name>
<description>$B>5G'$,2<0L>5G'%b%8%e!<%k$KEO$5$l$k$+$I$&$+$r@_Dj$9$k(B</description>
<description>承認が下位承認モジュールに渡されるかどうかを設定する</description>
<syntax>AuthzOwnerAuthoritative On|Off</syntax>
<default>AuthzOwnerAuthoritative On</default>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -143,26 +143,26 @@
<override>AuthConfig</override>
<usage>
<p><directive>AuthzOwnerAuthoritative</directive> $B%G%#%l%/%F%#%V$r(B
$BL@<(E*$K(B <code>Off</code> $B$K@_Dj$9$k$H!"0J2<$N>l9g$KG'>Z$,(B
(<code>modules.c</code> $B$GDj5A$5$l$F$$$k(B) $B2<0L$N%b%8%e!<%k$K(B
$BEO$5$l$k$h$&$K$7$^$9(B:</p>
<p><directive>AuthzOwnerAuthoritative</directive> ディレクティブを
明示的に <code>Off</code> に設定すると、以下の場合に認証が
(<code>modules.c</code> で定義されている) 下位のモジュールに
渡されるようにします:</p>
<ul>
<li><code>file-owner</code> $B$N>l9g$O!"Ds6!$5$l$?%&%'%V%f!<%6L>$K(B
$B%U%!%$%k%7%9%F%`$N=jM-<T$,0lCW$7$J$$$+!"=jM-<T$,$o$+$i$J$$>l9g!#(B</li>
<li><code>file-owner</code> の場合は、提供されたウェブユーザ名に
ファイルシステムの所有者が一致しないか、所有者がわからない場合。</li>
<li><code>file-group</code> $B$N>l9g$O!"Ds6!$5$l$?%&%'%V%f!<%6L>$,(B
$B%U%!%$%k%7%9%F%`%0%k!<%W$KB8:_$7$J$$$+!"$o$+$i$J$$>l9g!#(B</li>
<li><code>file-group</code> の場合は、提供されたウェブユーザ名が
ファイルシステムグループに存在しないか、わからない場合。</li>
</ul>
<p>$BCM$r(B <code>Off</code> $B$K@_Dj$9$k$H!"(B<code>file-owner</code> $B$H(B
<code>file-group</code> $B$rAH$_9g$o$;$k$3$H$b$G$-$k$h$&$K$J$j!"(B
$B$=$N>l9g$O$I$A$i$+(B ($BN>J}$G$b(B) $B$K%^%C%A$7$?>l9g$K%"%/%;%9$r5v2D$5$l$^$9!#(B</p>
<p>値を <code>Off</code> に設定すると、<code>file-owner</code>
<code>file-group</code> を組み合わせることもできるようになり、
その場合はどちらか (両方でも) にマッチした場合にアクセスを許可されます。</p>
<p>$B%G%U%)%k%H$G$O@)8f$OEO$5$l$:!"L$CN$N%0%k!<%W$N>l9g$O(B Authentication
Required $B1~Ez$,JV$5$l$^$9!#$G$9$+$i!"(B<code>Off</code> $B$K@_Dj$7$J$$$3$H$G(B
$B%7%9%F%`$r0BA4$KJ]$D$3$H$,$G$-!"(BNCSA $B8_49$N?6$kIq$$$r$5$;$k$3$H$K$J$j$^$9!#(B</p>
<p>デフォルトでは制御は渡されず、未知のグループの場合は Authentication
Required 応答が返されます。ですから、<code>Off</code> に設定しないことで
システムを安全に保つことができ、NCSA 互換の振る舞いをさせることになります。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:635137 (outdated) -->
@@ -23,27 +23,27 @@
<modulesynopsis metafile="mod_authz_user.xml.meta">
<name>mod_authz_user</name>
<description>$B%f!<%6>5G'(B</description>
<description>ユーザ承認</description>
<status>Base</status>
<sourcefile>mod_authz_user.c</sourcefile>
<identifier>authz_user_module</identifier>
<compatibility>Apache 2.1 $B0J9_$G;HMQ2DG=(B</compatibility>
<compatibility>Apache 2.1 以降で使用可能</compatibility>
<summary>
<p>$B$3$N%b%8%e!<%k$O!"G'>Z$5$l$?%f!<%6$K%&%'%V%5%$%H$N0lIt$X$N(B
$B%"%/%;%9$r5v2D$7$?$j5qH]$7$?$j$9$k$?$a$N>5G'5!G=$rDs6!$7$^$9!#(B
<module>mod_authz_user</module> $B$OG'>Z$5$l$?%f!<%6$,(B
<code>Require user</code> $B%G%#%l%/%F%#%V$K=q$+$l$F$$$l$P(B
$B%"%/%;%9$rG'$a$^$9!#G'>Z$K@.8y$7$?%f!<%6$9$Y$F$K%"%/%;%9$r(B
$B5v2D$9$k$K$O!"Be$o$j$K(B <code>require valid-user</code> $B$r(B
$B;H$&$3$H$,$G$-$^$9!#(B</p>
<p>このモジュールは、認証されたユーザにウェブサイトの一部への
アクセスを許可したり拒否したりするための承認機能を提供します。
<module>mod_authz_user</module> は認証されたユーザが
<code>Require user</code> ディレクティブに書かれていれば
アクセスを認めます。認証に成功したユーザすべてにアクセスを
許可するには、代わりに <code>require valid-user</code>
使うことができます。</p>
</summary>
<seealso><directive module="core">Require</directive></seealso>
<seealso><directive module="core">Satisfy</directive></seealso>
<directivesynopsis>
<name>AuthzUserAuthoritative</name>
<description>$B>5G'$,2<0L$N%b%8%e!<%k$KEO$5$l$k$+$I$&$+$r@_Dj$9$k(B</description>
<description>承認が下位のモジュールに渡されるかどうかを設定する</description>
<syntax>AuthzUserAuthoritative On|Off</syntax>
<default>AuthzUserAuthoritative On</default>
<contextlist><context>directory</context><context>.htaccess</context>
@@ -51,15 +51,15 @@
<override>AuthConfig</override>
<usage>
<p><directive>AuthzUserAuthoritative</directive> $B%G%#%l%/%F%#%V$r(B
$BL@<(E*$K(B <code>Off</code> $B$K@_Dj$9$k$H(B userID $B$KBP1~$9$k(B
<strong>$B%0%k!<%W$,$J$$>l9g$K(B</strong>$B!"(B
(<code>module.c</code> $B$GDj5A$5$l$F$$$k(B) $B2<0L$N%b%8%e!<%k$K%0%k!<%W>5G'$r(B
$BEO$9$3$H$r5v2D$7$^$9!#(B</p>
<p><directive>AuthzUserAuthoritative</directive> ディレクティブを
明示的に <code>Off</code> に設定すると userID に対応する
<strong>グループがない場合に</strong>
(<code>module.c</code> で定義されている) 下位のモジュールにグループ承認を
渡すことを許可します。</p>
<p>$B%G%U%)%k%H$G$O@)8f$OEO$5$l$:!"L$CN$N%0%k!<%W$N>l9g$O(B Authentication
Required $B1~Ez$,JV$5$l$^$9!#$G$9$+$i!"$3$l$r@_Dj$7$J$$$H(B
$B%7%9%F%`$r0BA4$KJ]$D$3$H$,$G$-!"(BNCSA $B8_49$N?6$kIq$$$r$5$;$k$3$H$K$J$j$^$9!#(B</p>
<p>デフォルトでは制御は渡されず、未知のグループの場合は Authentication
Required 応答が返されます。ですから、これを設定しないと
システムを安全に保つことができ、NCSA 互換の振る舞いをさせることになります。</p>
</usage>
</directivesynopsis>

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:504183 (outdated) -->
@@ -23,44 +23,44 @@
<modulesynopsis metafile="mod_cache.xml.meta">
<name>mod_cache</name>
<description>URI $B$r%-!<$K$7$?%3%s%F%s%D$N%-%c%C%7%e(B</description>
<description>URI をキーにしたコンテンツのキャッシュ</description>
<status>Extension</status>
<sourcefile>mod_cache.c</sourcefile>
<identifier>cache_module</identifier>
<summary>
<note type="warning">
$B$3$l$O<B83E*$J%b%8%e!<%k$G$9!#J8=q$b$^$@3+H/Cf$G$9(B...
これは実験的なモジュールです。文書もまだ開発中です...
</note>
<p><module>mod_cache</module> $B$O%m!<%+%k$N%3%s%F%s%D$d%W%m%-%7$5$l$?(B
$B%3%s%F%s%D$r%-%c%C%7%e$9$k$?$a$K;H$o$l$k(B <a
href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> $B=`5r$N(B
HTTP $B%3%s%F%s%D%-%c%C%7%e$r<BAu$7$F$$$^$9!#(B<module>mod_cache</module>
$B$NF0:n$K$O%9%H%l!<%8$r4IM}$9$k%b%8%e!<%k$,I,MW$G$9!#I8=`(B
Apache $BG[I[$K$OFs$D%9%H%l!<%84IM}%b%8%e!<%k$,4^$^$l$F$$$^$9(B:</p>
<p><module>mod_cache</module> はローカルのコンテンツやプロキシされた
コンテンツをキャッシュするために使われる <a
href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> 準拠の
HTTP コンテンツキャッシュを実装しています。<module>mod_cache</module>
の動作にはストレージを管理するモジュールが必要です。標準
Apache 配布には二つストレージ管理モジュールが含まれています:</p>
<dl>
<dt><module>mod_disk_cache</module></dt>
<dd>$B%G%#%9%/$r;HMQ$7$?%9%H%l!<%84IM}5!9=$r<BAu$7$F$$$^$9!#(B</dd>
<dd>ディスクを使用したストレージ管理機構を実装しています。</dd>
<dt><module>mod_mem_cache</module></dt>
<dd>$B%a%b%j$r;HMQ$7$?%9%H%l!<%84IM}5!9=$r<BAu$7$F$$$^$9!#(B
<module>mod_mem_cache</module> $B$O<!$NFs$D$N%b!<%I$N$I$A$i$+$GF0:n$9$k(B
$B$h$&$K@_Dj$G$-$^$9(B: $B%*!<%W%s$5$l$F$$$k%U%!%$%k5-=R;R$r%-%c%C%7%e$9$k%b!<%I$+!"(B
$B%R!<%W>e$G$N%*%V%8%'%/%H$N<+BN$r%-%c%C%7%e$r$9$k%b!<%I$G$9!#(B
<module>mod_mem_cache</module> $B$O%m!<%+%k$G@8@.$5$l$k%3%s%F%s%D$d!"(B
<module>mod_proxy</module> $B$,(B
<directive module="mod_proxy">ProxyPass</directive> $B$r;H$C$F@_Dj$5$l$F$$$k(B
$B$H$-$N(B ($B$D$^$j(B<dfn>$B%j%P!<%9%W%m%-%7(B</dfn> $B$G$N(B) $B%P%C%/%(%s%I%5!<%P$N(B
$B%3%s%F%s%D$r%-%c%C%7%e$9$k$N$K;H$($^$9!#(B</dd>
<dd>メモリを使用したストレージ管理機構を実装しています。
<module>mod_mem_cache</module> は次の二つのモードのどちらかで動作する
ように設定できます: オープンされているファイル記述子をキャッシュするモードか、
ヒープ上でのオブジェクトの自体をキャッシュをするモードです。
<module>mod_mem_cache</module> はローカルで生成されるコンテンツや、
<module>mod_proxy</module>
<directive module="mod_proxy">ProxyPass</directive> を使って設定されている
ときの (つまり<dfn>リバースプロキシ</dfn> での) バックエンドサーバの
コンテンツをキャッシュするのに使えます。</dd>
</dl>
<p>$B%3%s%F%s%D$N%-%c%C%7%e$X$NJ]B8$H<hF@$O(B URI $B$K4p$E$$$?%-!<$,;H$o$l$^$9!#(B
$B%"%/%;%9J]8n$N$+$1$i$l$F$$$k%3%s%F%s%D$O%-%c%C%7%e$5$l$^$;$s!#(B</p>
<p>コンテンツのキャッシュへの保存と取得は URI に基づいたキーが使われます。
アクセス保護のかけられているコンテンツはキャッシュされません。</p>
</summary>
<section id="related"><title>$B4XO"%b%8%e!<%k$H%G%#%l%/%F%#%V(B</title>
<section id="related"><title>関連モジュールとディレクティブ</title>
<related>
<modulelist>
<module>mod_disk_cache</module>
@@ -83,7 +83,7 @@
</related>
</section>
<section id="sampleconf"><title>$B%5%s%W%k@_Dj(B</title>
<section id="sampleconf"><title>サンプル設定</title>
<example><title>Sample httpd.conf</title>
#<br />
# Sample Cache Configuration<br />
@@ -121,30 +121,30 @@
<directivesynopsis>
<name>CacheEnable</name>
<description>$B;XDj$7$?%9%H%l!<%84IM}J}<0$r;H$C$F$N%-%c%C%7%e$rM-8z$K$9$k(B</description>
<description>指定したストレージ管理方式を使ってのキャッシュを有効にする</description>
<syntax>CacheEnable <var>cache_type</var> <var>url-string</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p><directive>CacheEnable</directive> $B%G%#%l%/%F%#%V$G(B <module>mod_cache</module>
$B%b%8%e!<%k$,(B <var>url-string</var> $B0J2<$N(B URL $B$r%-%c%C%7%e$9$k$h$&$K$7$^$9!#(B
$B%-%c%C%7%e%9%H%l!<%84IM}J}<0$O(B <var>cache_type</var> $B0z?t$G;XDj$7$^$9!#(B
<var>cache_type</var> <code> mem</code> $B$G!"(B
<module>mod_mem_cache</module> $B$G<BAu$5$l$F$$$k%a%b%j$r;H$C$?%9%H%l!<%8(B
$B4IM}J}<0$r;H$&$h$&$K(B <module>mod_cache</module> $B$K;X<($7$^$9!#(B
<var>cache_type</var> <code>disk</code> $B$G!"(B
<module>mod_disk_cache</module> $B$G<BAu$5$l$F$$$k%G%#%9%/$r;H$C$?%9%H%l!<%8(B
$B4IM}$r;H$&$h$&$K(B <module>mod_cache</module> $B$K;X<($7$^$9!#(B
<var>cache_type</var> <code>fd</code> $B$O(B <module>mod_cache</module> $B$K(B
<module>mod_mem_cache</module> $B$K$h$j<BAu$5$l$F$$$k%U%!%$%k5-=R;R$N(B
$B%-%c%C%7%e$r;H$&$h$&$K;X<($7$^$9!#(B</p>
<p><directive>CacheEnable</directive> ディレクティブで <module>mod_cache</module>
モジュールが <var>url-string</var> 以下の URL をキャッシュするようにします。
キャッシュストレージ管理方式は <var>cache_type</var> 引数で指定します。
<var>cache_type</var> <code> mem</code> で、
<module>mod_mem_cache</module> で実装されているメモリを使ったストレージ
管理方式を使うように <module>mod_cache</module> に指示します。
<var>cache_type</var> <code>disk</code> で、
<module>mod_disk_cache</module> で実装されているディスクを使ったストレージ
管理を使うように <module>mod_cache</module> に指示します。
<var>cache_type</var> <code>fd</code> <module>mod_cache</module>
<module>mod_mem_cache</module> により実装されているファイル記述子の
キャッシュを使うように指示します。</p>
<p>($B2<$NNc$N$h$&$K(B) <directive>CacheEnable</directive> $B%G%#%l%/%F%#%V$N(B
URL $B6u4V$,=EJ#$7$F$$$k$H$-$O!"3:Ev$9$k%9%H%l!<%8J}<0$r=g$K;n$7$F!"(B
$B<B:]$K%j%/%(%9%H$N=hM}$,$G$-$k$H!"$=$NJ}<0$G=hM}$7$^$9!#(B
$B%9%H%l!<%84IM}J}<0$,<B9T$5$l$k=gHV$O@_Dj%U%!%$%kCf$N(B
<directive>CacheEnable</directive> $B$N=gHV$K$h$j7hDj$5$l$^$9!#(B</p>
<p>(下の例のように) <directive>CacheEnable</directive> ディレクティブの
URL 空間が重複しているときは、該当するストレージ方式を順に試して、
実際にリクエストの処理ができると、その方式で処理します。
ストレージ管理方式が実行される順番は設定ファイル中の
<directive>CacheEnable</directive> の順番により決定されます。</p>
<example>
CacheEnable mem /manual<br />
@@ -156,17 +156,17 @@
<directivesynopsis>
<name>CacheDisable</name>
<description>$BFCDj$N(B URL $B$r%-%c%C%7%e$7$J$$(B</description>
<description>特定の URL をキャッシュしない</description>
<syntax>CacheDisable <var> url-string</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p><directive>CacheDisable</directive> $B%G%#%l%/%F%#%V$G(B
<module>mod_cache</module> $B%b%8%e!<%k$,(B <var>url-string</var> $B0J2<$N(B
URL $B$r%-%c%C%7%e(B<em>$B$7$J$$(B</em>$B$h$&$K$7$^$9!#(B</p>
<p><directive>CacheDisable</directive> ディレクティブで
<module>mod_cache</module> モジュールが <var>url-string</var> 以下の
URL をキャッシュ<em>しない</em>ようにします。</p>
<example><title>$BNc(B</title>
<example><title></title>
CacheDisable /local_files
</example>
</usage>
@@ -174,18 +174,18 @@
</directivesynopsis>
<directivesynopsis>
<name>CacheMaxExpire</name>
<description>$B%I%-%e%a%s%H$r%-%c%C%7%e$9$k:GBg;~4V$rIC?t$G8=$7$?$b$N(B</description>
<description>ドキュメントをキャッシュする最大時間を秒数で現したもの</description>
<syntax>CacheMaxExpire <var>seconds</var></syntax>
<default>CacheMaxExpire 86400 ($B0lF|(B)</default>
<default>CacheMaxExpire 86400 (一日)</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p><directive>CacheMaxExpire</directive> $B%G%#%l%/%F%#%V$O!"(B
$B%-%c%C%7%e$9$k(B HTTP $B%I%-%e%a%s%H$r!"85$N%5!<%P$KLd$$9g$o$;$J$$$^$^:GBg2?IC(B
$BJ];}$7$F$b$h$$$+$r;XDj$7$^$9!#$D$^$j!"%I%-%e%a%s%H$O:GBg$G$3$NIC?t4V$V$s8E$/(B
$B$J$k$3$H$K$J$j$^$9!#$3$N:GBgCM$O!"(B($BLuCm(B:$B%l%9%]%s%9Cf$G(B)$B%I%-%e%a%s%H$H6&$K(B
$B%I%-%e%a%s%H$N4|F|$,Ds6!$5$l$F$$$k>l9g$G$bE,MQ$5$l$^$9!#(B</p>
<p><directive>CacheMaxExpire</directive> ディレクティブは、
キャッシュする HTTP ドキュメントを、元のサーバに問い合わせないまま最大何秒
保持してもよいかを指定します。つまり、ドキュメントは最大でこの秒数間ぶん古く
なることになります。この最大値は、(訳注:レスポンス中で)ドキュメントと共に
ドキュメントの期日が提供されている場合でも適用されます。</p>
<example>
CacheMaxExpire 604800
@@ -195,17 +195,17 @@
<directivesynopsis>
<name>CacheDefaultExpire</name>
<description>$B4|F|$,;XDj$5$l$F$$$J$$$H$-$K%I%-%e%a%s%H$r%-%c%C%7%e$9$k%G%U%)%k%H$N4|4V(B</description>
<description>期日が指定されていないときにドキュメントをキャッシュするデフォルトの期間</description>
<syntax>CacheDefaultExpire <var>seconds</var></syntax>
<default>CacheDefaultExpire 3600 (1$B;~4V(B)</default>
<default>CacheDefaultExpire 3600 (1時間)</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p><directive>CacheDefaultExpire</directive> $B%G%#%l%/%F%#%V$O!"%I%-%e%a%s%H$K(B
$BM-8z4|8B(B (expiry) $B$d:G=*=$@5;~9o(B (last-modified) $B$,;XDj$5$l$F$$$J$$>l9g$N(B
$B%G%U%)%k%H$N;~4V$r;XDj$7$^$9!#(B<directive>CacheMaxExpire</directive>
$B%G%#%l%/%F%#%V$G;XDj$5$l$?CM$O$3$N@_Dj$r>e=q$-(B<em>$B$7$^$;$s(B</em>$B!#(B</p>
<p><directive>CacheDefaultExpire</directive> ディレクティブは、ドキュメントに
有効期限 (expiry) や最終修正時刻 (last-modified) が指定されていない場合の
デフォルトの時間を指定します。<directive>CacheMaxExpire</directive>
ディレクティブで指定された値はこの設定を上書き<em>しません</em>。</p>
<example>
CacheDefaultExpire 86400
@@ -215,21 +215,21 @@
<directivesynopsis>
<name>CacheIgnoreNoLastMod</name>
<description>$B1~Ez$K(B Last Modified $B$,L5$/$F$b5$$K$7$J$$$h$&$K$9$k(B</description>
<description>応答に Last Modified が無くても気にしないようにする</description>
<syntax>CacheIgnoreNoLastMod On|Off</syntax>
<default>CacheIgnoreNoLastMod Off</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p>$BDL>o!"(BLast-Modified $B$K$h$k:G=*=$@5;~9o$NL5$$%I%-%e%a%s%H$O%-%c%C%7%e(B
$B$5$l$^$;$s!#(B($BNc$($P(B <module>mod_include</module> $B$K$h$k=hM}$N$H$-$J$I$K(B)
Last-Modified $B;~9o$,>C5n$5$l$?$j!"$=$b$=$b:G=i$+$iDs6!$5$l$F$$$J$$(B
$B>u67$,$"$j$^$9!#(B<directive>CacheIgnoreNoLastMod</directive>
$B%G%#%l%/%F%#%V$r;H$&$H!"(BLast-Modified $BF|;~$,;XDj$5$l$F$$$J$$(B
$B%I%-%e%a%s%H$G$b%-%c%C%7%e$9$k$h$&$K;XDj$G$-$^$9!#%I%-%e%a%s%H$K(B
$B:G=*=$@5;~9o(B (Last-Modified) $BM-8z4|8B(B (expiry) $B$,$J$$>l9g$O!"M-8z4|8B$N(B
$B@8@.$K(B <directive>CacheDefaultExpire</directive> $B$,;H$o$l$^$9!#(B</p>
<p>通常、Last-Modified による最終修正時刻の無いドキュメントはキャッシュ
されません。(例えば <module>mod_include</module> による処理のときなどに)
Last-Modified 時刻が消去されたり、そもそも最初から提供されていない
状況があります。<directive>CacheIgnoreNoLastMod</directive>
ディレクティブを使うと、Last-Modified 日時が指定されていない
ドキュメントでもキャッシュするように指定できます。ドキュメントに
最終修正時刻 (Last-Modified) 有効期限 (expiry) がない場合は、有効期限の
生成に <directive>CacheDefaultExpire</directive> が使われます。</p>
<example>
CacheIgnoreNoLastMod On
@@ -239,31 +239,31 @@
<directivesynopsis>
<name>CacheIgnoreCacheControl</name>
<description>$B%-%c%C%7%e$5$l$F$$$k%3%s%F%s%D$rJV$5$J$$$h$&$K%/%i%$%"%s%H$+$i(B
$B%j%/%(%9%H$5$l$F$bL5;k$9$k(B</description>
<description>キャッシュされているコンテンツを返さないようにクライアントから
リクエストされても無視する</description>
<syntax>CacheIgnoreCacheControl On|Off</syntax>
<default>CacheIgnoreCacheControl Off</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p>Cache-Control: no-cache $B%X%C%@$d(B Pragma: no-store $B%X%C%@$N$"$k%j%/%(%9%H$K(B
$BBP$7$F$O!"DL>o%-%c%C%7%e$r;H$$$^$;$s!#(B<directive>CacheIgnoreCacheControl</directive>
$B%G%#%l%/%F%#%V$r;H$&$H!"$3$NF0:n$r>e=q$-$G$-$^$9!#(B
<directive>CacheIgnoreCacheControl</directive> On $B$H$9$k$H!"(B
$B%j%/%(%9%H$K(B no-cache $B$H$$$&CM$,$"$C$F$b!"%-%c%C%7%e$r;H$C$F%I%-%e%a%s%H$r(B
$BJV$9$h$&$K$J$j$^$9!#G'>Z$rI,MW$H$9$k%I%-%e%a%s%H$O(B<em>$B7h$7$F(B</em>
$B%-%c%C%7%e$5$l$^$;$s!#(B</p>
<p>Cache-Control: no-cache ヘッダや Pragma: no-store ヘッダのあるリクエストに
対しては、通常キャッシュを使いません。<directive>CacheIgnoreCacheControl</directive>
ディレクティブを使うと、この動作を上書きできます。
<directive>CacheIgnoreCacheControl</directive> On とすると、
リクエストに no-cache という値があっても、キャッシュを使ってドキュメントを
返すようになります。認証を必要とするドキュメントは<em>決して</em>
キャッシュされません。</p>
<example>
CacheIgnoreCacheControl On
</example>
<note type="warning"><title>$B7Y9p(B</title>
$B$3$N%G%#%l%/%F%#%V$r;H$&$H!"%I%-%e%a%s%H<hF@;~$K%-%c%C%7%e$r;H$o$J$$$h$&$K(B
$B%/%i%$%"%s%H$,%j%/%(%9%H$7$F$$$k$K$b$+$+$o$i$:!"%-%c%C%7%e$r(B
$B;H$&$h$&$K$J$j$^$9!#$=$N7k2L!"(B
$B8E$$%3%s%F%s%D$,Aw$i$lB3$1$k$3$H$K$J$C$F$7$^$&$+$b$7$l$^$;$s!#(B
<note type="warning"><title>警告</title>
このディレクティブを使うと、ドキュメント取得時にキャッシュを使わないように
クライアントがリクエストしているにもかかわらず、キャッシュを
使うようになります。その結果、
古いコンテンツが送られ続けることになってしまうかもしれません。
</note>
</usage>
<seealso><directive module="mod_cache">CacheStorePrivate</directive></seealso>
@@ -272,8 +272,8 @@
<directivesynopsis>
<name>CacheLastModifiedFactor</name>
<description>LastModified $B$NF|IU$K4p$E$$$FM-8z4|8B(B (expiry)
$B$r7W;;$9$k$?$a$N=E$_$r;XDj$9$k(B
<description>LastModified の日付に基づいて有効期限 (expiry)
を計算するための重みを指定する
</description>
<syntax>CacheLastModifiedFactor <var>float</var></syntax>
<default>CacheLastModifiedFactor 0.1</default>
@@ -281,24 +281,24 @@
</contextlist>
<usage>
<p>$B%I%-%e%a%s%H$K(B Last-Modified $B$NF|IU$,L5$$$1$l$I$bM-8z4|8B(B (expiry)
$B$NF|IU$,$"$k$H$$$&$H$-$K!"M-8z4|8B$r:G=*=$@5;~9o$+$i$N7P2a;~4V$H$7$F(B
$B7W;;$9$k$h$&$K$G$-$^$9!#M-8z4|8B$r<!$N7W;;<0$K=>$C$F@8@.$9$k$N$G$9$,!"(B
$B$=$N$H$-$K;H$o$l$k(B <var>factor</var> $B$r(B
<directive>CacheLastModifiedFactor</directive> $B%G%#%l%/%F%#%V$G;XDj$7$^$9!#(B
<p>ドキュメントに Last-Modified の日付が無いけれども有効期限 (expiry)
の日付があるというときに、有効期限を最終修正時刻からの経過時間として
計算するようにできます。有効期限を次の計算式に従って生成するのですが、
そのときに使われる <var>factor</var>
<directive>CacheLastModifiedFactor</directive> ディレクティブで指定します。
</p>
<p><code>expiry-period = time-since-last-modified-date * <var>factor</var>
expiry-date = current-date + expiry-period</code></p>
<p>$BNc$($P!"%I%-%e%a%s%H$,(B 10 $B;~4VA0$K:G8e$K=$@5$5$l$F$$$F!"(B
<var>factor</var> $B$,(B 0.1 $B$G$"$l$P!"4|F|$O(B 10*0.1 = 1 $B;~4V$K(B
$B@_Dj$5$l$^$9!#8=:_;~9o$,(B 3:00pm $B$G$"$l$P!"7W;;$5$l$?4|F|$O(B
3:00pm + 1hour = 4:00pm $B$K$J$j$^$9!#(B</p>
<p>例えば、ドキュメントが 10 時間前に最後に修正されていて、
<var>factor</var> が 0.1 であれば、期日は 10*0.1 = 1 時間に
設定されます。現在時刻が 3:00pm であれば、計算された期日は
3:00pm + 1hour = 4:00pm になります。</p>
<p>$B4|F|$,(B <directive>CacheMaxExpire</directive> $B$G@_Dj$5$l$F$$$kCM(B
$B$h$jBg$-$/$J$C$F$7$^$C$F$$$k>l9g$O!"(B<directive>CacheMaxExpire</directive>
$B$N@_DjCM$,M%@h$5$l$^$9!#(B</p>
<p>期日が <directive>CacheMaxExpire</directive> で設定されている値
より大きくなってしまっている場合は、<directive>CacheMaxExpire</directive>
の設定値が優先されます。</p>
<example>
CacheLastModifiedFactor 0.5
@@ -308,7 +308,7 @@
<directivesynopsis>
<name>CacheIgnoreHeaders</name>
<description>$B;XDj$5$l$?(B HTTP $B%X%C%@$r%-%c%C%7%e$KJ]B8$7$J$$!#(B
<description>指定された HTTP ヘッダをキャッシュに保存しない。
</description>
<syntax>CacheIgnoreHeaders <var>header-string</var> [<var>header-string</var>] ...</syntax>
<default>CacheIgnoreHeaders None</default>
@@ -316,10 +316,10 @@
</contextlist>
<usage>
<p>RFC 2616 $B$K$h$k$H!"(Bhop-by-hop HTTP $B%X%C%@$O%-%c%C%7%e$K$OJ]4I$5$l$^$;$s!#(B
$B0J2<$N%X%C%@$O(B hop-by-hop $B%X%C%@$K3:Ev$7$^$9$N$G!"(B
<p>RFC 2616 によると、hop-by-hop HTTP ヘッダはキャッシュには保管されません。
以下のヘッダは hop-by-hop ヘッダに該当しますので、
<directive>CacheIgnoreHeaders</directive>
$B$N@_Dj$K(B<em>$B4X78$J$/(B</em>$B%-%c%C%7%e$K$OJ]4I$5$l$^$;$s(B:</p>
の設定に<em>関係なく</em>キャッシュには保管されません:</p>
<ul>
<li><code>Connection</code></li>
<li><code>Keep-Alive</code></li>
@@ -331,58 +331,58 @@
<li><code>Upgrade</code></li>
</ul>
<p><directive>CacheIgnoreHeaders</directive> $B$G(B
$B%-%c%C%7%e$KJ]4I$7$J$$DI2C$N(B HTTP $B%X%C%@$r;XDj$7$^$9!#(B
$BNc$($P!"%/%C%-!<$r%-%c%C%7%e$KJ]4I$7$J$$$h$&$K$7$?J}$,$h$$>l9g$b(B
$B$"$k$G$7$g$&!#(B</p>
<p><directive>CacheIgnoreHeaders</directive>
キャッシュに保管しない追加の HTTP ヘッダを指定します。
例えば、クッキーをキャッシュに保管しないようにした方がよい場合も
あるでしょう。</p>
<p><directive>CacheIgnoreHeaders</directive> $B$N0z?t$O!"(B
$B%-%c%C%7%e$KJ]4I$7$J$$(B HTTP $B%X%C%@$r6uGr6h@Z$j$K$7$?%j%9%H7A<0$G$9!#(B
$B%-%c%C%7%e$KJ]4I$7$J$$%X%C%@$,(B hop-by-hop $B%X%C%@$@$1$N>l9g(B
(RFC 2616 $B=`5r$NF0:n$N$H$-(B) $B$O!"(B
<directive>CacheIgnoreHeaders</directive> $B$r(B <code>None</code>
$B$K@_Dj$G$-$^$9!#(B</p>
<p><directive>CacheIgnoreHeaders</directive> の引数は、
キャッシュに保管しない HTTP ヘッダを空白区切りにしたリスト形式です。
キャッシュに保管しないヘッダが hop-by-hop ヘッダだけの場合
(RFC 2616 準拠の動作のとき) は、
<directive>CacheIgnoreHeaders</directive> <code>None</code>
に設定できます。</p>
<example><title>$BNc(B 1</title>
<example><title> 1</title>
CacheIgnoreHeaders Set-Cookie
</example>
<example><title>$BNc(B 2</title>
<example><title> 2</title>
CacheIgnoreHeaders None
</example>
<note type="warning"><title>$B7Y9p(B:</title>
<code>Expires</code> $B$N$h$&$JE,@Z$N%-%c%C%7%e4IM}$N$?$a$KI,MW$J(B
$B%X%C%@$,(B <directive>CacheIgnoreHeaders</directive> $B$N@_Dj$K$h$j(B
$BJ]4I$5$l$F$$$J$$$H$-$O!"(Bmod_cache $B$NF0:n$ODj5A$5$l$F$$$^$;$s!#(B
<note type="warning"><title>警告:</title>
<code>Expires</code> のような適切のキャッシュ管理のために必要な
ヘッダが <directive>CacheIgnoreHeaders</directive> の設定により
保管されていないときは、mod_cache の動作は定義されていません。
</note>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>CacheStorePrivate</name>
<description>private $B$H;XDj$5$l$F$$$k%l%9%]%s%9$N%-%c%C%7%e$r;n$_$k!#(B</description>
<description>private と指定されているレスポンスのキャッシュを試みる。</description>
<syntax>CacheStorePrivate On|Off</syntax>
<default>CacheStorePrivate Off</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p>$BDL>o(B Cache-Control: private $B%X%C%@$N$D$$$F$$$k%l%9%]%s%9$O(B
$B%-%c%C%7%e$5$l$^$;$s!#(B<directive>CacheStorePrivate</directive>
$B%G%#%l%/%F%#%V$G$3$N5sF0$r>e=q$-$G$-$^$9!#(B
<directive>CacheStorePrivate</directive> On $B$G(B private $B%X%C%@$N$D$$$F$$$k(B
$B%j%=!<%9$KBP$7$F$b%-%c%C%7%e$r;n$_$k$h$&$K$J$j$^$9!#(B
$B$?$@$7G'>Z$N5a$a$i$l$k%j%=!<%9$O(B <em>$B7h$7$F(B</em> $B%-%c%C%7%e$5$l$^$;$s!#(B</p>
<p>通常 Cache-Control: private ヘッダのついているレスポンスは
キャッシュされません。<directive>CacheStorePrivate</directive>
ディレクティブでこの挙動を上書きできます。
<directive>CacheStorePrivate</directive> On private ヘッダのついている
リソースに対してもキャッシュを試みるようになります。
ただし認証の求められるリソースは <em>決して</em> キャッシュされません。</p>
<example>
CacheStorePrivate On
</example>
<note type="warning"><title>$B7Y9p(B:</title>
$B>eN.%5!<%P$,%-%c%C%7%e$7$J$$$h$&$K;XDj$7$F$-$F$b!"(B
$B$=$l$rL5;k$7$F%-%c%C%7%e$9$k$h$&$K$J$j$^$9!#(B
$BK>$^$7$$5sF0$K$J$k$N$O!"K\Ev$K(B 'private' $B$J%-%c%C%7%e$K$D$$$F$N$_$G$7$g$&!#(B
<note type="warning"><title>警告:</title>
上流サーバがキャッシュしないように指定してきても、
それを無視してキャッシュするようになります。
望ましい挙動になるのは、本当に 'private' なキャッシュについてのみでしょう。
</note>
</usage>
<seealso><directive module="mod_cache">CacheIgnoreCacheControl</directive></seealso>
@@ -391,30 +391,30 @@
<directivesynopsis>
<name>CacheStoreNoStore</name>
<description>no-store $B$H;XDj$5$l$F$$$k%l%9%]%s%9$N%-%c%C%7%e$r;n$_$k!#(B</description>
<description>no-store と指定されているレスポンスのキャッシュを試みる。</description>
<syntax>CacheStoreNoStore On|Off</syntax>
<default>CacheStoreNoStore Off</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p>$BDL>o(B Cache-Control: no-store $B%X%C%@$N$D$$$F$$$k%l%9%]%s%9$O(B
$B%-%c%C%7%e$5$l$^$;$s!#(B<directive>CacheStoreNoCache</directive>
$B%G%#%l%/%F%#%V$G$3$N5sF0$r>e=q$-$G$-$^$9!#(B
<directive>CacheStoreNoCache</directive> On $B$G(B no-store $B%X%C%@$N$D$$$F$$$k(B
$B%j%=!<%9$KBP$7$F$b%-%c%C%7%e$r;n$_$k$h$&$K$J$j$^$9!#(B
$B$?$@$7G'>Z$N5a$a$i$l$k%j%=!<%9$O(B <em>$B7h$7$F(B</em> $B%-%c%C%7%e$5$l$^$;$s!#(B</p>
<p>通常 Cache-Control: no-store ヘッダのついているレスポンスは
キャッシュされません。<directive>CacheStoreNoCache</directive>
ディレクティブでこの挙動を上書きできます。
<directive>CacheStoreNoCache</directive> On no-store ヘッダのついている
リソースに対してもキャッシュを試みるようになります。
ただし認証の求められるリソースは <em>決して</em> キャッシュされません。</p>
<example>
CacheStoreNoStore On
</example>
<note type="warning"><title>$B7Y9p(B:</title>
RFC 2616 $B$K5-:\$5$l$F$$$k$h$&$K(B no-store $B%G%#%l%/%F%#%V$O!"(B
"$BITCm0U$K$h$k5!L)>pJs$NO31L$d;DN1(B ($B%P%C%/%"%C%W%F!<%WEy(B) $B$rKI$0(B"
$BL\E*$G;H$o$l$^$9$,!"$3$N%*%W%7%g%s$rM-8z$K$9$k$H!"(B
$B5!L)>pJs$rJ];}$9$k$3$H$K$J$C$F$7$^$$$^$9!#(B
$B$G$9$N$G!"$3$3$G7Y9p$7$F$*$-$^$9!#(B
<note type="warning"><title>警告:</title>
RFC 2616 に記載されているように no-store ディレクティブは、
"不注意による機密情報の漏洩や残留 (バックアップテープ等) を防ぐ"
目的で使われますが、このオプションを有効にすると、
機密情報を保持することになってしまいます。
ですので、ここで警告しておきます。
</note>
</usage>
<seealso><directive module="mod_cache">CacheIgnoreCacheControl</directive></seealso>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990:558718 (outdated) -->
@@ -23,7 +23,7 @@
<modulesynopsis metafile="mod_cgi.xml.meta">
<name>mod_cgi</name>
<description>CGI $B%9%/%j%W%H$N<B9T(B</description>
<description>CGI スクリプトの実行</description>
<status>Base</status>
<sourcefile>mod_cgi.c</sourcefile>
<identifier>cgi_module</identifier>
@@ -33,132 +33,132 @@
is the link to howto/cgi not sufficient? -nd
-->
<p>Mime $B%?%$%W$,(B <code>application/x-httpd-cgi</code>
$B$G$"$k$+!"%O%s%I%i(B <code>cgi-script</code> (Apache 1.1 $B0J9_(B)
$B$,;XDj$5$l$F$$$k%U%!%$%k$O(B CGI $B%9%/%j%W%H$H$7$F07$o$l!"(B
$B%5!<%P$K$h$j<B9T$5$l!"$=$N=PNO$,%/%i%$%"%s%H$KJV$5$l$^$9!#(B
$B%U%!%$%k$O!"(B<directive module="mod_mime">AddType</directive>
$B%G%#%l%/%F%#%V$K;XDj$5$l$?(B $B3HD%;R$rL>A0$K4^$`$+!"(B
<p>Mime タイプが <code>application/x-httpd-cgi</code>
であるか、ハンドラ <code>cgi-script</code> (Apache 1.1 以降)
が指定されているファイルは CGI スクリプトとして扱われ、
サーバにより実行され、その出力がクライアントに返されます。
ファイルは、<directive module="mod_mime">AddType</directive>
ディレクティブに指定された 拡張子を名前に含むか、
<directive module="mod_alias">ScriptAlias</directive>
$B%G%#%l%/%H%j$KB8:_$9$k$3$H$K$h$j$3$N%?%$%W$K$J$j$^$9!#(B</p>
ディレクトリに存在することによりこのタイプになります。</p>
<p>$B%5!<%P$,(B CGI $B%9%/%j%W%H$r<B9T$9$k$H$-$K$O!"(B
<p>サーバが CGI スクリプトを実行するときには、
<code>DOCUMENT_ROOT</code>
$B$H8F$P$l$kJQ?t$r4D6-$KDI2C$7$^$9!#$3$NJQ?t$O(B
と呼ばれる変数を環境に追加します。この変数は
<directive module="core">DocumentRoot</directive>
$B$NCM$rJ];}$7$^$9!#(B</p>
の値を保持します。</p>
<p>Apache $B$G(B CGI $B%9%/%j%W%H$r;HMQ$9$k$?$a$N%$%s%H%m%@%/%7%g%s$O!"(B
<a href="../howto/cgi.html">CGI $B$K$h$kF0E*%3%s%F%s%D(B</a>
$B$r;2>H$7$F$/$@$5$$!#(B</p>
<p>Apache で CGI スクリプトを使用するためのイントロダクションは、
<a href="../howto/cgi.html">CGI による動的コンテンツ</a>
を参照してください。</p>
<p>Unix $B$G%^%k%A%9%l%C%I$N(B MPM $B$r;H$C$F$$$k>l9g$O!"$3$N%b%8%e!<%k$N(B
$BBe$o$j$K(B <module>mod_cgid</module> $B$r;H$&I,MW$,$"$j$^$9!#(B
$B%f!<%6%l%Y%k$G$O$3$NFs$D$N%b%8%e!<%k$OK\<AE*$K$OF10l$G$9!#(B</p>
<p>Unix でマルチスレッドの MPM を使っている場合は、このモジュールの
代わりに <module>mod_cgid</module> を使う必要があります。
ユーザレベルではこの二つのモジュールは本質的には同一です。</p>
</summary>
<seealso><directive module="core">AcceptPathInfo</directive></seealso>
<seealso><directive module="core">Options</directive></seealso>
<seealso><directive module="mod_alias">ScriptAlias</directive></seealso>
<seealso><directive module="mod_mime">AddHandler</directive></seealso>
<seealso><a href="../suexec.html">CGI $B%W%m%0%i%`$rJL$N%f!<%6(B ID $B$G<B9T$9$k(B</a></seealso>
<seealso><a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI $B5,3J=q(B</a></seealso>
<seealso><a href="../suexec.html">CGI プログラムを別のユーザ ID で実行する</a></seealso>
<seealso><a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI 規格書</a></seealso>
<section id="env"><title>CGI $B4D6-JQ?t(B</title>
<p>$B%5!<%P$O(B <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI
$B5,3J(B</a> $B$G7h$a$i$l$F$$$k(B CGI
$B4D6-JQ?t$r@_Dj$7$^$9!#0J2<$N$b$N$O!">r7oIU$-$G@_Dj$5$l$^$9!#(B</p>
<section id="env"><title>CGI 環境変数</title>
<p>サーバは <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI
規格</a> で決められている CGI
環境変数を設定します。以下のものは、条件付きで設定されます。</p>
<dl>
<dt>PATH_INFO</dt>
<dd>$B$3$l$O(B <directive module="core"
>AcceptPathInfo</directive> $B%G%#%l%/%F%#%V$,L@<(E*$K(B <code>off</code>
$B$K@_Dj$5$l$F$$$k>l9g$O@_Dj$5$l$^$;$s!#%G%U%)%k%H$N!"(B
<directive>AcceptPathInfo</directive> $B$,(B
$B;XDj$5$l$F$$$J$$$H$-$N?6$kIq$$$G$O!"(B<module>mod_cgi</module> $B$O%Q%9>pJs(B
(URI $B$N%9%/%j%W%H$N%U%!%$%kL>$N8e$KB3$/(B <code>/more/path/info</code>) $B$r(B
$B<u$1IU$1$^$9$,!"%3%"$O%5!<%P$O%Q%9>pJs$N$"$k%j%/%(%9%H$K(B
$BBP$7$F(B 404 NOT FOUND $B%(%i!<$rJV$7$^$9!#(B<directive>AcceptPathInfo</directive>
$B%G%#%l%/%F%#%V$r(B
$B>JN,$9$k$H!"(B<module>mod_cgi</module> $B$X$N%j%/%(%9%H$KBP$7$F(B
<code>On</code> $B$r(B
$B@_Dj$7$?$N$HF1$88z2L$K$J$j$^$9!#(B</dd>
<dd>これは <directive module="core"
>AcceptPathInfo</directive> ディレクティブが明示的に <code>off</code>
に設定されている場合は設定されません。デフォルトの、
<directive>AcceptPathInfo</directive>
指定されていないときの振る舞いでは、<module>mod_cgi</module> はパス情報
(URI のスクリプトのファイル名の後に続く <code>/more/path/info</code>)
受け付けますが、コアはサーバはパス情報のあるリクエストに
対して 404 NOT FOUND エラーを返します。<directive>AcceptPathInfo</directive>
ディレクティブを
省略すると、<module>mod_cgi</module> へのリクエストに対して
<code>On</code>
設定したのと同じ効果になります。</dd>
<dt>REMOTE_HOST</dt>
<dd><directive module="core">HostnameLookups</directive>
$B$,(B <code>on</code> ($B%G%U%)%k%H$G$O(B off $B$G$9(B)
$B$G!"%"%/%;%9$7$F$$$k%[%9%H$N%"%I%l%9$N(B DNS
$B$N5U0z$-$,<B:]$K%[%9%HL>$r8+$D$1$?$H$-$K$N$_@_Dj$5$l$^$9!#(B</dd>
<code>on</code> (デフォルトでは off です)
で、アクセスしているホストのアドレスの DNS
の逆引きが実際にホスト名を見つけたときにのみ設定されます。</dd>
<dt>REMOTE_IDENT</dt>
<dd><directive module="core">IdentityCheck</directive>
$B$,(B <code>on</code> $B$K@_Dj$5$l$F$$$F!"%"%/%;%9$7$F$$$k%[%9%H$,(B
ident $B%W%m%H%3%k$r%5%]!<%H$7$F$$$k$H$-$K$N$_@_Dj$5$l$^$9!#(B
$B$3$l$O4JC1$K56$k$3$H$,$G$-!"%/%i%$%"%s%H$H%5!<%P$N4V$K(B
$B%W%m%-%7$,$"$l$P$^$C$?$/Lr$KN)$?$J$$$N$G!"(B
$B$3$NJQ?t$NCM$O?.MQ$G$-$J$$$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B
<code>on</code> に設定されていて、アクセスしているホストが
ident プロトコルをサポートしているときにのみ設定されます。
これは簡単に偽ることができ、クライアントとサーバの間に
プロキシがあればまったく役に立たないので、
この変数の値は信用できないということに注意してください。
</dd>
<dt>REMOTE_USER</dt>
<dd>CGI
$B%9%/%j%W%H$KG'>Z$,I,MW$J$H$-$K$N$_@_Dj$5$l$^$9!#(B</dd>
スクリプトに認証が必要なときにのみ設定されます。</dd>
</dl>
</section>
<section id="cgi-debug"><title>CGI $B$N%G%P%C%0(B</title>
<p>CGI $B%9%/%j%W%H$N%G%P%C%0$O!"@5$7$/F0:n$7$F$$$J$$%9%/%j%W%H$N=PNO(B
($BI8=`=PNO$H%(%i!<(B)
$B$rD4$Y$k$3$H$,$G$-$J$$$?$a$K!"Fq$7$$>uBV$,B3$$$F$$$^$7$?!#(B
$B$3$l$i$N(B Apache 1.2 $B0J9_$K$"$k(B
$B%G%#%l%/%F%#%V$O$h$j>\:Y$J%(%i!<$N%m%0<}=8$rDs6!$7$^$9!#(B</p>
<section id="cgi-debug"><title>CGI のデバッグ</title>
<p>CGI スクリプトのデバッグは、正しく動作していないスクリプトの出力
(標準出力とエラー)
を調べることができないために、難しい状態が続いていました。
これらの Apache 1.2 以降にある
ディレクティブはより詳細なエラーのログ収集を提供します。</p>
<section><title>CGI $B%m%0%U%!%$%k$N=q<0(B</title>
<p>$B@_Dj$5$l$F$$$k$H$-$K$O!"(BCGI $B%(%i!<%m%0$OE,@Z$KF0:n$7$J$$$9$Y$F$N(B
CGI $B$r%m%0<}=8$7$^$9!#$=$l$>$l$N@5$7$/F0:n$7$J$$(B CGI
$B%9%/%j%W%H$O(B $BJ#?t$N9T$K$o$?$k>pJs$,%m%0<}=8$5$l$^$9!#:G=i$N(B
2 $B9T$O>o$K0J2<$N=q<0$G$9(B:</p>
<section><title>CGI ログファイルの書式</title>
<p>設定されているときには、CGI エラーログは適切に動作しないすべての
CGI をログ収集します。それぞれの正しく動作しない CGI
スクリプトは 複数の行にわたる情報がログ収集されます。最初の
2 行は常に以下の書式です:</p>
<example>
%% [<var>time</var>] <var>request-line</var><br />
%% <var>HTTP-status</var> <var>CGI-script-filename</var>
</example>
<p>$B%(%i!<$,!"(BCGI $B%9%/%j%W%H$,<B9T$G$-$J$$$H$$$&$b$N$G$"$k>l9g$O!"(B
$B%m%0%U%!%$%k$O$5$i$K$b$&(B 2 $B9T=q$+$l$^$9(B:</p>
<p>エラーが、CGI スクリプトが実行できないというものである場合は、
ログファイルはさらにもう 2 行書かれます:</p>
<example>
%%error<br />
<var>error-message</var>
</example>
<p>$B$=$&$G$O$J$/!"%(%i!<$,@5$7$/$J$$%X%C%@>pJs$rJV$97k2L$G$"$k>l9g(B
($B%9%/%j%W%H$N%P%0$G$"$k$3$H$,$h$/$"$j$^$9(B)$B!"(B
$B0J2<$N>pJs$,%m%0<}=8$5$l$^$9(B:</p>
<p>そうではなく、エラーが正しくないヘッダ情報を返す結果である場合
(スクリプトのバグであることがよくあります)、
以下の情報がログ収集されます:</p>
<example>
%request<br />
<var>$B<u$1<h$C$?$9$Y$F$N(B HTTP $B%j%/%(%9%H%X%C%@(B</var><br />
<var>($B$b$7$"$l$P(B) POST $B$d(B PUT $B$NCf?H(B</var><br />
<var>受け取ったすべての HTTP リクエストヘッダ</var><br />
<var>(もしあれば) POST や PUT の中身</var><br />
%response<br />
<var>CGI $B%9%/%j%W%H$K$h$j=PNO$5$l$?$9$Y$F$N%X%C%@(B</var><br />
<var>CGI スクリプトにより出力されたすべてのヘッダ</var><br />
%stdout<br />
<var>CGI $BI8=`=PNO(B</var><br />
<var>CGI 標準出力</var><br />
%stderr<br />
<var>CGI $BI8=`%(%i!<(B</var><br />
<var>CGI 標準エラー</var><br />
</example>
<p>($B%9%/%j%W%H$,I8=`=PNO$dI8=`%(%i!<$K2?$b=PNO$7$J$+$C$?>l9g$O!"(B
%stdout $B$d(B %stderr $B$O$"$j$^$;$s(B)$B!#(B</p>
<p>(スクリプトが標準出力や標準エラーに何も出力しなかった場合は、
%stdout %stderr はありません)。</p>
</section>
</section>
<directivesynopsis>
<name>ScriptLog</name>
<description>CGI $B%9%/%j%W%H$N%(%i!<%m%0%U%!%$%k$N>l=j(B</description>
<description>CGI スクリプトのエラーログファイルの場所</description>
<syntax>ScriptLog <var>file-path</var></syntax>
<contextlist><context>server config</context>
<context>virtual host</context>
@@ -167,40 +167,40 @@
</modulelist>
<usage>
<p><directive>ScriptLog</directive> $B%G%#%l%/%F%#%V$O(B CGI $B%9%/%j%W%H$N(B
$B%(%i!<%m%0%U%!%$%k$r@_Dj$7$^$9!#(B<directive>ScriptLog</directive> $B$,(B
$B@_Dj$5$l$F$$$J$$$H$-$O!"(B
$B%(%i!<%m%0$O:n@.$5$l$^$;$s!#@_Dj$5$l$F$$$k$H$-$O!"(BCGI
$B$N%(%i!<$O$9$Y$F0z?t$H$7$FM?$($i$l$F$$$k%U%!%$%kL>$K%m%0$5$l$^$9!#(B
$BAjBP%Q%9$G;XDj$5$l$F$$$k$H$-$O!"(B
<directive module="core">ServerRoot</directive>$B$+$i$NAjBP%Q%9$H$7$F(B
$B07$o$l$^$9!#(B</p>
<p><directive>ScriptLog</directive> ディレクティブは CGI スクリプトの
エラーログファイルを設定します。<directive>ScriptLog</directive>
設定されていないときは、
エラーログは作成されません。設定されているときは、CGI
のエラーはすべて引数として与えられているファイル名にログされます。
相対パスで指定されているときは、
<directive module="core">ServerRoot</directive>からの相対パスとして
扱われます。</p>
<example><title>$BNc(B</title>
<example><title></title>
ScriptLog logs/cgi_log
</example>
<p>$B$3$N%m%0$O;R%W%m%;%9$,<B9T$5$l$F$$$k%f!<%6$H$7$F%*!<%W%s$5$l$^$9!#(B
<em>$B$9$J$o$A(B</em>$B!"(B<directive module="mpm_commmon"
>User</directive> $B%G%#%l%/%F%#%V$G;XDj$5$l$?(B
$B%f!<%6$G$9!#$3$l$O!"%9%/%j%W%H%m%0$,=q$+$l$k%G%#%l%/%H%j$,$=$N%f!<%6$G(B
$B=q$-9~$_2DG=$+!"%9%/%j%W%H%U%!%$%k$,<jF0$G:n@.$5$l!"$=$N%f!<%6$G(B
$B=q$-9~$_2DG=$K$J$C$F$$$kI,MW$,$"$k$H$$$&$3$H$G$9!#%9%/%j%W%H%m%0$r(B
$B%"%/%;%9%m%0$J$I$N$?$a$N%m%0%G%#%l%/%H%j$K=q$+$l$k$h$&$K$7$?$H$-$O!"(B
$B$=$N%G%#%l%/%H%j$r;R%W%m%;%9$r<B9T$7$F$$$k%f!<%6$N8"8B$G(B
$B=q$-9~$_2DG=$K$O(B<strong>$B$7$J$$(B</strong>$B$h$&$K$7$F$/$@$5$$!#(B</p>
<p>このログは子プロセスが実行されているユーザとしてオープンされます。
<em>すなわち</em>、<directive module="mpm_commmon"
>User</directive> ディレクティブで指定された
ユーザです。これは、スクリプトログが書かれるディレクトリがそのユーザで
書き込み可能か、スクリプトファイルが手動で作成され、そのユーザで
書き込み可能になっている必要があるということです。スクリプトログを
アクセスログなどのためのログディレクトリに書かれるようにしたときは、
そのディレクトリを子プロセスを実行しているユーザの権限で
書き込み可能には<strong>しない</strong>ようにしてください。</p>
<p>$B%9%/%j%W%H$N%m%0<}=8$O(B CGI $B%9%/%j%W%H$r=q$/$H$-$N(B
$B%G%P%C%0MQ$N5!G=$H$7$F0U?^$5$l$F$$$F!"DL>o$N%5!<%P$G(B
$B>o$K;HMQ$5$l$k$h$&$K$O0U?^$5$l$F$$$J$$$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B
$BB.EY$d8zN($O:GE,2=$5$l$F$*$i$:!"@_7W$5$l$?0J30$NJ}K!$G;HMQ$5$l$k$H(B
$B%;%-%e%j%F%#$NLdBj$,$"$k$+$b$7$l$^$;$s!#(B</p>
<p>スクリプトのログ収集は CGI スクリプトを書くときの
デバッグ用の機能として意図されていて、通常のサーバで
常に使用されるようには意図されていないということに注意してください。
速度や効率は最適化されておらず、設計された以外の方法で使用されると
セキュリティの問題があるかもしれません。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>ScriptLogLength</name>
<description>CGI $B%9%/%j%W%H$N%m%0%U%!%$%k$NBg$-$5$N>e8B(B</description>
<description>CGI スクリプトのログファイルの大きさの上限</description>
<syntax>ScriptLogLength <var>bytes</var></syntax>
<default>ScriptLogLength 10385760</default>
<contextlist><context>server config</context>
@@ -210,20 +210,20 @@
</modulelist>
<usage>
<p><directive>ScriptLogLength</directive> $B$O(B CGI $B%9%/%j%W%H$N%m%0%U%!%$%k(B
$B$NBg$-$5$r@)8B$9$k$?$a$K;HMQ$9$k$3$H$,$G$-$^$9!#%m%0%U%!%$%k$O(B
CGI $B$N%(%i!<Kh$KBgNL$N>pJs(B ($B%j%/%(%9%H$N$9$Y$F$N%X%C%@!"(B
$B$9$Y$F$N=PNO(B)$B$r%m%0$7$^$9$N$G!"$9$0$KBg$-$J%U%!%$%k$K$J$j$^$9!#(B
$B$3$NBg$-$5$N@)8B$,$J$$$3$H$K$h$kLdBj$rKI$0$?$a$K!"(B
$B$3$N%G%#%l%/%F%#%V$r;H$C$F(B CGI $B$N%m%0%U%!%$%k$N(B
$B:GBg$N%U%!%$%k%5%$%:$r@_Dj$9$k$3$H$,$G$-$^$9!#(B
$B%U%!%$%k$,$3$NBg$-$5$rD6$($?>l9g$O!"$=$l0J>e$O=q$-9~$^$l$^$;$s!#(B</p>
<p><directive>ScriptLogLength</directive> は CGI スクリプトのログファイル
の大きさを制限するために使用することができます。ログファイルは
CGI のエラー毎に大量の情報 (リクエストのすべてのヘッダ、
すべての出力)をログしますので、すぐに大きなファイルになります。
この大きさの制限がないことによる問題を防ぐために、
このディレクティブを使って CGI のログファイルの
最大のファイルサイズを設定することができます。
ファイルがこの大きさを超えた場合は、それ以上は書き込まれません。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>ScriptLogBuffer</name>
<description>$B%9%/%j%W%H%m%0$K5-O?$5$l$k(B PUT $B$d(B POST $B%j%/%(%9%H$NFbMF$N>e8B(B</description>
<description>スクリプトログに記録される PUT や POST リクエストの内容の上限</description>
<syntax>ScriptLogBuffer <em>bytes</em></syntax>
<default>ScriptLogBuffer 1024</default>
<contextlist><context>server config</context>
@@ -233,11 +233,11 @@
</modulelist>
<usage>
<p>$BBg$-$JK\BN$r<u$1<h$C$?$H$-$K%m%0%U%!%$%k$,$9$0$KBg$-$/$J$j$9$.$k(B
$BLdBj$rHr$1$k$?$a$K!"%U%!%$%k$K%m%0<}=8$5$l$k(B PUT $B$H(B POST
$B$NK\BN$NBg$-$5$O@)8B$5$l$F$$$^$9!#%G%U%)%k%H$G$O!"(B1024
$B%P%$%H$^$G$,%m%0<}=8$5$l$^$9$,!"(B
$B$3$N%G%#%l%/%F%#%V$O$=$l$rJQ99$9$k$3$H$,$G$-$^$9!#(B
<p>大きな本体を受け取ったときにログファイルがすぐに大きくなりすぎる
問題を避けるために、ファイルにログ収集される PUT と POST
の本体の大きさは制限されています。デフォルトでは、1024
バイトまでがログ収集されますが、
このディレクティブはそれを変更することができます。
</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 425124 -->
@@ -23,37 +23,37 @@
<modulesynopsis metafile="mod_cgid.xml.meta">
<name>mod_cgid</name>
<description>$B30It(B CGI $B%G!<%b%s$r;H$C$?(B CGI $B%9%/%j%W%H$N<B9T(B</description>
<description>外部 CGI デーモンを使った CGI スクリプトの実行</description>
<status>Base</status>
<sourcefile>mod_cgid.c</sourcefile>
<identifier>cgid_module</identifier>
<compatibility>Unix $B$N%9%l%C%I(B MPM $B$N$_(B</compatibility>
<compatibility>Unix のスレッド MPM のみ</compatibility>
<summary>
<p>$B:GE,2=$,;\$5$l$F$$$k$3$H$H!"0J2<$G@bL@$5$l$F$$$kDI2C$N(B <directive
module="mod_cgid">ScriptSock</directive> $B%G%#%l%/%F%#%V$r=|$$$F$O!"(B
<module>mod_cgid</module> $B$O(B <module>mod_cgi</module> $B$HF1MM$N(B
$BF0:n$r$7$^$9!#(B<strong>Apache $B$H(B CGI $B$K4X$9$k>\:Y$O(B
<module>mod_cgi</module> $B$N35MW$rFI$s$G$/$@$5$$!#(B</strong></p>
<p>最適化が施されていることと、以下で説明されている追加の <directive
module="mod_cgid">ScriptSock</directive> ディレクティブを除いては、
<module>mod_cgid</module> <module>mod_cgi</module> と同様の
動作をします。<strong>Apache と CGI に関する詳細は
<module>mod_cgi</module> の概要を読んでください。</strong></p>
<p>Unix $B%*%Z%l!<%F%#%s%0%7%9%F%`$NCf$K$O!"%^%k%A%9%l%C%I$N%5!<%P$+$i(B
$B%W%m%;%9$r(B fork $B$9$k$N$,Hs>o$K%3%9%H$N9b$$F0:n$K$J$C$F$$$k$b$N$,$"$j$^$9!#(B
$BM}M3$O!"?7$7$$%W%m%;%9$,?F%W%m%;%9$N%9%l%C%I$9$Y$F$rJ#@=$9$k$+$i$G$9!#(B
$B3F(B CGI $B5/F0;~$K$3$N%3%9%H$,$+$+$k$N$rKI$0$?$a$K!"(B<module>mod_cgid</module>
$B$O;R%W%m%;%9$r(B fork $B$7$F(B CGI $B%9%/%j%W%H$r<B9T$9$k$?$a$N(B
$B30It%G!<%b%s$r<B9T$7$^$9!#(B
$B<g%5!<%P$O(B unix $B%I%a%$%s%=%1%C%H$r;H$C$F$3$N%G!<%b%s$HDL?.$7$^$9!#(B</p>
<p>Unix オペレーティングシステムの中には、マルチスレッドのサーバから
プロセスを fork するのが非常にコストの高い動作になっているものがあります。
理由は、新しいプロセスが親プロセスのスレッドすべてを複製するからです。
各 CGI 起動時にこのコストがかかるのを防ぐために、<module>mod_cgid</module>
は子プロセスを fork して CGI スクリプトを実行するための
外部デーモンを実行します。
主サーバは unix ドメインソケットを使ってこのデーモンと通信します。</p>
<p>$B%3%s%Q%$%k;~$K%^%k%A%9%l%C%I(B MPM $B$,A*$P$l$?$H$-$O(B
<module>mod_cgi</module> $B$NBe$o$j$KI,$:$3$N%b%8%e!<%k$,;HMQ$5$l$^$9!#(B
$B%f!<%6$N%l%Y%k$G$O$3$N%b%8%e!<%k$N@_Dj$HF0:n$O(B <module>mod_cgi</module>
$B$H$^$C$?$/F1$8$G$9!#M#0l$NNc30$O(B <code>ScriptSock</code> $B%G%#%l%/%F%#%V$N(B
$BDI2C$G!"$3$N%G%#%l%/%F%#%V$O(B CGI $B%G!<%b%s$H$NDL?.MQ$N%=%1%C%H$NL>A0$r(B
$B;XDj$7$^$9!#(B</p>
<p>コンパイル時にマルチスレッド MPM が選ばれたときは
<module>mod_cgi</module> の代わりに必ずこのモジュールが使用されます。
ユーザのレベルではこのモジュールの設定と動作は <module>mod_cgi</module>
とまったく同じです。唯一の例外は <code>ScriptSock</code> ディレクティブの
追加で、このディレクティブは CGI デーモンとの通信用のソケットの名前を
指定します。</p>
</summary>
<seealso><module>mod_cgi</module></seealso>
<seealso><a href="../suexec.html">CGI $B%W%m%0%i%`$r0c$&%f!<%6(B ID $B$G<B9T$9$k(B</a></seealso>
<seealso><a href="../suexec.html">CGI プログラムを違うユーザ ID で実行する</a></seealso>
<directivesynopsis location="mod_cgi">
<name>ScriptLog</name>
@@ -69,20 +69,20 @@
<directivesynopsis>
<name>ScriptSock</name>
<description>CGI $B%G!<%b%s$H$NDL?.$K;H$o$l$k%=%1%C%H$N%U%!%$%kL>$N@\F,<-(B</description>
<description>CGI デーモンとの通信に使われるソケットのファイル名の接頭辞</description>
<syntax>ScriptSock <var>file-path</var></syntax>
<default>ScriptSock logs/cgisock</default>
<contextlist><context>server config</context></contextlist>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O(B CGI $B%G!<%b%s$H$NDL?.$K;H$o$l$k%=%1%C%H$N(B
$B%U%!%$%kL>$N@\F,<-$r@_Dj$7$^$9!#$^$?!"%U%!%$%kL>$K$O%5!<%P$N%W%m%;%9(BID$B$,(B
$BDI2C$5$l$^$9!#%=%1%C%H$O(B Apache $B$,5/F0$5$l$?%f!<%6(B ($BDL>o(B root) $B$N(B
$B%Q!<%_%C%7%g%s$rMQ$$$F%*!<%W%s$5$l$^$9!#(BCGI $B%9%/%j%W%H$H$NDL?.$N(B
$B%;%-%e%j%F%#$rJ]$D$?$a$K!"%=%1%C%H$NB8:_$9$k%G%#%l%/%H%j$K(B
$BB>$N%f!<%6$,=q$-9~$_8"8B$r;}$C$F$$$J$$$h$&$K$9$k$3$H$,=EMW$G$9!#(B</p>
<p>このディレクティブは CGI デーモンとの通信に使われるソケットの
ファイル名の接頭辞を設定します。また、ファイル名にはサーバのプロセスIDが
追加されます。ソケットは Apache が起動されたユーザ (通常 root) の
パーミッションを用いてオープンされます。CGI スクリプトとの通信の
セキュリティを保つために、ソケットの存在するディレクトリに
他のユーザが書き込み権限を持っていないようにすることが重要です。</p>
<example><title>$BNc(B</title>
<example><title></title>
ScriptSock /var/run/cgid.sock
</example>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:659902 (outdated) -->
@@ -23,62 +23,62 @@
<modulesynopsis metafile="mod_dav.xml.meta">
<name>mod_dav</name>
<description>$BJ,;6%*!<%5%j%s%0$H%P!<%8%g%s4IM}(B
(<a href="http://www.webdav.org/">WebDAV</a>) $B5!G=(B</description>
<description>分散オーサリングとバージョン管理
(<a href="http://www.webdav.org/">WebDAV</a>) 機能</description>
<status>Extension</status>
<sourcefile>mod_dav.c</sourcefile>
<identifier>dav_module</identifier>
<summary>
<p>$B$3$N%b%8%e!<%k$O%/%i%9(B 1 $B$H%/%i%9(B 2 $B$N(B
<p>このモジュールはクラス 1 とクラス 2 の
<a href="http://www.webdav.org">WebDAV</a>
('$B%&%'%V%Y!<%9$NJ,;6%*!<%5%j%s%0$H%P!<%8%g%s4IM}(B')
$B5!G=$r(B Apache $B$KDs6!$7$^$9!#(B
$B$3$N(B HTTP $B%W%m%H%3%k$N3HD%$K$h$j!"%j%b!<%H$N%&%'%V%5!<%P>e$K$"$k(B
$B%j%=!<%9$d%3%l%/%7%g%s$r(B
$B:n@.!"0\F0!"J#@=!":o=|$G$-$k$h$&$K$J$j$^$9!#(B</p>
('ウェブベースの分散オーサリングとバージョン管理')
機能を Apache に提供します。
この HTTP プロトコルの拡張により、リモートのウェブサーバ上にある
リソースやコレクションを
作成、移動、複製、削除できるようになります。</p>
</summary>
<seealso><directive module="mod_dav_fs">DavLockDB</directive></seealso>
<seealso><directive module="core">LimitXMLRequestBody</directive></seealso>
<seealso><a href="http://www.webdav.org">WebDAV Resources</a></seealso>
<section id="example"><title>Enabling WebDAV</title>
<p>mod_dav $B$rM-8z$K$9$k$K$O!"(B<code>httpd.conf</code>
$B%U%!%$%kCf$N%3%s%F%J$K<!$r2C$($^$9(B:</p>
<p>mod_dav を有効にするには、<code>httpd.conf</code>
ファイル中のコンテナに次を加えます:</p>
<example>Dav On</example>
<p>$B$3$l$O(B DAV $B%U%!%$%k%7%9%F%`%W%m%P%$%@$rM-8z$K$7$^$9!#(BDAV
$B%U%!%$%k%7%9%F%`%W%m%P%$%@$O(B <module>mod_dav_fs</module>
$B%b%8%e!<%k$G<BAu$5$l$F$$$^$9!#$G$9$+$i!"$3$N%b%8%e!<%k$O%3%s%Q%$%k;~$K(B
$B%5!<%P$KAH$_9~$^$l$F$$$k$+!"$"$k$$$O(B
<p>これは DAV ファイルシステムプロバイダを有効にします。DAV
ファイルシステムプロバイダは <module>mod_dav_fs</module>
モジュールで実装されています。ですから、このモジュールはコンパイル時に
サーバに組み込まれているか、あるいは
<directive module="mod_so">LoadModule</directive>
$B$r;HMQ$7$F<B9T;~$K%m!<%I$5$l$F$$$kI,MW$,$"$j$^$9!#(B</p>
を使用して実行時にロードされている必要があります。</p>
<p>$B$5$i$K!"(BDAV $B%m%C%/%G!<%?%Y!<%9$N>l=j$,(B
<directive module="mod_dav_fs">DavLockDB</directive> $B%G%#%l%/%F%#%V$r;H$C$F(B
<code>httd.conf</code> $B%U%!%$%k$N%0%m!<%P%k%;%/%7%g%s$K;XDj$5$l$F$$$k(B
$BI,MW$,$"$j$^$9!#(B</p>
<p>さらに、DAV ロックデータベースの場所が
<directive module="mod_dav_fs">DavLockDB</directive> ディレクティブを使って
<code>httd.conf</code> ファイルのグローバルセクションに指定されている
必要があります。</p>
<example>
DavLockDB /usr/local/apache2/var/DavLock
</example>
<p>$B%m%C%/%G!<%?%Y!<%9%U%!%$%k$N$"$k%G%#%l%/%H%j$O(B Apache $B$,<B9T$5$l$F$$$k(B
<directive module="mpm_common">User</directive> $B$H(B <directive
module="mpm_common" >Group</directive> $B$K=q$-9~$_8"8B$,$"$kI,MW$,$"$j$^$9!#(B</p>
<p>ロックデータベースファイルのあるディレクトリは Apache が実行されている
<directive module="mpm_common">User</directive> <directive
module="mpm_common" >Group</directive> に書き込み権限がある必要があります。</p>
<p><directive module="core" type="section">Limit</directive>
$B@a$r(B <directive module="core" type="section">Location</directive>
$B%G%#%l%/%F%#%VFbIt$KDI2C$7$F!"(BDAV $B$,M-8z$J>l=j$X$N(B
$B%"%/%;%9$r@)8B$9$k$3$H$b$G$-$^$9!#(BDAV $B%/%i%$%"%s%H$,(B
$B0lEY$N%j%/%(%9%H$GAw?.$G$-$k:GBg%P%$%H?t$r;XDj$7$?$$$H$-$O!"(B
節を <directive module="core" type="section">Location</directive>
ディレクティブ内部に追加して、DAV が有効な場所への
アクセスを制限することもできます。DAV クライアントが
一度のリクエストで送信できる最大バイト数を指定したいときは、
<directive module="core">LimitXMLRequestBody</directive>
$B%G%#%l%/%F%#%V$r;HMQ$9$kI,MW$,$"$j$^$9!#!VDL>o$N!W(B
ディレクティブを使用する必要があります。「通常の」
<directive module="core">LimitRequestBody</directive>
$B%G%#%l%/%F%#%V$O(B DAV $B%j%/%(%9%H$KBP$7$F$O8zNO$r;}$A$^$;$s!#(B</p>
ディレクティブは DAV リクエストに対しては効力を持ちません。</p>
<example><title>$B40A4$JNc(B</title>
<example><title>完全な例</title>
DavLockDB /usr/local/apache2/var/DavLock<br />
<br />
&lt;Location /foo&gt;<br />
@@ -98,57 +98,57 @@
&lt;/Location&gt;<br />
</example>
<p><module>mod_dav</module> $B$O(B Greg Stein $B$5$s$N(B <a
href="http://www.webdav.org/mod_dav/">Apache 1.3 $BMQ$N(B mod_dav</a> $B$K(B
$BM3Mh$9$k$b$N$G$9!#$=$N%5%$%H$+$i$h$jB?$/$N>pJs$r<j$KF~$l$k$3$H$,$G$-$^$9!#(B</p>
<p><module>mod_dav</module> Greg Stein さんの <a
href="http://www.webdav.org/mod_dav/">Apache 1.3 用の mod_dav</a>
由来するものです。そのサイトからより多くの情報を手に入れることができます。</p>
</section>
<section id="security"><title>$B%;%-%e%j%F%#$NLdBj(B</title>
<section id="security"><title>セキュリティの問題</title>
<p>DAV $B$N%"%/%;%9%a%=%C%I$O1s3V%/%i%$%"%s%H$,%5!<%P$N%U%!%$%k$r(B
$BA`:n$9$k$3$H$r2DG=$K$7$^$9$N$G!"(B <module>mod_dav</module> $B$r;HMQ$9$k(B
$BA0$K!"%5!<%P$,0BA4$G$"$k$3$H$rFC$KCm0U$7$F3NG'$7$J$1$l$P$J$j$^$;$s!#(B</p>
<p>DAV のアクセスメソッドは遠隔クライアントがサーバのファイルを
操作することを可能にしますので、 <module>mod_dav</module> を使用する
前に、サーバが安全であることを特に注意して確認しなければなりません。</p>
<p>$B%5!<%P>e$N(B DAV $B$,;HMQ2DG=$K$J$C$F$$$k>l=j$O$9$Y$FG'>Z$GJ]8n$7$F$/$@$5$$!#(B
HTTP $B4pK\G'>Z$N;HMQ$O?d>)$G$-$^$;$s!#>/$J$/$H$b(B
<module>mod_auth_digest</module> $B%b%8%e!<%k$GDs6!$5$l$k(B HTTP
$B%@%$%8%'%9%HG'>Z$rMQ$$$k$Y$-$G$9!#(BWebDAV $B%/%i%$%"%s%H$N$[$H$s$I$O(B
$B$3$NG'>ZJ}K!$KBP1~$7$F$$$^$9!#Be$o$j$K!"(B<a href="../ssl/">SSL</a> $B$,(B
$BM-8z$J%3%M%/%7%g%s$rDL$7$?4pK\G'>Z$r;H$&$3$H$b$G$-$^$9!#(B</p>
<p>サーバ上の DAV が使用可能になっている場所はすべて認証で保護してください。
HTTP 基本認証の使用は推奨できません。少なくとも
<module>mod_auth_digest</module> モジュールで提供される HTTP
ダイジェスト認証を用いるべきです。WebDAV クライアントのほとんどは
この認証方法に対応しています。代わりに、<a href="../ssl/">SSL</a>
有効なコネクションを通した基本認証を使うこともできます。</p>
<p><module>mod_dav</module> $B$,%U%!%$%k$rA`:n$G$-$k$h$&$K$9$k$?$a$K$O!"(B
$B4IM}2<$N%G%#%l%/%H%j$H%U%!%$%k$H$K(B Apache $B$,<B9T$5$l$F$$$k(B <directive
module="mpm_common">User</directive> $B$H(B <directive
module="mpm_common">Group</directive> $B$G=q$-9~$_2DG=$G$"$kI,MW$,$"$j$^$9!#(B
$B?7$7$/:n@.$5$l$k%U%!%$%k$b$3$N(B <directive module="mpm_common">User</directive>
$B$H(B <directive module="mpm_common">Group</directive> $B$K=jM-$5$l$k(B
$B$3$H$K$J$j$^$9!#$3$NM}M3$+$i!"$=$N%"%+%&%s%H$X$N%"%/%;%9$r@)8f$9$k$3$H$O(B
$B=EMW$G$9!#(BDAV $B%j%]%8%H%j$O(B Apache $B@lMQ$N$b$N$@$H$_$J$5$l$F$$$^$9!#(B
Apache $B0J30$NJ}K!$G%U%!%$%k$r=$@5$9$k$3$H(B ($BNc$($P(B FTP $B$d%U%!%$%k%7%9%F%`(B
$BMQ$N%D!<%k$J$I$r;H$C$F(B) $B$O5v2D$5$l$F$$$^$;$s!#(B</p>
<p><module>mod_dav</module> がファイルを操作できるようにするためには、
管理下のディレクトリとファイルとに Apache が実行されている <directive
module="mpm_common">User</directive> <directive
module="mpm_common">Group</directive> で書き込み可能である必要があります。
新しく作成されるファイルもこの <directive module="mpm_common">User</directive>
<directive module="mpm_common">Group</directive> に所有される
ことになります。この理由から、そのアカウントへのアクセスを制御することは
重要です。DAV リポジトリは Apache 専用のものだとみなされています。
Apache 以外の方法でファイルを修正すること (例えば FTP やファイルシステム
用のツールなどを使って) は許可されていません。</p>
<p><module>mod_dav</module> $B$O$$$m$$$m$J<oN`$N%5!<%S%95qH]967b$K$5$i$5$l$k(B
$B$+$b$7$l$^$;$s!#(B<directive
module="core">LimitXMLRequestBody</directive> $B%G%#%l%/%F%#%V$r;H$&$H(B
$BBg$-$J(B DAV $B%j%/%(%9%H$r2r@O$9$k$H$-$K>CHq$5$l$k%a%b%j$NNL$r@)8B$9$k$3$H$,(B
$B$G$-$^$9!#(B<directive
module="mod_dav">DavDepthInfinity</directive> $B%G%#%l%/%F%#%V$O(B
<code>PROPFIND</code> $B%j%/%(%9%H$,5pBg%j%]%8%H%j$GBgNL$N%a%b%j$r>CHq$9$k$N$r(B
$BKI$0$3$H$,$G$-$^$9!#B>$N%5!<%S%95qH]967b$K$OC1=c$K;HMQ2DG=$J%G%#%9%/NN0h$r(B
$BB?$/$NBg$-$J%U%!%$%k$GKd$a$F$7$^$&$s$b$N$,$"$j$^$9!#$3$l$rD>@\KI$0J}K!$O(B
Apache $B$K$O$"$j$^$;$s$N$G!"?.MQ$G$-$J$$%f!<%6$K(B DAV $B%"%/%;%9$rDs6!$9$k$N$O(B
$BHr$1$?J}$,NI$$$G$7$g$&!#(B</p>
<p><module>mod_dav</module> はいろいろな種類のサービス拒否攻撃にさらされる
かもしれません。<directive
module="core">LimitXMLRequestBody</directive> ディレクティブを使うと
大きな DAV リクエストを解析するときに消費されるメモリの量を制限することが
できます。<directive
module="mod_dav">DavDepthInfinity</directive> ディレクティブは
<code>PROPFIND</code> リクエストが巨大リポジトリで大量のメモリを消費するのを
防ぐことができます。他のサービス拒否攻撃には単純に使用可能なディスク領域を
多くの大きなファイルで埋めてしまうんものがあります。これを直接防ぐ方法は
Apache にはありませんので、信用できないユーザに DAV アクセスを提供するのは
避けた方が良いでしょう。</p>
</section>
<section id="complex"><title>$BJ#;($J@_Dj(B</title>
<section id="complex"><title>複雑な設定</title>
<p>$B$h$/$"$kMW5a$K!"(B<module>mod_dav</module> $B$r;H$C$FF0E*$J%U%!%$%k(B
(PHP $B%9%/%j%W%H!"(BCGI $B%9%/%j%W%H$J$I(B) $B$rA`:n$7$?$$$H$$$&$b$N$,$"$j$^$9!#(B
$B$3$l$N<B8=$O!"(B<code>GET</code> $B%j%/%(%9%H$O%9%/%j%W%H$NFbMF$r%@%&%s%m!<%I$5$;$k(B
$BBe$o$j$K!"%9%/%j%W%H$r>o$K<B9T$5$;$F$7$^$&$N$GFq$7$/$J$C$F$$$^$9!#(B
$B$3$l$r2sHr$9$kJ}K!$K$O!"Fs$D$N0c$&(B URL $B$rF1$8%3%s%F%s%D$K%^%C%W$7!"(B
$B0l$D$O%9%/%j%W%H$r<B9T$5$;!"$b$&0l$D$O%@%&%s%m!<%I$5$;$?$j!"(BDAV $B$+$i(B
$BA`:n$5$l$?$j$9$k$h$&$K@_Dj$9$k$H$$$&$b$N$,$"$j$^$9!#(B</p>
<p>よくある要求に、<module>mod_dav</module> を使って動的なファイル
(PHP スクリプト、CGI スクリプトなど) を操作したいというものがあります。
これの実現は、<code>GET</code> リクエストはスクリプトの内容をダウンロードさせる
代わりに、スクリプトを常に実行させてしまうので難しくなっています。
これを回避する方法には、二つの違う URL を同じコンテンツにマップし、
一つはスクリプトを実行させ、もう一つはダウンロードさせたり、DAV から
操作されたりするように設定するというものがあります。</p>
<example>
Alias /phparea /home/gstein/php_files<br />
@@ -161,22 +161,22 @@ Alias /php-source /home/gstein/php_files<br />
&lt;/Location&gt;
</example>
<p>$B$3$N@_Dj$K$h$j!"(B<code>http://example.com/phparea</code> $B$r(B PHP $B%9%/%j%W%H$N(B
$B=PNO$r%"%/%;%9$9$k$?$a$K;H$&$3$H$,$G$-!"(B
<code>http://example.com/php-source</code> $B$r(B DAV $B%/%i%$%"%s%H$K$h$k(B
$B$,A`:n$N$?$a$K;H$&$3$H$,$G$-$^$9!#(B</p>
<p>この設定により、<code>http://example.com/phparea</code> を PHP スクリプトの
出力をアクセスするために使うことができ、
<code>http://example.com/php-source</code> を DAV クライアントによる
が操作のために使うことができます。</p>
</section>
<directivesynopsis>
<name>Dav</name>
<description>WebDAV HTTP $B%a%=%C%I$rM-8z$K$7$^$9(B</description>
<description>WebDAV HTTP メソッドを有効にします</description>
<syntax>Dav On|Off|<var>provider-name</var></syntax>
<default>Dav Off</default>
<contextlist><context>directory</context></contextlist>
<usage>
<p>$BM?$($i$l$?%3%s%F%J$G(B WebDAV HTTP $B%a%=%C%I$,;H$($k$h$&$K$9$k$K$O(B
$B<!$N$h$&$K$7$^$9!#(B</p>
<p>与えられたコンテナで WebDAV HTTP メソッドが使えるようにするには
次のようにします。</p>
<example>
&lt;Location /foo&gt;<br />
@@ -186,24 +186,24 @@ Alias /php-source /home/gstein/php_files<br />
&lt;/Location&gt;
</example>
<p><code>On</code> $B$H$$$&;XDj$O<B:]$K$O(B <module>mod_dav_fs</module>
$B$GDs6!$5$l$F$$$k%G%U%)%k%H$N%W%m%P%$%@!"(B<code>filesystem</code>
$B$X$N%(%$%j%"%9$K$J$C$F$$$^$9!#0lEY$"$k%m%1!<%7%g%s$G(B DAV
$B$rM-8z$K$7$?8e$O!"$=$N%5%V%m%1!<%7%g%s$G(B<em>$BL58z2=$9$k$3$H$O$G$-$J$$(B</em>
$B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#40A4$J@_DjNc$O(B<a
href="#example">$B>e5-$N%;%/%7%g%s(B</a> $B$r$4Mw2<$5$$!#(B</p>
<p><code>On</code> という指定は実際には <module>mod_dav_fs</module>
で提供されているデフォルトのプロバイダ、<code>filesystem</code>
へのエイリアスになっています。一度あるロケーションで DAV
を有効にした後は、そのサブロケーションで<em>無効化することはできない</em>
ということに注意してください。完全な設定例は<a
href="#example">上記のセクション</a> をご覧下さい。</p>
<note type="warning">
$B%5!<%P$N%;%-%e%j%F%#$,3NJ]$G$-$k$^$G(B WebDAV $B$rM-8z$K$7$J$$$G$/$@$5$$!#(B
$B$=$&$7$J$1$l$PC/$G$b$=$N%5!<%P$G%U%!%$%k$rG[I[$9$k$3$H$,$G$-$k$h$&$K(B
$B$J$C$F$7$^$$$^$9!#(B
サーバのセキュリティが確保できるまで WebDAV を有効にしないでください。
そうしなければ誰でもそのサーバでファイルを配布することができるように
なってしまいます。
</note>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>DavMinTimeout</name>
<description>$B%5!<%P$,(B DAV $B%j%=!<%9$N%m%C%/$r0];}$9$k:G>.;~4V$G$9!#(B
<description>サーバが DAV リソースのロックを維持する最小時間です。
</description>
<syntax>DavMinTimeout <var>seconds</var></syntax>
<default>DavMinTimeout 0</default>
@@ -211,21 +211,21 @@ Alias /php-source /home/gstein/php_files<br />
<context>directory</context></contextlist>
<usage>
<p>$B%/%i%$%"%s%H$,(B DAV $B%j%=!<%9%m%C%/$rMW5a$7$?>l9g!"(B
$B%m%C%/$,%5!<%P$K$h$C$F<+F0E*$K2r=|$5$l$k$^$G$N;~4V$r(B
$BF1;~$K;XDj$9$k$3$H$,$G$-$^$9!#$3$NCM$OC1$J$k%j%/%(%9%H$G$"$C$F!"(B
$B%5!<%P$O$3$l$rL5;k$9$k$3$H$b$G$-$^$9$7!"(B
$BG$0U$NCM$r%/%i%$%"%s%H$KDLCN$9$k$3$H$b$G$-$^$9!#(B</p>
<p>クライアントが DAV リソースロックを要求した場合、
ロックがサーバによって自動的に解除されるまでの時間を
同時に指定することができます。この値は単なるリクエストであって、
サーバはこれを無視することもできますし、
任意の値をクライアントに通知することもできます。</p>
<p>$B%/%i%$%"%s%H$KLa$9%m%C%/%?%$%`%"%&%H$N:G>.;~4V$r!"(B
$BIC$G!";XDj$9$k$?$a$K(B <directive>DavMinTimeout</directive>
$B%G%#%l%/%F%#%V$r;H$$$^$9!#(B
$B%^%$%/%m%=%U%H$N%&%'%V%U%)%k%@$N%G%U%)%k%H$G$O(B 120 $BIC$G$9$,!((B
$B%M%C%H%o!<%/$NCY1d$N$;$$$G%/%i%$%"%s%H$,%m%C%/$r<:$&$N$r8:$i$9$?$a$K!"(B
<directive>DavMinTimeout</directive> $B$r;H$C$F(B
$B$3$l$r$b$C$HBg$-$JCM(B ($BNc$($P(B 600 $BIC(B) $B$K>e=q$-$G$-$^$9!#(B</p>
<p>クライアントに戻すロックタイムアウトの最小時間を、
秒で、指定するために <directive>DavMinTimeout</directive>
ディレクティブを使います。
マイクロソフトのウェブフォルダのデフォルトでは 120 秒ですが;
ネットワークの遅延のせいでクライアントがロックを失うのを減らすために、
<directive>DavMinTimeout</directive> を使って
これをもっと大きな値 (例えば 600 秒) に上書きできます。</p>
<example><title>$BNc(B</title>
<example><title></title>
&lt;Location /MSWord&gt;<br />
<indent>
DavMinTimeout 600<br />
@@ -237,19 +237,19 @@ Alias /php-source /home/gstein/php_files<br />
<directivesynopsis>
<name>DavDepthInfinity</name>
<description>PROPFIND, Depth: Infinity $B%j%/%(%9%H$r5v2D$7$^$9(B</description>
<description>PROPFIND, Depth: Infinity リクエストを許可します</description>
<syntax>DavDepthInfinity on|off</syntax>
<default>DavDepthInfinity off</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
<usage>
<p>'Depth: Infinity' $B$r4^$s$G$$$k(B
<code>PROPFIND</code> $B%j%/%(%9%H$r=hM}$G$-$k$h$&$K$9$k$K$O!"(B
<p>'Depth: Infinity' を含んでいる
<code>PROPFIND</code> リクエストを処理できるようにするには、
<directive>DavDepthInfinity</directive>
$B%G%#%l%/%F%#%V$r;H$$$^$9!#$3$N%?%$%W$N%j%/%(%9%H$O(B
denial-of-service $B%"%?%C%/$H$J$j$&$k$N$G!"(B
$B%G%U%)%k%H$G$O5v2D$5$l$F$$$^$;$s!#(B</p>
ディレクティブを使います。このタイプのリクエストは
denial-of-service アタックとなりうるので、
デフォルトでは許可されていません。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -23,50 +23,50 @@
<modulesynopsis metafile="mod_dav_fs.xml.meta">
<name>mod_dav_fs</name>
<description><module>mod_dav</module> $B$N$?$a$N%U%!%$%k%7%9%F%`%W%m%P%$%@(B</description>
<description><module>mod_dav</module> のためのファイルシステムプロバイダ</description>
<status>Extension</status>
<sourcefile>mod_dav_fs.c</sourcefile>
<identifier>dav_fs_module</identifier>
<summary>
<p>$B$3$N%b%8%e!<%k$O(B <module>mod_dav</module>
$B$N%5!<%S%9$r(B<em>$BI,MW$H$7$^$9(B</em>$B!#(B<module>mod_dav</module>
$B$N%5%]!<%H%b%8%e!<%k$H$7$FF0:n$7!"%5!<%P%U%!%$%k%7%9%F%`>e$K(B
$B0LCV$9$k%j%=!<%9$X$N%"%/%;%9$rDs6!$7$^$9!#$3$N%W%m%P%$%@$N@5<0$JL>A0$O(B
<code>filesystem</code> $B$G$9!#(B<module>mod_dav</module>
$B%P%C%/%(%s%I%W%m%P%$%@$O(B <directive module="mod_dav">Dav</directive>
$B%G%#%l%/%F%#%V$r;HMQ$7$F5/F0$5$l$^$9!#(B</p>
<p>このモジュールは <module>mod_dav</module>
のサービスを<em>必要とします</em>。<module>mod_dav</module>
のサポートモジュールとして動作し、サーバファイルシステム上に
位置するリソースへのアクセスを提供します。このプロバイダの正式な名前は
<code>filesystem</code> です。<module>mod_dav</module>
バックエンドプロバイダは <directive module="mod_dav">Dav</directive>
ディレクティブを使用して起動されます。</p>
<example><title>$BNc(B</title>
<example><title></title>
Dav filesystem
</example>
<p><code>filesystem</code> $B$O(B <module>mod_dav</module>
$B$N%G%U%)%k%H%W%m%P%$%@$K$J$C$F$$$^$9$+$i!"Be$o$j$KC1$K(B
<code>On</code> $B$H;XDj$9$k$3$H$b$G$-$^$9!#(B</p>
<p><code>filesystem</code> <module>mod_dav</module>
のデフォルトプロバイダになっていますから、代わりに単に
<code>On</code> と指定することもできます。</p>
</summary>
<seealso><module>mod_dav</module></seealso>
<directivesynopsis>
<name>DavLockDB</name>
<description>DAV $B%m%C%/%G!<%?%Y!<%9$N0LCV(B</description>
<description>DAV ロックデータベースの位置</description>
<syntax>DavLockDB <var>file-path</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p>$B%m%C%/%G!<%?%Y!<%9$X$N%U%k%Q%9$r!"3HD%;R$r=|$$$?7A$G(B
$B;XDj$9$k$K$O!"(B<directive>DavLockDB</directive>
$B$r;H$$$^$9!#%Q%9$,@dBP%Q%9$G$J$1$l$P!"(B<directive module=
"core">ServerRoot</directive> $B$+$i$NAjBP%Q%9$H2r<a$5$l$^$9!#(B
<module>mod_dav_fs</module> $B<BAu$G$O!"%f!<%6%m%C%/$r(B
$BDI@W$9$k$?$a$K(B SDBM $B%G!<%?%Y!<%9$r;H$$$^$9!#(B</p>
<p>ロックデータベースへのフルパスを、拡張子を除いた形で
指定するには、<directive>DavLockDB</directive>
を使います。パスが絶対パスでなければ、<directive module=
"core">ServerRoot</directive> からの相対パスと解釈されます。
<module>mod_dav_fs</module> 実装では、ユーザロックを
追跡するために SDBM データベースを使います。</p>
<!-- XXX: someone should add that tool to the support directory...
The utility <code>modules/dav/util/lockview</code> can be used from
the server to display all locks in a lock database.</p> -->
<example><title>$BNc(B</title>
<example><title></title>
DavLockDB logs/DavLock
</example>
</usage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420993 -->
@@ -23,71 +23,71 @@
<modulesynopsis metafile="mod_dav_lock.xml.meta">
<name>mod_dav_lock</name>
<description><module>mod_dav</module> $BMQ$NHFMQ%m%C%/%b%8%e!<%k(B</description>
<description><module>mod_dav</module> 用の汎用ロックモジュール</description>
<status>Extension</status>
<sourcefile>mod_dav_lock.c</sourcefile>
<identifier>dav_lock_module</identifier>
<compatibility>$B%P!<%8%g%s(B 2.1 $B0J9_(B</compatibility>
<compatibility>バージョン 2.1 以降</compatibility>
<summary>
<p>$B$3$N%b%8%e!<%k$O(B <module>mod_dav</module> $B$N$I$N%P%C%/%(%s%I(B
$B$+$i$G$b;H$($kHFMQ%m%C%/(B API $B$rDs6!$7$^$9!#(B
$B;HMQ$K$O:GDc8B(B <module>mod_dav</module>
$B$rI,MW$H$7$^$9$,!"$3$l$rMxMQ$9$k%P%C%/%(%s%I$,B8:_$7$J$$$HLr$KN)$?$J$$$N$G!"(B
$B$=$N$h$&$J>l9g$O%5!<%P$KFI$_9~$`$Y$-$G$O$"$j$^$;$s!#(B
<p>このモジュールは <module>mod_dav</module> のどのバックエンド
からでも使える汎用ロック API を提供します。
使用には最低限 <module>mod_dav</module>
を必要としますが、これを利用するバックエンドが存在しないと役に立たないので、
そのような場合はサーバに読み込むべきではありません。
<module>mod_dav_lock</module>
$B$r<B:]$KMxMQ$9$k%P%C%/%(%s%I%b%8%e!<%k$NNc$H$7$F$O(B subversion
$B%W%m%P%$%@%b%8%e!<%k$N(B <a href="http://subversion.tigris.org/"
>mod_dav_svn</a> $B$,$"$j$^$9!#(B</p>
を実際に利用するバックエンドモジュールの例としては subversion
プロバイダモジュールの <a href="http://subversion.tigris.org/"
>mod_dav_svn</a> があります。</p>
<p><module>mod_dav_fs</module> $B$OFC2=$5$l$?@lMQ$N%P!<%8%g%s$r(B
$B;H$&$?$a!"$3$NHFMQ%b%8%e!<%k$O(B<em>$BI,MW$J$$(B</em>$B$3$H$KCm0U$7$F(B
$B$/$@$5$$!#(B</p>
<p><module>mod_dav_fs</module> は特化された専用のバージョンを
使うため、この汎用モジュールは<em>必要ない</em>ことに注意して
ください。</p>
<p><module>mod_dav_lock</module> $B$r5!G=$5$;$k$K$O!"(B
$B0J2<$G@bL@$5$l$F$$$k(B <directive
module="mod_dav_lock">DavGenericLockDB</directive> $B$r;H$C$F(B
$B%m%C%/%G!<%?%Y!<%9$N>l=j$r;XDj$9$k$@$1$G$9!#(B</p>
<p><module>mod_dav_lock</module> を機能させるには、
以下で説明されている <directive
module="mod_dav_lock">DavGenericLockDB</directive> を使って
ロックデータベースの場所を指定するだけです。</p>
<note><title>$B3+H/<T8~$1$N%a%b(B</title>
<p>$B%m%C%/$rDs6!$7$F$$$k4X?t$X$N%]%$%s%?$r<hF@$9$k$?$a$K$O!"(B
<code>ap_lookup_provider</code> API $B$r!"0z?t(B <code>dav-lock</code>,
<code>generic</code>, <code>0</code> $B$r;XDj$7$F;H$&I,MW$,(B
$B$"$j$^$9!#(B</p>
<note><title>開発者向けのメモ</title>
<p>ロックを提供している関数へのポインタを取得するためには、
<code>ap_lookup_provider</code> API を、引数 <code>dav-lock</code>,
<code>generic</code>, <code>0</code> を指定して使う必要が
あります。</p>
</note>
</summary>
<seealso><module>mod_dav</module></seealso>
<directivesynopsis>
<name>DavGenericLockDB</name>
<description>DAV $B%m%C%/%G!<%?%Y!<%9$N>l=j(B</description>
<description>DAV ロックデータベースの場所</description>
<syntax>DavGenericLockDB <var>file-path</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context>
</contextlist>
<usage>
<p><directive>DavGenericLockDB</directive> $B%G%#%l%/%F%#%V$r(B
$B;H$C$F!"3HD%;R$r=|$$$?%m%C%/%G!<%?%Y!<%9$X$N%U%k%Q%9$r(B
$B;XDj$7$^$9!#@dBP%Q%9$G$J$$$H$-$O(B <directive
module="core">ServerRoot</directive> $B$+$i$NAjBP%Q%9$H$7$F(B
$B07$o$l$^$9!#(B<module>mod_dav_lock</module> $B$N<BAu$G$O%f!<%6$N(B
$B%m%C%/$rDI@W$9$k$N$K(B SDBM $B%G!<%?%Y!<%9$r;H$$$^$9!#(B</p>
<p><directive>DavGenericLockDB</directive> ディレクティブを
使って、拡張子を除いたロックデータベースへのフルパスを
指定します。絶対パスでないときは <directive
module="core">ServerRoot</directive> からの相対パスとして
扱われます。<module>mod_dav_lock</module> の実装ではユーザの
ロックを追跡するのに SDBM データベースを使います。</p>
<example><title>$BNc(B</title>
<example><title></title>
DavGenericLockDB var/DavLock
</example>
<p>$B%m%C%/%G!<%?%Y!<%9%U%!%$%k$N$"$k%G%#%l%/%H%j$O(B
Apache $B$,<B9T$5$l$F$$$k(B <directive module="mpm_common">User</directive>
$B$H(B <directive module="mpm_common" >Group</directive> $B$K$h$C$F(B
$B=q$-9~$_2DG=$G$J$1$l$P$J$j$^$;$s!#%;%-%e%j%F%#>e$NM}M3$+$i!"(B
$B4{B8$N%G%#%l%/%H%j$N%Q!<%_%C%7%g%s$rJQ99$9$k$N$G$O$J$/!"(B
$B@lMQ$N%G%#%l%/%H%j$r:n$k$N$,NI$$$G$7$g$&!#>e$NNc$G$O!"(B
Apache $B$O(B <directive
module="core">ServerRoot</directive> $B$N2<$N(B <code>var/</code>
$B%G%#%l%/%H%j$K!"%U%!%$%kL>$NK\BN$,(B <code>DavLock</code> $B$G(B
$B%5!<%P$,A*Br$7$?3HD%;R$r;}$D%U%!%$%k$r:n@.$7$^$9!#(B</p>
<p>ロックデータベースファイルのあるディレクトリは
Apache が実行されている <directive module="mpm_common">User</directive>
<directive module="mpm_common" >Group</directive> によって
書き込み可能でなければなりません。セキュリティ上の理由から、
既存のディレクトリのパーミッションを変更するのではなく、
専用のディレクトリを作るのが良いでしょう。上の例では、
Apache <directive
module="core">ServerRoot</directive> の下の <code>var/</code>
ディレクトリに、ファイル名の本体が <code>DavLock</code>
サーバが選択した拡張子を持つファイルを作成します。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -23,29 +23,29 @@
<modulesynopsis metafile="mod_deflate.xml.meta">
<name>mod_deflate</name>
<description>$B%/%i%$%"%s%H$XAw$i$l$kA0$K%3%s%F%s%D$r05=L$9$k(B</description>
<description>クライアントへ送られる前にコンテンツを圧縮する</description>
<status>Extension</status>
<sourcefile>mod_deflate.c</sourcefile>
<identifier>deflate_module</identifier>
<summary>
<p><module>mod_deflate</module> $B%b%8%e!<%k$O(B <code>DEFLATE</code>
$B=PNO%U%#%k%?$rDs6!$7$^$9!#$3$l$O%5!<%P$+$i$N=PNO$r!"%M%C%H%o!<%/$r(B
$BDL$7$F%/%i%$%"%s%H$KAw$kA0$K05=L$9$k$3$H$r2DG=$K$7$^$9!#(B</p>
<p><module>mod_deflate</module> モジュールは <code>DEFLATE</code>
出力フィルタを提供します。これはサーバからの出力を、ネットワークを
通してクライアントに送る前に圧縮することを可能にします。</p>
</summary>
<seealso><a href="../filter.html">Filters</a></seealso>
<section id="recommended"><title>$B%5%s%W%k@_Dj(B</title>
<p>$B2<$K$;$C$+$A$J?M8~$1$N4JC1$J@_DjNc$r<($7$^$9!#(B</p>
<section id="recommended"><title>サンプル設定</title>
<p>下にせっかちな人向けの簡単な設定例を示します。</p>
<example><title>$B?t%?%$%W$N$_05=L$9$k(B</title>
<example><title>数タイプのみ圧縮する</title>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
</example>
<p>$B0J2<$N@_Dj$O%3%s%F%s%D$r$h$j05=L$7$^$9$,!"$:$C$HJ#;($J@_Dj$K$J$j$^$9!#(B
$B@_Dj$N6y!9$^$G$h$/M}2r$7$J$$$G;H$o$J$$$G$/$@$5$$!#(B</p>
<p>以下の設定はコンテンツをより圧縮しますが、ずっと複雑な設定になります。
設定の隅々までよく理解しないで使わないでください。</p>
<example><title>$B2hA|0J30A4$F05=L$9$k(B</title>
<example><title>画像以外全て圧縮する</title>
&lt;Location /&gt;<br />
<indent>
# Insert filter<br />
@@ -79,27 +79,27 @@
</section>
<section id="enable"><title>$B05=L$rM-8z$K$9$k(B</title>
<section id="enable"><title>圧縮を有効にする</title>
<section id="output"><title>Output Compression</title>
<p>$B05=L5!G=$O(B <code>DEFLATE</code> <a href="../filter.html">$B%U%#%k%?(B</a>
$B$K$h$j<BAu$5$l$F$$$^$9!#0J2<$N%G%#%l%/%F%#%V$O$=$N%G%#%l%/%F%#%V$N$"$k(B
$B%3%s%F%JCf$N%I%-%e%a%s%H$r05=L$9$k$h$&$K$7$^$9(B:</p>
<p>圧縮機能は <code>DEFLATE</code> <a href="../filter.html">フィルタ</a>
により実装されています。以下のディレクティブはそのディレクティブのある
コンテナ中のドキュメントを圧縮するようにします:</p>
<example>
SetOutputFilter DEFLATE
</example>
<p>$B$h$/;H$o$l$F$$$k%V%i%&%6$G$O!"$9$Y$F$N%3%s%F%s%D$KBP$9$k(B
$B05=L$r07$($k$o$1$G$O$"$j$^$;$s!#$G$9$+$i!"(B<code>gzip-only-text/html</code>
$B%N!<%H$r(B <code>1</code> $B$K$7$F!"(Bhtml $B%U%!%$%k$KBP$7$F$N$_(B
$B05=L$,F/$/$h$&$K$7$?J}$,$h$$$+$b$7$l$^$;$s(B ($B0J2<;2>H(B)
$B$3$NCM$r(B <em><code>1</code> $B0J30$NCM(B</em>$B$K@_Dj$7$?>l9g$OL5;k$5$l$^$9!#(B</p>
<p>よく使われているブラウザでは、すべてのコンテンツに対する
圧縮を扱えるわけではありません。ですから、<code>gzip-only-text/html</code>
ノートを <code>1</code> にして、html ファイルに対してのみ
圧縮が働くようにした方がよいかもしれません (以下参照)
この値を <em><code>1</code> 以外の値</em>に設定した場合は無視されます。</p>
<p>$BDL>o!"FCDj$N(BMIME$B%?%$%W$K$D$$$F$N$_05=L$7$?$$$N$G$"$l$P!"(B
<p>通常、特定のMIMEタイプについてのみ圧縮したいのであれば、
<directive module="core">AddOutputFilterByType</directive>
$B%G%#%l%/%F%#%V$r;HMQ$7$^$9!#<!$K(B Apache $B$N%I%-%e%a%s%H$N(B html
$B%U%!%$%k$N$_$N05=L$rM-8z$K$9$kNc$r<($7$^$9!#(B</p>
ディレクティブを使用します。次に Apache のドキュメントの html
ファイルのみの圧縮を有効にする例を示します。</p>
<example>
&lt;Directory "/your-server-root/manual"&gt;<br />
@@ -109,15 +109,15 @@
&lt;/Directory&gt;
</example>
<p>$BA4$F$N%U%!%$%k%?%$%W$G$N05=L$KLdBj$rJz$($F$$$k%V%i%&%6$KBP$7$F$O!"(B
<p>全てのファイルタイプでの圧縮に問題を抱えているブラウザに対しては、
<directive module="mod_setenvif">BrowserMatch</directive>
$B%G%#%l%/%F%#%V$r;HMQ$7$F!"FCDj$N%V%i%&%6$K(B <code>no-gzip</code>
$B%N!<%H$r%;%C%H$7!"05=L$,9T$J$o$l$J$$$h$&$K$7$^$9!#(B
<code>no-gzip</code> $B$H(B <code>gzip-only-text/html</code>
$B$rAH$_9g$o$;$k$3$H$G>e<j$/BP=h$G$-$^$9!#(B
$B$3$N>l9g!"A0<T$,8e<T$r%*!<%P!<%i%$%I$7$^$9!#(B
$B>e5-$N(B<a href="#recommended">$B@_DjNc(B</a>$B$NH4?h$r(B
$B<!$K<($7$^$9$N$G$4Mw2<$5$$!#(B</p>
ディレクティブを使用して、特定のブラウザに <code>no-gzip</code>
ノートをセットし、圧縮が行なわれないようにします。
<code>no-gzip</code> <code>gzip-only-text/html</code>
を組み合わせることで上手く対処できます。
この場合、前者が後者をオーバーライドします。
上記の<a href="#recommended">設定例</a>の抜粋を
次に示しますのでご覧下さい。</p>
<example>
BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
@@ -125,39 +125,39 @@
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</example>
<p>$B$^$:;O$a$K(B <code>User-Agent</code> $BJ8;zNs$+$i(B Netscape Navigator
4.x $B$G$"$k$+$I$&$+$rD4$Y$^$9!#$3$l$i$N%P!<%8%g%s$G$O!"(B
<code>text/html</code> $B0J30$N%?%$%W$N05=L$r07$&$3$H$,$G$-$^$;$s!#(B
4.06, 4.07, 4.08 $B$O(B html $B%U%!%$%k$N?-D%$K$bLdBj$rJz$($F$$$^$9!#(B
$B$G$9$+$i$3$l$i$KBP$7$F$O!"40A4$K(B deflate $B%U%#%k%?$r%*%U$K$7$^$9!#(B</p>
<p>まず始めに <code>User-Agent</code> 文字列から Netscape Navigator
4.x であるかどうかを調べます。これらのバージョンでは、
<code>text/html</code> 以外のタイプの圧縮を扱うことができません。
4.06, 4.07, 4.08 は html ファイルの伸張にも問題を抱えています。
ですからこれらに対しては、完全に deflate フィルタをオフにします。</p>
<p>3 $BHVL\$N(B <directive module="mod_setenvif">BrowserMatch</directive>
$B%G%#%l%/%F%#%V$G!"?dB,$7$?%f!<%6!<%(!<%8%'%s%H$r=$@5$7$^$9!#(B
$B$J$<$J$i(B Microsoft Internet Explorer $B$b(B "Mozilla/4" $B$HFCDj$5$l$^$9$,!"(B
$B$3$l$i$O<B:]$K$O05=L$r07$&$3$H$,$G$-$k$+$i$G$9!#(B
<code>User-Agent</code> $B%X%C%@$r(B "MSIE"
(<code>\b</code> $B$O!VC18l$N6-3&!W$r0UL#$7$^$9(B) $B$NDI2CJ8;z$G8!::$7$F!"(B
$B$3$l0JA0$K@_Dj$7$?@)8B$r:F$S2r=|$7$^$9!#(B</p>
<p>3 番目の <directive module="mod_setenvif">BrowserMatch</directive>
ディレクティブで、推測したユーザーエージェントを修正します。
なぜなら Microsoft Internet Explorer "Mozilla/4" と特定されますが、
これらは実際には圧縮を扱うことができるからです。
<code>User-Agent</code> ヘッダを "MSIE"
(<code>\b</code> は「単語の境界」を意味します) の追加文字で検査して、
これ以前に設定した制限を再び解除します。</p>
<note><title>$BCm(B</title>
<code>DEFLATE</code> $B%U%#%k%?$OI,$:!"(BPHP $B$d(B SSI $B$H$$$C$?(B RESOURCE
$B%U%#%k%?$N8e$K$J$j$^$9!#(B
DEFLATE $B%U%#%k%?$OFbItE*$J%5%V%j%/%(%9%H$r4XCN$7$^$;$s!#(B
<note><title></title>
<code>DEFLATE</code> フィルタは必ず、PHP や SSI といった RESOURCE
フィルタの後になります。
DEFLATE フィルタは内部的なサブリクエストを関知しません。
</note>
<note><title>$BCm(B</title>
<directive module="core">SetEnv</directive> $B$G@_Dj$5$l$k(B
<code>force-gzip</code> $B4D6-JQ?t$,$"$j$^$9$,!"$3$l$O(B
$B%V%i%&%6$N(B accept-encoding $B@_Dj$rL5;k$7!"05=L$7$?=PNO$r$7$^$9!#(B
<note><title></title>
<directive module="core">SetEnv</directive> で設定される
<code>force-gzip</code> 環境変数がありますが、これは
ブラウザの accept-encoding 設定を無視し、圧縮した出力をします。
</note>
</section>
<section id="inflate"><title>$B=PNO$N?-D9(B</title>
<p><module>mod_deflate</module> $B%b%8%e!<%k$O!"(Bgzip $B05=L$5$l$?%l%9%]%s%9(B
$BK\J8$r(B inflate/uncompress $B$9$k%U%#%k%?$bDs6!$7$F$$$^$9!#(B
$B$3$N5!G=$rM-8z$K$9$k$K$O!"(B<directive module="core">SetOutputFilter</directive>
$B$d(B <directive module="mod_mime">AddOutputFilter</directive> $B$r;H$C$F!"(B
<code>INFLATE</code> $B%U%#%k%?$r=PNO%U%#%k%?%A%'%$%s$KA^F~$7$^$9!#(B
$BNc$($P<!$N$h$&$K$7$^$9!#(B</p>
<section id="inflate"><title>出力の伸長</title>
<p><module>mod_deflate</module> モジュールは、gzip 圧縮されたレスポンス
本文を inflate/uncompress するフィルタも提供しています。
この機能を有効にするには、<directive module="core">SetOutputFilter</directive>
<directive module="mod_mime">AddOutputFilter</directive> を使って、
<code>INFLATE</code> フィルタを出力フィルタチェインに挿入します。
例えば次のようにします。</p>
<example>
&lt;Location /dav-area&gt;<br />
@@ -168,18 +168,18 @@
&lt;/Location&gt;
</example>
<p>$B$3$NNc$G$O!"(Bexample.com $B$+$i$N(B gzip $B05=L$5$l$?=PNO$r?-D9$7!"(B
$B$=$NB>$N%U%#%k%?$,$5$i$K$=$N=PNO$r=hM}$G$-$k$h$&$K$7$^$9!#(B
<p>この例では、example.com からの gzip 圧縮された出力を伸長し、
その他のフィルタがさらにその出力を処理できるようにします。
</p>
</section>
<section id="input"><title>$BF~NO$N?-D%(B</title>
<p><module>mod_deflate</module> $B%b%8%e!<%k$O!"(Bgzip
$B$G05=L$5$l$?%j%/%(%9%HK\BN$r?-D%$9$k%U%#%k%?$bDs6!$7$F$$$^$9!#(B
$B$3$N5!G=$rM-8z$K$9$k$K$O!"(B<directive module="core">SetInputFilter</directive>
$B$+(B <directive module="mod_mime">AddInputFilter</directive> $B$r;HMQ$7$F!"(B
<code>DEFLATE</code> $B%U%#%k%?$rF~NO%U%#%k%?%A%'%$%s$KAH$_9~$_$^$9!#(B
$BNc$($P<!$N$h$&$K$J$j$^$9!#(B</p>
<section id="input"><title>入力の伸張</title>
<p><module>mod_deflate</module> モジュールは、gzip
で圧縮されたリクエスト本体を伸張するフィルタも提供しています。
この機能を有効にするには、<directive module="core">SetInputFilter</directive>
<directive module="mod_mime">AddInputFilter</directive> を使用して、
<code>DEFLATE</code> フィルタを入力フィルタチェインに組み込みます。
例えば次のようになります。</p>
<example>
&lt;Location /dav-area&gt;<br />
@@ -189,92 +189,92 @@
&lt;/Location&gt;
</example>
<p>$B$3$N@_Dj$G$"$l$P!"(B<code>Content-Encoding: gzip</code>
$B%X%C%@$r4^$`%j%/%(%9%H$,Mh$k$H!"K\BN$O<+F0E*$K?-D%$5$l$^$9!#(B
gzip $B%j%/%(%9%HK\BN$rAw?.$9$k%V%i%&%6$O$"$^$j$"$j$^$;$s!#(B
$B$7$+$7!"Nc$($P(B <a href="http://www.webdav.org">WebDAV</a>
$B%/%i%$%"%s%H$N4v$D$+$J$I!"FCJL$J%"%W%j%1!<%7%g%s$G%j%/%(%9%H$N(B
$B05=L$r<B:]$K%5%]!<%H$7$F$$$k$b$N$b$"$j$^$9!#(B</p>
<p>この設定であれば、<code>Content-Encoding: gzip</code>
ヘッダを含むリクエストが来ると、本体は自動的に伸張されます。
gzip リクエスト本体を送信するブラウザはあまりありません。
しかし、例えば <a href="http://www.webdav.org">WebDAV</a>
クライアントの幾つかなど、特別なアプリケーションでリクエストの
圧縮を実際にサポートしているものもあります。</p>
<note type="warning"><title>Content-Length $B$K4X$9$kCm0U(B</title>
<p>$B%j%/%(%9%HK\BN$=$l<+BN$rI>2A$9$k>l9g$O!"(B<em><code>Content-Length</code>
$B%X%C%@$r?.MQ$7$J$$$G$/$@$5$$(B</em>$B!#(BContent-Length $B%X%C%@$O!"(B
$B%/%i%$%"%s%H$+$iAw?.$5$l$k%G!<%?$ND9$5$rH?1G$7$F$$$k$N$G$"$C$F!"(B
$B?-D%$5$l$?%G!<%?%9%H%j!<%`$N(B<em>$B%P%$%H%+%&%s%H$G$O$"$j$^$;$s(B</em>$B!#(B</p>
<note type="warning"><title>Content-Length に関する注意</title>
<p>リクエスト本体それ自体を評価する場合は、<em><code>Content-Length</code>
ヘッダを信用しないでください</em>。Content-Length ヘッダは、
クライアントから送信されるデータの長さを反映しているのであって、
伸張されたデータストリームの<em>バイトカウントではありません</em>。</p>
</note>
</section>
</section>
<section id="proxies"><title>Proxy $B%5!<%P$G$N07$$(B</title>
<section id="proxies"><title>Proxy サーバでの扱い</title>
<p><module>mod_deflate</module> $B%b%8%e!<%k$O(B <code>Vary: Accept-Encoding</code>
HTTP $B1~Ez%X%C%@$rAw?.$7$F!"E,@Z$J(B <code>Accept-Encoding</code>
$B%j%/%(%9%H%X%C%@$rAw?.$9$k%/%i%$%"%s%H$KBP$7$F$N$_!"(B
$B%W%m%/%7%5!<%P$,%-%c%C%7%e$7$?1~Ez$rAw?.$9$k$h$&$KCm0U$r4-5/$7$^$9!#(B
$B$3$N$h$&$K$7$F!"05=L$r07$&$3$H$N$G$-$J$$%/%i%$%"%s%H$K(B
$B05=L$5$l$?FbMF$,Aw$i$l$k$3$H$N$J$$$h$&$K$7$^$9!#(B</p>
<p><module>mod_deflate</module> モジュールは <code>Vary: Accept-Encoding</code>
HTTP 応答ヘッダを送信して、適切な <code>Accept-Encoding</code>
リクエストヘッダを送信するクライアントに対してのみ、
プロクシサーバがキャッシュした応答を送信するように注意を喚起します。
このようにして、圧縮を扱うことのできないクライアントに
圧縮された内容が送られることのないようにします。</p>
<p>$B$b$7FCJL$K2?$+$K0MB8$7$F=|30$7$?$$>l9g!"Nc$($P(B <code>User-Agent</code>
$B%X%C%@$J$I$K0MB8$7$F$$$k>l9g!"<jF0$G(B <code>Vary</code> $B%X%C%@$r@_Dj$7$F!"(B
$BDI2C$N@)8B$K$D$$$F%W%m%/%7%5!<%P$KCm0U$r9T$J$&I,MW$,$"$j$^$9!#(B
$BNc$($P(B <code>User-Agent</code> $B$K0MB8$7$F(B <code>DEFLATE</code>
$B$rDI2C$9$kE57?E*$J@_Dj$G$O!"<!$N$h$&$KDI2C$9$k$3$H$K$J$j$^$9!#(B</p>
<p>もし特別に何かに依存して除外したい場合、例えば <code>User-Agent</code>
ヘッダなどに依存している場合、手動で <code>Vary</code> ヘッダを設定して、
追加の制限についてプロクシサーバに注意を行なう必要があります。
例えば <code>User-Agent</code> に依存して <code>DEFLATE</code>
を追加する典型的な設定では、次のように追加することになります。</p>
<example>
Header append Vary User-Agent
</example>
<p>$B%j%/%(%9%H%X%C%@0J30$N>pJs(B (<em>$BNc$($P(B</em> HTTP $B%P!<%8%g%s(B)
$B$K0MB8$7$F05=L$9$k$+$I$&$+7h$a$k>l9g!"(B
<code>Vary</code> $B%X%C%@$r(B <code>*</code> $B$K@_Dj$9$kI,MW$,$"$j$^$9!#(B
$B$3$N$h$&$K$9$k$H!";EMM$K=`5r$7$?%W%m%/%7$O%-%c%C%7%e$rA4$/9T$J$o$J$/$J$j$^$9!#(B</p>
<p>リクエストヘッダ以外の情報 (<em>例えば</em> HTTP バージョン)
に依存して圧縮するかどうか決める場合、
<code>Vary</code> ヘッダを <code>*</code> に設定する必要があります。
このようにすると、仕様に準拠したプロクシはキャッシュを全く行なわなくなります。</p>
<example><title>$BNc(B</title>
<example><title></title>
Header set Vary *
</example>
</section>
<directivesynopsis>
<name>DeflateFilterNote</name>
<description>$B%m%.%s%0MQ$K05=LHf$r%a%b$KDI2C(B</description>
<description>ロギング用に圧縮比をメモに追加</description>
<syntax>DeflateFilterNote [<var>type</var>] <var>notename</var></syntax>
<contextlist><context>server config</context>
<context>virtual host</context></contextlist>
<compatibility><var>type</var> is available since Apache 2.0.45</compatibility>
<usage>
<p><directive>DeflateFilterNote</directive> $B%G%#%l%/%F%#%V$O(B
$B05=LHf$K4X$9$k%a%b$,%j%/%(%9%H$KIU2C$5$l$k$3$H$r;XDj$7$^$9!#(B
$B%a%b(B (note) $B$NL>A0$O%G%#%l%/%F%#%V$K;XDj$5$l$?CM$G$9!#(B
$B%a%b$O(B<a href="../logs.html#accesslog">$B%"%/%;%9%m%0(B</a>$B$K(B
$BCM$r5-O?$7!"E}7W$r<h$kL\E*$K$b;H$($^$9!#(B</p>
<p><directive>DeflateFilterNote</directive> ディレクティブは
圧縮比に関するメモがリクエストに付加されることを指定します。
メモ (note) の名前はディレクティブに指定された値です。
メモは<a href="../logs.html#accesslog">アクセスログ</a>に
値を記録し、統計を取る目的にも使えます。</p>
<example><title>$BNc(B</title>
<example><title></title>
DeflateFilterNote ratio<br />
<br />
LogFormat '"%r" %b (%{ratio}n) "%{User-agent}i"' deflate<br />
CustomLog logs/deflate_log deflate
</example>
<p>$B%m%0$+$i$b$C$H@:L)$JCM$rCj=P$7$?$$>l9g$O!"(B<var>type</var>
$B0z?t$r;HMQ$7$F!"%G!<%?%?%$%W$r%m%0$N%a%b$H$7$F;D$9$h$&$K;XDj$G$-$^$9!#(B
<var>type</var> $B$O<!$N$&$A$N0l$D$G$9!#(B</p>
<p>ログからもっと精密な値を抽出したい場合は、<var>type</var>
引数を使用して、データタイプをログのメモとして残すように指定できます。
<var>type</var> は次のうちの一つです。</p>
<dl>
<dt><code>Input</code></dt>
<dd>$B%U%#%k%?$NF~NO%9%H%j!<%`$N%P%$%H%+%&%s%H$r%a%b$KJ]B8$9$k!#(B</dd>
<dd>フィルタの入力ストリームのバイトカウントをメモに保存する。</dd>
<dt><code>Output</code></dt>
<dd>$B%U%#%k%?$N=PNO%9%H%j!<%`$N%P%$%H%+%&%s%H$r%a%b$KJ]B8$9$k!#(B</dd>
<dd>フィルタの出力ストリームのバイトカウントをメモに保存する。</dd>
<dt><code>Ratio</code></dt>
<dd>$B05=LN((B (<code>$B=PNO(B / $BF~NO(B * 100</code>) $B$r%a%b$KJ]B8$9$k!#(B
<var>type</var> $B0z?t$r>JN,$7$?>l9g$O!"$3$l$,%G%U%)%k%H$H$J$j$^$9!#(B</dd>
<dd>圧縮率 (<code>出力 / 入力 * 100</code>) をメモに保存する。
<var>type</var> 引数を省略した場合は、これがデフォルトとなります。</dd>
</dl>
<p>$B$^$H$a$k$H!"<!$N$h$&$K%m%0$r<h$k$3$H$K$J$k$G$7$g$&!#(B</p>
<p>まとめると、次のようにログを取ることになるでしょう。</p>
<example><title>$B@:L)$J%m%0:N<h(B</title>
<example><title>精密なログ採取</title>
DeflateFilterNote Input instream<br />
DeflateFilterNote Output outstream<br />
DeflateFilterNote Ratio ratio<br />
@@ -288,66 +288,66 @@
<directivesynopsis>
<name>DeflateBufferSize</name>
<description>zlib $B$,0lEY$K05=L$9$k2t$NBg$-$5(B</description>
<description>zlib が一度に圧縮する塊の大きさ</description>
<syntax>DeflateBufferSize <var>value</var></syntax>
<default>DeflateBufferSize 8096</default>
<contextlist><context>server config</context>
<context>virtual host</context></contextlist>
<usage>
<p><directive>DeflateBufferSize</directive> $B%G%#%l%/%F%#%V$O(B
zlib $B$,0lEY$K05=L$9$k2t$NBg$-$5$r%P%$%HC10L$G;XDj$7$^$9!#(B</p>
<p><directive>DeflateBufferSize</directive> ディレクティブは
zlib が一度に圧縮する塊の大きさをバイト単位で指定します。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>DeflateWindowSize</name>
<description>Zlib $B$N05=LMQ%&%#%s%I%&$NBg$-$5(B</description>
<description>Zlib の圧縮用ウィンドウの大きさ</description>
<syntax>DeflateWindowSize <var>value</var></syntax>
<default>DeflateWindowSize 15</default>
<contextlist><context>server config</context>
<context>virtual host</context></contextlist>
<usage>
<p><directive>DeflateWindowSize</directive> $B%G%#%l%/%F%#%V$O(B
zlib $B$N05=LMQ%&%#%s%I%&(B ($BLuCm(B: zlib $B$G;HMQ$5$l$kMzNr%P%C%U%!(B)
$B$NBg$-$5$r;XDj$7$^$9(B (1 $B$+$i(B 15 $B$N4V$NCM(B)$B!#(B
$B0lHLE*$KBg$-$J%&%#%s%I%&%5%$%:$r;HMQ$9$k$H05=LN($,8~>e$7$^$9!#(B
($BLuCm(B: 2 $B$rDl$H$9$kBP?t$NCM$K$J$j$^$9!#(B
8 $B$+$i(B 15 $B$K$9$k$N$,NI$$$G$7$g$&!#(B)</p>
<p><directive>DeflateWindowSize</directive> ディレクティブは
zlib の圧縮用ウィンドウ (訳注: zlib で使用される履歴バッファ)
の大きさを指定します (1 から 15 の間の値)。
一般的に大きなウィンドウサイズを使用すると圧縮率が向上します。
(訳注: 2 を底とする対数の値になります。
8 から 15 にするのが良いでしょう。)</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>DeflateMemLevel</name>
<description>zlib $B$,05=L$K;H$&%a%b%j$N%l%Y%k$r;XDj(B</description>
<description>zlib が圧縮に使うメモリのレベルを指定</description>
<syntax>DeflateMemLevel <var>value</var></syntax>
<default>DeflateMemLevel 9</default>
<contextlist><context>server config</context>
<context>virtual host</context></contextlist>
<usage>
<p><directive>DeflateMemLevel</directive> $B%G%#%l%/%F%#%V$O(B
zlib $B$,05=L$K;H$&%a%b%j$N%l%Y%k$r@_Dj$7$^$9(B (1 $B$+$i(B 9 $B$N4V$NCM(B)$B!#(B
($BLuCm(B: 2 $B$rDl$H$9$kBP?t$NCM$K$J$j$^$9!#(B
8 $BDxEY$,NI$$$G$7$g$&!#(B)</p>
<p><directive>DeflateMemLevel</directive> ディレクティブは
zlib が圧縮に使うメモリのレベルを設定します (1 から 9 の間の値)。
(訳注: 2 を底とする対数の値になります。
8 程度が良いでしょう。)</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>DeflateCompressionLevel</name>
<description>$B=PNO$KBP$7$F9T$J$&05=L$NDxEY(B</description>
<description>出力に対して行なう圧縮の程度</description>
<syntax>DeflateCompressionLevel <var>value</var></syntax>
<default>Zlib $B$N%G%U%)%k%H(B</default>
<default>Zlib のデフォルト</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>This directive is available since Apache 2.0.45</compatibility>
<usage>
<p><directive>DeflateCompressionLevel</directive> $B%G%#%l%/%F%#%V$O(B
$B05=L$NDxEY$r@_Dj$7$^$9!#Bg$-$JCM$G$O!"$h$j05=L$,9T$J$o$l$^$9$,!"(B
CPU $B;q8;$r>CHq$7$^$9!#(B</p>
<p>$BCM$O(B 1 ($BDc05=L(B) $B$+$i(B 9 ($B9b05=L(B) $B$G$9!#(B</p>
<p><directive>DeflateCompressionLevel</directive> ディレクティブは
圧縮の程度を設定します。大きな値では、より圧縮が行なわれますが、
CPU 資源を消費します。</p>
<p>値は 1 (低圧縮) から 9 (高圧縮) です。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -23,44 +23,44 @@
<modulesynopsis metafile="mod_dir.xml.meta">
<name>mod_dir</name>
<description>$B!V:G8e$N%9%i%C%7%e!W$N%j%@%$%l%/%H$H!"%G%#%l%/%H%j$N(B
$B%$%s%G%C%/%9%U%!%$%k$r07$&5!G=$rDs6!$9$k(B</description>
<description>「最後のスラッシュ」のリダイレクトと、ディレクトリの
インデックスファイルを扱う機能を提供する</description>
<status>Base</status>
<sourcefile>mod_dir.c</sourcefile>
<identifier>dir_module</identifier>
<summary>
<p>$B%G%#%l%/%H%j%$%s%G%C%/%9$O!"<!$NFs$D$N$&$A$I$A$i$+$,MxMQ$5$l$^$9(B:</p>
<p>ディレクトリインデックスは、次の二つのうちどちらかが利用されます:</p>
<ul>
<li>$B0l$DL\$O!"%f!<%6$,:n@.$7$?%U%!%$%k$rMQ$$$k$b$N$G!"DL>o(B
<code>index.html</code> $B$H$$$&%U%!%$%kL>$r;H$$$^$9!#$3$N%U%!%$%kL>$O!"(B
<directive module="mod_dir">DirectoryIndex</directive> $B%G%#%l%/%F%#%V$G(B
$B;XDj$9$k$3$H$,$G$-$^$9!#$3$N5!G=$O(B <module>mod_dir</module>
$B%b%8%e!<%k$GDs6!$5$l$^$9!#(B</li>
<li>一つ目は、ユーザが作成したファイルを用いるもので、通常
<code>index.html</code> というファイル名を使います。このファイル名は、
<directive module="mod_dir">DirectoryIndex</directive> ディレクティブで
指定することができます。この機能は <module>mod_dir</module>
モジュールで提供されます。</li>
<li>$B$b$&0l$D$NJ}K!$O!"(B
$B%5!<%P$K$h$C$F<+F0E*$K@8@.$5$l$k%G%#%l%/%H%j%j%9%H$rMQ$$$k>l9g$G$9!#(B
$B$3$N5!G=$O!"(B<module>mod_autoindex</module>
$B%b%8%e!<%k$K$h$jDs6!$5$l$^$9!#(B</li>
<li>もう一つの方法は、
サーバによって自動的に生成されるディレクトリリストを用いる場合です。
この機能は、<module>mod_autoindex</module>
モジュールにより提供されます。</li>
</ul>
<p>$B<+F0E*$J%$%s%G%C%/%9@8@.5!G=$r:o=|(B ($B$b$7$/$O8r49(B)
$B$G$-$k$h$&$K!"$3$NFs$D$N5!G=$OJ,N%$5$l$F$$$^$9!#(B</p>
<p>自動的なインデックス生成機能を削除 (もしくは交換)
できるように、この二つの機能は分離されています。</p>
<p>$B$J$*(B <code>http://servername/foo/dirname</code> $B$H$$$&(B URL
$B$X$N%j%/%(%9%H$,$"$C$?:]$K!"(B<code>dirname</code>
$B$H$$$&%G%#%l%/%H%j$,$"$l$P!"!V:G8e$K%9%i%C%7%e$r$D$1$?7A!W$N(B URL
$B$X$N%j%@%$%l%/%H$rAw=P$7$^$9!#(B
$B%G%#%l%/%H%j$X$N%"%/%;%9$O%9%i%C%7%e$G=*$o$C$F$$$kI,MW$,$"$j!"(B
<code>mod_dir</code> $B$O!"(B<code>http://servername/foo/dirname/</code>
$B$X$N%j%@%$%l%/%H$rAw=P$9$k$3$H$K$J$j$^$9!#(B</p>
<p>なお <code>http://servername/foo/dirname</code> という URL
へのリクエストがあった際に、<code>dirname</code>
というディレクトリがあれば、「最後にスラッシュをつけた形」の URL
へのリダイレクトを送出します。
ディレクトリへのアクセスはスラッシュで終わっている必要があり、
<code>mod_dir</code> は、<code>http://servername/foo/dirname/</code>
へのリダイレクトを送出することになります。</p>
</summary>
<directivesynopsis>
<name>DirectoryIndex</name>
<description>$B%/%i%$%"%s%H$,%G%#%l%/%H%j$r%j%/%(%9%H$7$?$H$-$KD4$Y$k(B
$B%j%=!<%9$N%j%9%H(B</description>
<description>クライアントがディレクトリをリクエストしたときに調べる
リソースのリスト</description>
<syntax>DirectoryIndex
<var>local-url</var> [<var>local-url</var>] ...</syntax>
<default>DirectoryIndex index.html</default>
@@ -70,72 +70,72 @@
<usage>
<p>
$B%/%i%$%"%s%H$,!"%G%#%l%/%H%jL>$N:G8e$K!V(B/$B!W(B
$B$r;XDj$7$F%G%#%l%/%H%j%$%s%G%C%/%9$rMW5a$9$k>l9g$KC5$9%j%=!<%9$N%j%9%H$r(B
<directive>DirectoryIndex</directive> $B%G%#%l%/%F%#%V$G@_Dj$7$^$9!#(B
クライアントが、ディレクトリ名の最後に「/」
を指定してディレクトリインデックスを要求する場合に探すリソースのリストを
<directive>DirectoryIndex</directive> ディレクティブで設定します。
<var>Local-url</var>
$B$O!"%j%/%(%9%H$5$l$?%G%#%l%/%H%j$KBP1~$9$k!"%5!<%P>e$N%I%-%e%a%s%H$N(B
(% $B%(%s%3!<%I$5$l$?(B) URL $B$G!"IaDL$O%G%#%l%/%H%jCf$N%U%!%$%k$NL>A0$G$9!#(B
$BJ#?t$N(B URL $B$,@_Dj$5$l$?>l9g$K$O!":G=i$K8+$D$+$C$?$b$N$rJV$7$^$9!#(B
$B$=$l$i$,8+$D$+$i$:!"(B<code>Indexes</code>
$B%*%W%7%g%s$,%;%C%H$5$l$F$$$k>l9g!"%G%#%l%/%H%j$N%j%9%H$r@8@.$7$^$9!#(B
は、リクエストされたディレクトリに対応する、サーバ上のドキュメントの
(% エンコードされた) URL で、普通はディレクトリ中のファイルの名前です。
複数の URL が設定された場合には、最初に見つかったものを返します。
それらが見つからず、<code>Indexes</code>
オプションがセットされている場合、ディレクトリのリストを生成します。
</p>
<example><title>$BNc(B</title>
<example><title></title>
DirectoryIndex index.html
</example>
<p><code>http://myserver/docs/</code> $B$X$N%"%/%;%9$,$"$j!"(B
<p><code>http://myserver/docs/</code> へのアクセスがあり、
<code>http://myserver/docs/index.html</code>
$B$,B8:_$9$l$P!"$3$N(B URL $B$,JV$5$l$^$9!#(B
$B$b$7B8:_$7$J$1$l$P!"%G%#%l%/%H%j$N%j%9%H$,JV$5$l$^$9!#(B</p>
が存在すれば、この URL が返されます。
もし存在しなければ、ディレクトリのリストが返されます。</p>
<p>$BCm(B: $B%I%-%e%a%s%H$,F1$8%G%#%l%/%H%jFb$KB8:_$9$k$OI,MW$"$j$^$;$s!#(B
<p>注: ドキュメントが同じディレクトリ内に存在するは必要ありません。
</p>
<example>
DirectoryIndex index.html index.txt /cgi-bin/index.pl
</example>
<p>$B$H$7$?>l9g!"(B<code>index.html</code> $B$H(B <code>index.txt</code>
$B$N$I$A$i$b%G%#%l%/%H%jFb$KB8:_$7$J$$>l9g!"(BCGI $B%9%/%j%W%H(B
<code>/cgi-bin/index.pl</code> $B$,<B9T$5$l$^$9!#(B</p>
<p>とした場合、<code>index.html</code> <code>index.txt</code>
のどちらもディレクトリ内に存在しない場合、CGI スクリプト
<code>/cgi-bin/index.pl</code> が実行されます。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>DirectorySlash</name>
<description>$B%Q%9KvHx$N%9%i%C%7%e$G%j%@%$%l%/%H$9$k$+$I$&$+$N%*%s%*%U$r%H%0%k$5$;$k(B</description>
<description>パス末尾のスラッシュでリダイレクトするかどうかのオンオフをトグルさせる</description>
<syntax>DirectorySlash On|Off</syntax>
<default>DirectorySlash On</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>Indexes</override>
<compatibility>2.0.51 $B0J9_(B</compatibility>
<compatibility>2.0.51 以降</compatibility>
<usage>
<p>$BMW5a$N$"$C$?(B URL $B$,%G%#%l%/%H%j$r;X$9$+$I$&$+$r!"(B
<module>mod_dir</module> $B$,D4@0$9$k$Y$-$+$I$&$+$r(B
<p>要求のあった URL がディレクトリを指すかどうかを、
<module>mod_dir</module> が調整するべきかどうかを
<directive>DirectorySlash</directive>
$B%G%#%l%/%F%#%V$G@_Dj$7$^$9!#(B</p>
ディレクティブで設定します。</p>
<p>$BE57?E*$K$O!"%f!<%6$,KvHx$N%9%i%C%7%eL5$7$G%j%=!<%9$X$N%j%/%(%9%H$rH/9T$7!"(B
$B$=$7$F!"$=$N%j%=!<%9$,%G%#%l%/%H%j$r;X$7$F$$$?>l9g!"(B<module>mod_dir</module>
$B$O!"KvHx$K%9%i%C%7%e$r(B<em>$BIU2C(B</em>$B$7$?>e$GF1$8%j%=!<%9$K%j%@%$%l%/%H$5$;$^$9!#(B
$B$3$N5sF0$K$O4v$D$+M}M3$,$"$j$^$9(B:</p>
<p>典型的には、ユーザが末尾のスラッシュ無しでリソースへのリクエストを発行し、
そして、そのリソースがディレクトリを指していた場合、<module>mod_dir</module>
は、末尾にスラッシュを<em>付加</em>した上で同じリソースにリダイレクトさせます。
この挙動には幾つか理由があります:</p>
<ul>
<li>$B%f!<%6$O!":G=*E*$K$O%j%=!<%9$NJLL>(B URL $B$r%j%/%(%9%H$9$k$3$H$K$J$k!#(B</li>
<li><module>mod_autoindex</module> $B$,4|BTDL$j$KF0$/!#(B<module>mod_autoindex</module>
$B$N@8@.$9$k%j%s%/$O%Q%9$r=PNO$7$^$;$s$N$G!"%9%i%C%7%e$,$J$$>l9g$O4V0c$C$?%Q%9$r(B
$B;X$7$F$7$^$&$3$H$K$J$j$^$9!#(B</li>
<li><directive module="mod_dir">DirectoryIndex</directive> $B$O!"(B
$BKvHx$K%9%i%C%7%e$,$D$$$F$$$k%j%/%(%9%H$K$D$$$F(B<em>$B$N$_(B</em>$BI>2A$5$l$k!#(B</li>
<li>HTML $B%Z!<%8$NAjBP(B URL $B;2>H$,@5$7$/F0:n$9$k!#(B</li>
<li>ユーザは、最終的にはリソースの別名 URL をリクエストすることになる。</li>
<li><module>mod_autoindex</module> が期待通りに動く。<module>mod_autoindex</module>
の生成するリンクはパスを出力しませんので、スラッシュがない場合は間違ったパスを
指してしまうことになります。</li>
<li><directive module="mod_dir">DirectoryIndex</directive> は、
末尾にスラッシュがついているリクエストについて<em>のみ</em>評価される。</li>
<li>HTML ページの相対 URL 参照が正しく動作する。</li>
</ul>
<p>$B$H$O$$$(!"$b$7$3$&$$$C$?8z2L$rK>$^$J$$!"$+$D!"(B
$B>e5-$N$h$&$JM}M3$,Ev$F$O$^$i$J$$>l9g$O!"%j%@%$%l%/%H$r<!$N$h$&$K$7$F%*%U$K$G$-$^$9(B:</p>
<p>とはいえ、もしこういった効果を望まない、かつ、
上記のような理由が当てはまらない場合は、リダイレクトを次のようにしてオフにできます:</p>
<example>
# see security warning below!<br />
@@ -147,16 +147,16 @@
&lt;/Location&gt;
</example>
<note type="warning"><title>$B%;%-%e%j%F%#7Y9p(B</title>
<p>$BKvHx$N%9%i%C%7%e$G$N%j%@%$%l%/%H$r%*%U$K$9$k$H!"7k2LE*$K>pJsO31L$r(B
$B>7$/$3$H$K$J$k$+$b$7$l$^$;$s!#(B
<module>mod_autoindex</module> $B$,M-8z(B (<code>Options +Indexes</code>) $B$G!"(B
<directive module="mod_dir">DirectoryIndex</directive> $B$,M-8z$J%j%=!<%9(B ($BNc$($P(B
<code>index.html</code>) $B$r;X$7$F$$$F!"$^$?!"MW5a$N$"$C$?(B URL $B$KFCJL$J(B
$B%O%s%I%i$,@_Dj$5$l$F$$$J$$>l9g$r9M$($F$_$F$/$@$5$$!#(B
$B$3$N>l9gKvHx$K%9%i%C%7%e$N$D$$$F$$$k%j%/%(%9%H$KBP$7$F$O(B <code>index.html</code>
$B%U%!%$%k$,JV$5$l$^$9!#(B<strong>$B$7$+$7%9%i%C%7%e$N$J$$%j%/%(%9%H$KBP$7$F$O!"(B
$B%G%#%l%/%H%j$NFbMF0lMw$rJV$7$F$7$^$$$^$9!#(B</strong></p>
<note type="warning"><title>セキュリティ警告</title>
<p>末尾のスラッシュでのリダイレクトをオフにすると、結果的に情報漏洩を
招くことになるかもしれません。
<module>mod_autoindex</module> が有効 (<code>Options +Indexes</code>) で、
<directive module="mod_dir">DirectoryIndex</directive> が有効なリソース (例えば
<code>index.html</code>) を指していて、また、要求のあった URL に特別な
ハンドラが設定されていない場合を考えてみてください。
この場合末尾にスラッシュのついているリクエストに対しては <code>index.html</code>
ファイルが返されます。<strong>しかしスラッシュのないリクエストに対しては、
ディレクトリの内容一覧を返してしまいます。</strong></p>
</note>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990:515267 (outdated) -->
@@ -23,46 +23,46 @@
<modulesynopsis metafile="mod_disk_cache.xml.meta">
<name>mod_disk_cache</name>
<description>URI $B$r%-!<$K$7$?%3%s%F%s%D%-%c%C%7%e%9%H%l!<%84IM}(B</description>
<description>URI をキーにしたコンテンツキャッシュストレージ管理</description>
<status>Extension</status>
<sourcefile>mod_disk_cache.c</sourcefile>
<identifier>disk_cache_module</identifier>
<summary>
<p><module>mod_disk_cache</module> $B$O%G%#%9%/$r;HMQ$7$?%9%H%l!<%8(B
$B4IM}5!9=$r<BAu$7$F$$$^$9!#<g$K(B
<module>mod_cache</module> $B$HAH$_9g$o$;$F;H$o$l$^$9!#(B</p>
<p><module>mod_disk_cache</module> はディスクを使用したストレージ
管理機構を実装しています。主に
<module>mod_cache</module> と組み合わせて使われます。</p>
<p>$B%3%s%F%s%D$N%-%c%C%7%e$X$NJ]B8$H<hF@$O(B URI $B$K4p$E$$$?%-!<$,;H$o$l$^$9!#(B
$B%"%/%;%9J]8n$N$+$1$i$l$F$$$k%3%s%F%s%D$O%-%c%C%7%e$5$l$^$;$s!#(B</p>
<p>コンテンツのキャッシュへの保存と取得は URI に基づいたキーが使われます。
アクセス保護のかけられているコンテンツはキャッシュされません。</p>
<p>$B%-%c%C%7%e$NBg$-$5$r:GBg%l%Y%k$G0];}$9$k$?$a$K(B
<program>htcacheclean</program> $B$r;H$&$3$H$,$G$-$^$9!#(B</p>
<p>キャッシュの大きさを最大レベルで維持するために
<program>htcacheclean</program> を使うことができます。</p>
<note><title>$BCm(B:</title>
<p><module>mod_disk_cache</module> $B$O(B
<module>mod_cache</module> $B$rI,MW$H$7$^$9(B</p>
<note><title>:</title>
<p><module>mod_disk_cache</module>
<module>mod_cache</module> を必要とします</p>
</note>
</summary>
<directivesynopsis>
<name>CacheRoot</name>
<description>$B%-%c%C%7%e%U%!%$%k$,J]4I$5$l$k%k!<%H%G%#%l%/%H%j(B</description>
<description>キャッシュファイルが保管されるルートディレクトリ</description>
<syntax>CacheRoot <var>directory</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p><directive>CacheRoot</directive> $B%G%#%l%/%F%#%V$O%-%c%C%7%e%U%!%$%k$r(B
$BJ]4I$9$k$?$a$N%G%#%9%/>e$N%G%#%l%/%H%j$r;XDj$7$^$9!#(B<module
>mod_disk_cache</module> $B%b%8%e!<%k$,(B Apache $B%5!<%P$K%m!<%I$5$l$F(B
$B$$$k$+!"AH$_9~$^$l$F$$$l$P!"$3$N%G%#%l%/%F%#%V$O(B<em>$BI,$:(B</em>
$BDj5A$7$J$1$l$P$J$j$^$;$s!#(B
<directive>CacheRoot</directive> $B$NCM$r;XDj$7$J$1$l$P!"(B
$B@_Dj%U%!%$%k$N=hM}$G%(%i!<$K$J$j$^$9!#(B<directive
module="mod_disk_cache">CacheDirLevels</directive> $B%G%#%l%/%F%#%V$H(B <directive
module="mod_disk_cache">CacheDirLength</directive> $B%G%#%l%/%F%#%V$,(B
$B;XDj$5$l$?%k!<%H%G%#%l%/%H%j2<$N%G%#%l%/%H%j9=@.$rDj5A$7$^$9!#(B</p>
<p><directive>CacheRoot</directive> ディレクティブはキャッシュファイルを
保管するためのディスク上のディレクトリを指定します。<module
>mod_disk_cache</module> モジュールが Apache サーバにロードされて
いるか、組み込まれていれば、このディレクティブは<em>必ず</em>
定義しなければなりません。
<directive>CacheRoot</directive> の値を指定しなければ、
設定ファイルの処理でエラーになります。<directive
module="mod_disk_cache">CacheDirLevels</directive> ディレクティブと <directive
module="mod_disk_cache">CacheDirLength</directive> ディレクティブが
指定されたルートディレクトリ下のディレクトリ構成を定義します。</p>
<example>
CacheRoot c:/cacheroot
@@ -72,22 +72,22 @@
<directivesynopsis>
<name>CacheDirLevels</name>
<description>$B%-%c%C%7%e$N%5%V%G%#%l%/%H%j$N?<$5$N?t(B</description>
<description>キャッシュのサブディレクトリの深さの数</description>
<syntax>CacheDirLevels <var>levels</var></syntax>
<default>CacheDirLevels 3</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p><directive>CacheDirLevels</directive> $B%G%#%l%/%F%#%V$O%-%c%C%7%e$N(B
$B%5%V%G%#%l%/%H%j$N?<$5$r@_Dj$7$^$9!#%-%c%C%7%e%G!<%?$O(B <directive
module="mod_disk_cache">CacheRoot</directive> $B%G%#%l%/%H%j$+$i(B
$B$3$N%G%#%l%/%H%j$N?<$5J,2<$N%G%#%l%/%H%j$KJ]B8$5$l$^$9!#(B</p>
<p><directive>CacheDirLevels</directive> ディレクティブはキャッシュの
サブディレクトリの深さを設定します。キャッシュデータは <directive
module="mod_disk_cache">CacheRoot</directive> ディレクトリから
このディレクトリの深さ分下のディレクトリに保存されます。</p>
<note>
<p><directive>CacheDirLevels</directive>*
<directive module="mod_disk_cache">CacheDirLength</directive> $B$N(B
$B7k2L$O(B 20 $B0JFb$G$J$1$l$P$J$j$^$;$s!#(B</p>
<directive module="mod_disk_cache">CacheDirLength</directive>
結果は 20 以内でなければなりません。</p>
</note>
<example>
@@ -98,20 +98,20 @@
<directivesynopsis>
<name>CacheDirLength</name>
<description>$B%5%V%G%#%l%/%H%jL>$NJ8;z?t(B</description>
<description>サブディレクトリ名の文字数</description>
<syntax>CacheDirLength <var>length</var></syntax>
<default>CacheDirLength 2</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p><directive>CacheDirLength</directive> $B%G%#%l%/%F%#%V$O%-%c%C%7%e(B
$B3,AX$N3F%5%V%G%#%l%/%H%j$NJ8;z?t$r@_Dj$7$^$9!#(B</p>
<p><directive>CacheDirLength</directive> ディレクティブはキャッシュ
階層の各サブディレクトリの文字数を設定します。</p>
<note>
<p><directive>CacheDirLevels</directive>*
<directive module="mod_disk_cache">CacheDirLength</directive> $B$N(B
$B7k2L$O(B 20 $B0JFb$G$J$1$l$P$J$j$^$;$s!#(B</p>
<directive module="mod_disk_cache">CacheDirLength</directive>
結果は 20 以内でなければなりません。</p>
</note>
<example>
@@ -122,15 +122,15 @@
<directivesynopsis>
<name>CacheMinFileSize</name>
<description>$B%-%c%C%7%e$KJ]4I$5$l$k%I%-%e%a%s%H$N:G>.8B$N(B ($B%P%$%H$G$N(B) $BBg$-$5(B</description>
<description>キャッシュに保管されるドキュメントの最小限の (バイトでの) 大きさ</description>
<syntax>CacheMinFileSize <var>bytes</var></syntax>
<default>CacheMinFileSize 1</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p><directive>CacheMinFileSize</directive> $B%G%#%l%/%F%#%V$O!"%I%-%e%a%s%H$r(B
$B%-%c%C%7%e$9$k$+$I$&$+$rH=Dj$9$k!":G>.$N%5%$%:$r%P%$%H?t$G@_Dj$7$^$9!#(B</p>
<p><directive>CacheMinFileSize</directive> ディレクティブは、ドキュメントを
キャッシュするかどうかを判定する、最小のサイズをバイト数で設定します。</p>
<example>
CacheMinFileSize 64
@@ -140,15 +140,15 @@
<directivesynopsis>
<name>CacheMaxFileSize</name>
<description>$B%-%c%C%7%e$KJ]4I$5$l$k%I%-%e%a%s%H$N:GBg$N(B ($B%P%$%H$G$N(B) $B%5%$%:(B</description>
<description>キャッシュに保管されるドキュメントの最大の (バイトでの) サイズ</description>
<syntax>CacheMaxFileSize <var>bytes</var></syntax>
<default>CacheMaxFileSize 1000000</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p><directive>CacheMaxFileSize</directive> $B%G%#%l%/%F%#%V$O!"%I%-%e%a%s%H$r(B
$B%-%c%C%7%e$9$k$+$I$&$+$rH=Dj$9$k!":GBg$N%5%$%:$r%P%$%H?t$G@_Dj$7$^$9!#(B</p>
<p><directive>CacheMaxFileSize</directive> ディレクティブは、ドキュメントを
キャッシュするかどうかを判定する、最大のサイズをバイト数で設定します。</p>
<example>
CacheMaxFileSize 64000

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420993:559006 (outdated) -->
@@ -23,45 +23,45 @@
<modulesynopsis metafile="mod_dumpio.xml.meta">
<name>mod_dumpio</name>
<description>$BK>$`$h$&$K$9$Y$F$N(B I/O $B$r%(%i!<%m%0$K%@%s%W$9$k(B</description>
<description>望むようにすべての I/O をエラーログにダンプする</description>
<status>Extension</status>
<sourcefile>mod_dumpio.c</sourcefile>
<identifier>dumpio_module</identifier>
<summary>
<p><code>mod_dumpio</code> $B$r;H$&$H!"(BApache $B$,<u$1<h$C$?$9$Y$F$NF~NO$H(B
Apache $B$K$h$jAw$i$l$?$9$Y$F$N=PNO$H$N!"N>J}$b$7$/$O$I$A$i$+0lJ}$r!"(B
$B%(%i!<%m%0%U%!%$%k$K%m%0<}=8(B <transnote>$B%@%s%W(B dump</transnote>
$B$G$-$^$9!#(B</p>
<p><code>mod_dumpio</code> を使うと、Apache が受け取ったすべての入力と
Apache により送られたすべての出力との、両方もしくはどちらか一方を、
エラーログファイルにログ収集 <transnote>ダンプ dump</transnote>
できます。</p>
<p>$B%G!<%?$N%m%.%s%0$O!"(BSSL $BI|9f2=$ND>8e(B ($BF~NO(B) $B$H(B SSL
$B0E9f2=$ND>A0(B ($B=PNO(B) $B$K9T$J$o$l$^$9!#$4A[A|$NDL$j!"(B
$B$3$N%b%8%e!<%k$O$H$F$D$b$J$$%G!<%?NL$r=PNO$7$^$9$N$G!"(B
$BLdBj$r%G%P%C%0$7$F$$$k$H$-$K$N$_;HMQ$9$k$h$&$K$7$F$/$@$5$$!#(B</p>
<p>データのロギングは、SSL 復号化の直後 (入力) と SSL
暗号化の直前 (出力) に行なわれます。ご想像の通り、
このモジュールはとてつもないデータ量を出力しますので、
問題をデバッグしているときにのみ使用するようにしてください。</p>
</summary>
<section id="enable">
<title>dumpio $B%5%]!<%H$rM-8z$K$9$k(B</title>
<title>dumpio サポートを有効にする</title>
<p>$B$3$N%b%8%e!<%k$rM-8z$K$9$k$K$O!"%b%8%e!<%k$,%3%s%Q%$%k$5$l$F$$$F!"(B
$B<B9T$9$k(B Apache $B$N@_Dj$G%5!<%P$KAH$_9~$^$l$F$$$kI,MW$,$"$j$^$9!#(B
$B%m%.%s%05!G=$O!"0J2<$N%G%#%l%/%F%#%V$r;H$C$FM-8z$K$7$?$j(B
$BL58z$K$7$?$j$G$-$^$9!#(B</p>
<p>このモジュールを有効にするには、モジュールがコンパイルされていて、
実行する Apache の設定でサーバに組み込まれている必要があります。
ロギング機能は、以下のディレクティブを使って有効にしたり
無効にしたりできます。</p>
</section>
<directivesynopsis>
<name>DumpIOInput</name>
<description>$B%(%i!<%m%0$K$9$Y$F$NF~NO%G!<%?$r%@%s%W(B</description>
<description>エラーログにすべての入力データをダンプ</description>
<syntax>DumpIOInput On|Off</syntax>
<default>DumpIOInput Off</default>
<contextlist><context>server config</context></contextlist>
<compatibility>DumpIOInput $B$O(B Apache 2.1.3 $B0J9_$N$_$G;HMQ2DG=(B</compatibility>
<compatibility>DumpIOInput Apache 2.1.3 以降のみで使用可能</compatibility>
<usage>
<p>$B$9$Y$F$NF~NO$N%@%s%W$rM-8z$K$7$^$9!#(B</p>
<p>すべての入力のダンプを有効にします。</p>
<example><title>$BNc(B</title>
<example><title></title>
DumpIOInput On
</example>
</usage>
@@ -71,16 +71,16 @@
<directivesynopsis>
<name>DumpIOOutput</name>
<description>$B%(%i!<%m%0$K$9$Y$F$N=PNO%G!<%?$r%@%s%W(B</description>
<description>エラーログにすべての出力データをダンプ</description>
<syntax>DumpIOOutput On|Off</syntax>
<default>DumpIOOutput Off</default>
<contextlist><context>server config</context></contextlist>
<compatibility>DumpIOOutput $B$O(B Apache 2.1.3 $B0J9_$G$N$_;HMQ2DG=(B</compatibility>
<compatibility>DumpIOOutput Apache 2.1.3 以降でのみ使用可能</compatibility>
<usage>
<p>$B$9$Y$F$N=PNO$N%@%s%W$rM-8z$K$7$^$9!#(B</p>
<p>すべての出力のダンプを有効にします。</p>
<example><title>$BNc(B</title>
<example><title></title>
DumpIOOutput On
</example>
</usage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990:654507 (outdated) -->
@@ -23,33 +23,33 @@
<modulesynopsis metafile="mod_echo.xml.meta">
<name>mod_echo</name>
<description>$B%W%m%H%3%k%b%8%e!<%k$N35MW$r<($9$?$a$NC1=c$J%(%3!<%5!<%P(B
<description>プロトコルモジュールの概要を示すための単純なエコーサーバ
</description>
<status>Experimental</status>
<sourcefile>mod_echo.c</sourcefile>
<identifier>echo_module</identifier>
<compatibility>Apache 2.0 $B0J9_(B</compatibility>
<compatibility>Apache 2.0 以降</compatibility>
<summary>
<p>$BK\%b%8%e!<%k$O%3%s%;%W%H$rEA$($k$?$a$N%W%m%H%3%k%b%8%e!<%k$N(B
$B<BAuNc$H$J$C$F$$$^$9!#C1=c$J%(%3!<%5!<%P$rDs6!$7$^$9!#(B
Telnet $B$G@\B3$7!"J8;zNs$rAw?.$9$k$H!"%(%3!<$rJV$7$^$9!#(B</p>
<p>本モジュールはコンセプトを伝えるためのプロトコルモジュールの
実装例となっています。単純なエコーサーバを提供します。
Telnet で接続し、文字列を送信すると、エコーを返します。</p>
</summary>
<directivesynopsis>
<name>ProtocolEcho</name>
<description>$B%(%3!<%5!<%P$NM-8zL58z$r@_Dj$7$^$9!#(B</description>
<description>エコーサーバの有効無効を設定します。</description>
<syntax>ProtocolEcho On|Off</syntax>
<contextlist><context>server config</context>
<context>virtual host</context></contextlist>
<compatibility>Apache 2.0 $B0J9_(B</compatibility>
<compatibility>Apache 2.0 以降</compatibility>
<usage>
<p><directive>ProtocolEcho</directive> $B%G%#%l%/%F%#%V$G(B
$B%(%3!<%5!<%P$NM-8zL58z$r@_Dj$7$^$9!#(B</p>
<p><directive>ProtocolEcho</directive> ディレクティブで
エコーサーバの有効無効を設定します。</p>
<example><title>$BNc(B</title>
<example><title></title>
ProtocolEcho On
</example>
</usage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -23,23 +23,23 @@
<modulesynopsis metafile="mod_env.xml.meta">
<name>mod_env</name>
<description>CGI $B%9%/%j%W%H5Z$S(B SSI
$B%Z!<%8$KEO$5$l$k4D6-JQ?t$rJQ99$9$k5!G=$rDs6!$9$k(B</description>
<description>CGI スクリプト及び SSI
ページに渡される環境変数を変更する機能を提供する</description>
<status>Base</status>
<sourcefile>mod_env.c</sourcefile>
<identifier>env_module</identifier>
<summary>
<p>$B$3$N%b%8%e!<%k$K$h$j(B CGI $B%9%/%j%W%H$H(B SSI
$B%Z!<%8$KE,MQ$5$l$k4D6-JQ?t$r@)8f$9$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B
$B4D6-JQ?t$O(B <program>httpd</program> $B%W%m%;%9$r5/F0$7$?%7%'%k$+$iEO$5$l$^$9!#$^$?!"(B
$B@_Dj%U%!%$%k$G4D6-JQ?t$r@_Dj$7$?$j!":o=|$7$?$j$9$k$3$H$,$G$-$^$9!#(B
<p>このモジュールにより CGI スクリプトと SSI
ページに適用される環境変数を制御することができるようになります。
環境変数は <program>httpd</program> プロセスを起動したシェルから渡されます。また、
設定ファイルで環境変数を設定したり、削除したりすることができます。
</p>
</summary>
<seealso><a href="../env.html">$B4D6-JQ?t(B</a></seealso>
<seealso><a href="../env.html">環境変数</a></seealso>
<directivesynopsis>
<name>PassEnv</name>
<description>$B%7%'%k$+$i$N4D6-JQ?t$rEO$9(B</description>
<description>シェルからの環境変数を渡す</description>
<syntax>PassEnv <var>env-variable</var> [<var>env-variable</var>]
...</syntax>
<contextlist>
@@ -49,10 +49,10 @@
<usage>
<p><program>httpd</program> $B%W%m%;%9$r5/F0$7$?%7%'%k$N4D6-$+$i(B CGI $B%9%/%j%W%H$H(B
SSI $B%Z!<%8$KEO$94D6-JQ?t$r0l$D0J>e;XDj$7$^$9!#(B</p>
<p><program>httpd</program> プロセスを起動したシェルの環境から CGI スクリプトと
SSI ページに渡す環境変数を一つ以上指定します。</p>
<example><title>$BNc(B</title>
<example><title></title>
PassEnv LD_LIBRARY_PATH
</example>
</usage>
@@ -60,17 +60,17 @@
<directivesynopsis>
<name>SetEnv</name>
<description>$B4D6-JQ?t$r@_Dj$9$k(B</description>
<description>環境変数を設定する</description>
<syntax>SetEnv <var>env-variable</var> <var>value</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>FileInfo</override>
<usage>
<p>$B4D6-JQ?t$r@_Dj$7!"$=$l$r(B CGI $B%9%/%j%W%H$H(B SSI
$B%Z!<%8$KEO$9$h$&$K$7$^$9!#(B</p>
<p>環境変数を設定し、それを CGI スクリプトと SSI
ページに渡すようにします。</p>
<example><title>$BNc(B</title>
<example><title></title>
SetEnv SPECIAL_PATH /foo/bin
</example>
</usage>
@@ -78,7 +78,7 @@
<directivesynopsis>
<name>UnsetEnv</name>
<description>$B4D6-$+$iJQ?t$r<h$j=|$/(B</description>
<description>環境から変数を取り除く</description>
<syntax>UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
...</syntax>
<contextlist>
@@ -87,10 +87,10 @@
<override>FileInfo</override>
<usage>
<p>CGI $B%9%/%j%W%H$H(B SSI
$B%Z!<%8$KEO$5$l$k4D6-JQ?t$+$i;XDj$5$l$?4D6-JQ?t$r<h$j=|$-$^$9!#(B</p>
<p>CGI スクリプトと SSI
ページに渡される環境変数から指定された環境変数を取り除きます。</p>
<example><title>$BNc(B</title>
<example><title></title>
UnsetEnv LD_LIBRARY_PATH
</example>
</usage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -23,38 +23,38 @@
<modulesynopsis metafile="mod_expires.xml.meta">
<name>mod_expires</name>
<description>$B%f!<%6$N;XDj$7$?4p=`$K4p$E$$$?(B <code>Expires</code> $B$H(B
<code>Cache-Control</code> HTTP $B%X%C%@$N@8@.(B</description>
<description>ユーザの指定した基準に基づいた <code>Expires</code>
<code>Cache-Control</code> HTTP ヘッダの生成</description>
<status>Extension</status>
<sourcefile>mod_expires.c</sourcefile>
<identifier>expires_module</identifier>
<summary>
<p>$B$3$N%b%8%e!<%k$O%5!<%P1~Ez$N(B <code>Expires</code> HTTP $B%X%C%@(B
$B$H(B <code>Cache-Control</code> $B%X%C%@$N(B <code>max-age</code> $B%G%#%l%/%F%#%V$N(B
$B@_Dj$r@)8f$7$^$9!#85$N%U%!%$%k$,:n@.$5$l$?;~9o$^$?$O(B
$B%/%i%$%"%s%H$N%"%/%;%9;~9o$N$I$A$i$+$K4p$E$$$F4|8B@Z$lF|$r(B
$B@_Dj$9$k$3$H$,$G$-$^$9!#(B</p>
<p>このモジュールはサーバ応答の <code>Expires</code> HTTP ヘッダ
<code>Cache-Control</code> ヘッダの <code>max-age</code> ディレクティブの
設定を制御します。元のファイルが作成された時刻または
クライアントのアクセス時刻のどちらかに基づいて期限切れ日を
設定することができます。</p>
<p>$B$3$l$i$N%X%C%@$O%/%i%$%"%s%H$KJ8=q$N(B
$BM-8z@-$H7QB3@-$r;X<($7$^$9!#J8=q$,%-%c%C%7%e$5$l$?>l9g$K$O!"(B
$B;XDj;~9o$KC#$9$k$^$G$O!"85$N>l=j$+$i<hF@$9$kBe$o$j$K(B
$B%-%c%C%7%e$5$l$F$$$k$b$N$r;H$&$3$H$,$G$-$^$9!#$=$N8e$O!"(B
$B%-%c%C%7%e$K$"$k%3%T!<$O4|8B@Z$l(B (expired) $B$GL58z$G$"$k$H$5$l!"(B
$B85$N>l=j$+$i?7$7$$$b$N$r<hF@$9$kI,MW$,$"$j$^$9!#(B</p>
<p>これらのヘッダはクライアントに文書の
有効性と継続性を指示します。文書がキャッシュされた場合には、
指定時刻に達するまでは、元の場所から取得する代わりに
キャッシュされているものを使うことができます。その後は、
キャッシュにあるコピーは期限切れ (expired) で無効であるとされ、
元の場所から新しいものを取得する必要があります。</p>
<p><code>max-age</code> $B0J30(B (<a
<p><code>max-age</code> 以外 (<a
href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">RFC
2616 section 14.9</a> $B;2>H(B) $B$N(B <code>Cache-Control</code> $B$N%G%#%l%/%F%#%V$r(B
$BA`:n$9$k$K$O(B <directive
module="mod_headers">Header</directive> $B%G%#%l%/%F%#%V$r(B
$B;H$&$3$H$,$G$-$^$9!#(B</p></summary>
2616 section 14.9</a> 参照) の <code>Cache-Control</code> のディレクティブを
操作するには <directive
module="mod_headers">Header</directive> ディレクティブを
使うことができます。</p></summary>
<section id="AltSyn"><title>$BBeBX4|4V;XDj9=J8(B</title>
<section id="AltSyn"><title>代替期間指定構文</title>
<p><directive module="mod_expires">ExpiresDefault</directive> $B%G%#%l%/%F%#%V$H(B
<directive module="mod_expires">ExpiresByType</directive> $B%G%#%l%/%F%#%V$O(B
$B0J2<$N$h$jFI$_0W$$9=J8$r;H$C$FDj5A$9$k$3$H$,$G$-$^$9(B:</p>
<p><directive module="mod_expires">ExpiresDefault</directive> ディレクティブと
<directive module="mod_expires">ExpiresByType</directive> ディレクティブは
以下のより読み易い構文を使って定義することができます:</p>
<example>
ExpiresDefault "&lt;base&gt; [plus] {&lt;num&gt;
@@ -63,19 +63,19 @@
{&lt;num&gt; &lt;type&gt;}*"
</example>
<p>&lt;base&gt; $B$O0J2<$N$I$l$+$G$9(B:</p>
<p>&lt;base&gt; は以下のどれかです:</p>
<ul>
<li><code>access</code></li>
<li><code>now</code> ('<code>access</code>' $B$HEy2A(B)</li>
<li><code>now</code> ('<code>access</code>' と等価)</li>
<li><code>modification</code></li>
</ul>
<p><code>plus</code> $B%-!<%o!<%I$O>JN,2DG=$G$9!#(B&lt;num&gt;
$B$O(B (<code>atoi()</code> $B$,<u$1IU$1$k(B) $B@0?tCM!"(B
&lt;type&gt; $B$O0J2<$N$I$l$+$G$9(B:</p>
<p><code>plus</code> キーワードは省略可能です。&lt;num&gt;
(<code>atoi()</code> が受け付ける) 整数値、
&lt;type&gt; は以下のどれかです:</p>
<ul>
<li><code>years</code></li>
@@ -87,8 +87,8 @@
<li><code>seconds</code></li>
</ul>
<p>$BNc$($P!"0J2<$N%G%#%l%/%F%#%V$O$I$l$b%G%U%)%k%H$GJ8=q$,%"%/%;%9$N(B 1 $B%v7n8e$K(B
$B4|8B$,@Z$l$k$h$&$K$9$k$?$a$K;H$($^$9(B:</p>
<p>例えば、以下のディレクティブはどれもデフォルトで文書がアクセスの 1 ヶ月後に
期限が切れるようにするために使えます:</p>
<example>
ExpiresDefault "access plus 1 month"<br />
@@ -96,9 +96,9 @@
ExpiresDefault "access plus 30 days"
</example>
<p>$B4|8B@Z$l;~9o$O$$$/$D$+(B
'&lt;num&gt; &lt;type&gt;' $B@a$rDI2C$9$k$3$H$G$h$j:Y$+$/(B
$B@)8f$9$k$3$H$,$G$-$^$9(B:</p>
<p>期限切れ時刻はいくつか
'&lt;num&gt; &lt;type&gt;' 節を追加することでより細かく
制御することができます:</p>
<example>
ExpiresByType text/html "access plus 1 month 15
@@ -107,14 +107,14 @@
minutes"
</example>
<p>$B=$@5;~9o$K4p$E$$$?@_Dj$r;HMQ$7$F$$$k>l9g!"(BExpires $B%X%C%@$O(B
$B%G%#%9%/$N%U%!%$%k0J30$N%3%s%F%s%D$K$O(B<strong>$BDI2C$5$l$J$$(B</strong>$B$3$H$KCm0U(B
$B$7$F$/$@$5$$!#$=$N$h$&$J%3%s%F%s%D$K$O=$@5;~9o$OB8:_$7$J$$$+$i$G$9!#(B</p>
<p>修正時刻に基づいた設定を使用している場合、Expires ヘッダは
ディスクのファイル以外のコンテンツには<strong>追加されない</strong>ことに注意
してください。そのようなコンテンツには修正時刻は存在しないからです。</p>
</section>
<directivesynopsis>
<name>ExpiresActive</name>
<description><code>Expires</code> $B%X%C%@$N@8@.$rM-8z$K$9$k(B</description>
<description><code>Expires</code> ヘッダの生成を有効にする</description>
<syntax>ExpiresActive On|Off</syntax>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
@@ -122,30 +122,30 @@
<override>Indexes</override>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$OBP1~$9$k%I%-%e%a%s%H$NNN0h$G(B
<code>Expires</code> $B$H(B <code>Cache-Control</code>$B%X%C%@$r(B
$BM-8z$K$9$k$+L58z$K$9$k$+$r7h$a$^$9!#(B
($BNc$($P!"(B<code>.htaccess</code> $B%U%!%$%k$G$O$=$N%G%#%l%/%H%j$N(B
$BJ8=q$N$_$KE,MQ$5$l$k$H$$$&$3$H$G$9!#(B) <code>Off</code> $B$K(B
$B@_Dj$5$l$?>l9g$OBP1~NN0h$G$=$l$i$N%X%C%@$O(B
$B@8@.$5$l$^$;$s(B (<code>.htaccess</code> $B$,%5!<%P@_Dj%U%!%$%k$N@_Dj$r(B
$B>e=q$-$9$k!"$H$$$&$h$&$J2<0L%l%Y%k$G$N>e=q$-$,$5$l$F$$$J$1$l$P(B)$B!#(B
<code>On</code> $B$K@_Dj$5$l$F$$$l$P!"%X%C%@$O(B <directive
module="mod_expires">ExpiresByType</directive> $B%G%#%l%/%F%#%V$H(B
<directive module="mod_expires">ExpiresDefault</directive> $B%G%#%l%/%F%#%V(B
$B$N4p=`$K=>$C$FJ8=q$K%X%C%@$rDI2C$7$^$9(B ($B3F%G%#%l%/%F%#%V;2>H(B)$B!#(B</p>
<p>このディレクティブは対応するドキュメントの領域で
<code>Expires</code> <code>Cache-Control</code>ヘッダを
有効にするか無効にするかを決めます。
(例えば、<code>.htaccess</code> ファイルではそのディレクトリの
文書のみに適用されるということです。) <code>Off</code>
設定された場合は対応領域でそれらのヘッダは
生成されません (<code>.htaccess</code> がサーバ設定ファイルの設定を
上書きする、というような下位レベルでの上書きがされていなければ)。
<code>On</code> に設定されていれば、ヘッダは <directive
module="mod_expires">ExpiresByType</directive> ディレクティブと
<directive module="mod_expires">ExpiresDefault</directive> ディレクティブ
の基準に従って文書にヘッダを追加します (各ディレクティブ参照)。</p>
<p>$B$3$N%G%#%l%/%F%#%V$O(B <code>Expires</code> $B$H(B
<code>Cache-Control</code> $B%X%C%@$NB8:_$r(B
$BJ]>Z$9$k$o$1$G$O$J$$$3$H$KCm0U$7$F$/$@$5$$!#4p=`$,K~$?$5$l$F(B
$B$$$J$$>l9g$O%X%C%@$ODI2C$5$l$:!"7k2L$H$7$F$3$N%G%#%l%/%F%#%V$,(B
$B;XDj$5$l$F$$$J$+$C$?$+$N$h$&$K$5$(8+$($k$3$H$K$J$j$^$9!#(B</p>
<p>このディレクティブは <code>Expires</code>
<code>Cache-Control</code> ヘッダの存在を
保証するわけではないことに注意してください。基準が満たされて
いない場合はヘッダは追加されず、結果としてこのディレクティブが
指定されていなかったかのようにさえ見えることになります。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>ExpiresByType</name>
<description>MIME $B%?%$%W$K$h$C$F@_Dj$5$l$k(B <code>Expires</code> $B%X%C%@$NCM(B</description>
<description>MIME タイプによって設定される <code>Expires</code> ヘッダの値</description>
<syntax>ExpiresByType <var>MIME-type</var>
<var>&lt;code&gt;seconds</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
@@ -153,31 +153,31 @@
<override>Indexes</override>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O;XDj$5$l$?%?%$%W$N%I%-%e%a%s%H(B
(<em>$BNc$($P(B</em> <code>text/html</code>)
$B$KBP$7$F@8@.$5$l$k(B <code>Expires</code> $B%X%C%@$H(B <code>Cache-Control</code>
$B%X%C%@$N(B <code>max-age</code> $B%G%#%l%/%F%#%V$NCM$rDj5A$7$^$9!#(B
$BFs$DL\$N0z?t$O4|8B@Z$l$NF|;~$r@8@.$9$k$?$a$N4p=`;~9o$KDI2C$5$l$k(B
$BIC?t$r@_Dj$7$^$9!#(B<code>Cache-Control:
max-age</code> $B$O4|8B@Z$l$N;~9o$+$i%j%/%(%9%H;~9o$r0z$$$?$b$N$rIC$G(B
$BI=$9$3$H$G@8@.$5$l$^$9!#(B</p>
<p>このディレクティブは指定されたタイプのドキュメント
(<em>例えば</em> <code>text/html</code>)
に対して生成される <code>Expires</code> ヘッダと <code>Cache-Control</code>
ヘッダの <code>max-age</code> ディレクティブの値を定義します。
二つ目の引数は期限切れの日時を生成するための基準時刻に追加される
秒数を設定します。<code>Cache-Control:
max-age</code> は期限切れの時刻からリクエスト時刻を引いたものを秒で
表すことで生成されます。</p>
<p>$B4p=`;~9o$O%U%!%$%k$N:G=*=$@5;~9o$+!"%/%i%$%"%s%H$N%I%-%e%a%s%H$X$N(B
$B%"%/%;%9;~9o$G$9!#$I$A$i$r;H$&$Y$-$+$O(B <code><var>&lt;code&gt;</var></code>
$B$K$h$C$F;XDj$7$^$9!#(B<code>M</code> $B$O4p=`;~9o$H$7$F(B
$B%U%!%$%k$N:G=*=$@5;~9o$r$H$$$&0UL#$G!"(B<code>A</code> $B$O%/%i%$%"%s%H$N(B
$B%"%/%;%9;~9o$r;H$&$H$$$&0UL#$K$J$j$^$9!#(B</p>
<p>基準時刻はファイルの最終修正時刻か、クライアントのドキュメントへの
アクセス時刻です。どちらを使うべきかは <code><var>&lt;code&gt;</var></code>
によって指定します。<code>M</code> は基準時刻として
ファイルの最終修正時刻をという意味で、<code>A</code> はクライアントの
アクセス時刻を使うという意味になります。</p>
<p>$B8z2L$K$OHyL/$J0c$$$,$"$j$^$9!#(B<code>M</code> $B$,;HMQ$5$l$?>l9g$O!"(B
$B$9$Y$F$N%-%c%C%7%e$K$"$k8=:_$N%I%-%e%a%s%H%-%c%C%7%e$OF1;~$K4|8B$,(B
$B@Z$l$^$9!#$3$l$OF1$8(B URL $B$KKh=5>o$KCV$+$l$kJs$;$N$h$&$J$b$N$K$O(B
$BHs>o$KM-8z$G$9!#(B<code>A</code> $B$,;HMQ$5$l$?>l9g$O!"4|8B@Z$l$N(B
$B;~4V$O3F%/%i%$%"%s%H$h$C$F0[$J$j$^$9!#$3$l$O$"$^$jJQ99$5$l$J$$(B
$B2hA|%U%!%$%k$J$I!"FC$K4XO"$9$k%I%-%e%a%s%H72$,$9$Y$FF1$82hA|$r(B
$B;2>H$9$k$H$-(B (<em>$B$9$J$o$A(B</em>$B2hA|$,Hf3SE*C;$$4|4VFb$K7+$jJV$7(B
$B%"%/%;%9$5$l$k$H$-(B) $B$KM-8z$G$9!#(B</p>
<p>効果には微妙な違いがあります。<code>M</code> が使用された場合は、
すべてのキャッシュにある現在のドキュメントキャッシュは同時に期限が
切れます。これは同じ URL に毎週常に置かれる報せのようなものには
非常に有効です。<code>A</code> が使用された場合は、期限切れの
時間は各クライアントよって異なります。これはあまり変更されない
画像ファイルなど、特に関連するドキュメント群がすべて同じ画像を
参照するとき (<em>すなわち</em>画像が比較的短い期間内に繰り返し
アクセスされるとき) に有効です。</p>
<example><title>$BNc(B:</title>
<example><title>:</title>
# enable expirations<br />
ExpiresActive On<br />
# expire GIF images after a month in the client's cache<br />
@@ -187,32 +187,32 @@
ExpiresByType text/html M604800
</example>
<p>$B$3$N%G%#%l%/%F%#%V$O(B <code>ExpiresActive On</code> $B$,;XDj$5$l$F$$$k(B
$B$H$-$N$_M-8z$G$"$k$3$H$KCm0U$7$F$/$@$5$$!#$3$l$O!"(B
$B;XDj$5$l$?(B MIME $B%?%$%W$KBP$7$F(B<em>$B$N$_(B</em> <directive
module="mod_expires">ExpiresDefault</directive> $B%G%#%l%/%F%#%V$G(B
$B@_Dj$5$l$?4|8B@Z$l4|F|$r>e=q$-$7$^$9!#(B</p>
<p>このディレクティブは <code>ExpiresActive On</code> が指定されている
ときのみ有効であることに注意してください。これは、
指定された MIME タイプに対して<em>のみ</em> <directive
module="mod_expires">ExpiresDefault</directive> ディレクティブで
設定された期限切れ期日を上書きします。</p>
<p>$B$3$NJ8=q$NA0$NJ}$G@bL@$5$l$F$$$k(B<a href="#AltSyn">$BBeBX9=J8(B</a>$B$r(B
$B;H$C$F4|8B@Z$l4|F|$N7W;;J}K!$r;XDj$9$k$3$H$b$G$-$^$9!#(B</p>
<p>この文書の前の方で説明されている<a href="#AltSyn">代替構文</a>を
使って期限切れ期日の計算方法を指定することもできます。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>ExpiresDefault</name>
<description>$B4|8B@Z$l4|F|$r7W;;$9$k%G%U%)%k%H%"%k%4%j%:%`(B</description>
<description>期限切れ期日を計算するデフォルトアルゴリズム</description>
<syntax>ExpiresDefault <var>&lt;code&gt;seconds</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>Indexes</override>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$OBP1~$9$kHO0O$N$9$Y$F$N%I%-%e%a%s%H$KBP$7$F(B
$B%G%U%)%k%H$N4|8B@Z$l4|F|$N7W;;%"%k%4%j%:%`$r@_Dj$7$^$9!#(B<directive
module="mod_expires">ExpiresByType</directive> $B%G%#%l%/%F%#%V$K$h$C$F(B
$B%?%$%WKh$K>e=q$-$9$k$3$H$,$G$-$^$9!#0z?t$N9=J8$O$=$N%G%#%l%/%F%#%V$N(B
$B@bL@$r;2>H$7$F$/$@$5$$!#$^$?!"(B<a href="#AltSyn">$BBeBX9=J8(B</a>$B$b(B
$B;2>H$7$F$/$@$5$$!#(B</p>
<p>このディレクティブは対応する範囲のすべてのドキュメントに対して
デフォルトの期限切れ期日の計算アルゴリズムを設定します。<directive
module="mod_expires">ExpiresByType</directive> ディレクティブによって
タイプ毎に上書きすることができます。引数の構文はそのディレクティブの
説明を参照してください。また、<a href="#AltSyn">代替構文</a>も
参照してください。</p>
</usage>
</directivesynopsis>
</modulesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -23,39 +23,39 @@
<modulesynopsis metafile="mod_ext_filter.xml.meta">
<name>mod_ext_filter</name>
<description>$B%l%9%]%s%9$N%\%G%#$r%/%i%$%"%s%H$KAw$kA0$K30It%W%m%0%i%`$G=hM}$9$k(B</description>
<description>レスポンスのボディをクライアントに送る前に外部プログラムで処理する</description>
<status>Extension</status>
<sourcefile>mod_ext_filter.c</sourcefile>
<identifier>ext_filter_module</identifier>
<summary>
<p><module>mod_ext_filter</module> $B$G$O(B <a href="../filter.html">$B%U%#%k%?(B</a>
$B$N47$l?F$7$s$@C1=c$J%W%m%0%i%_%s%0%b%G%k$,Ds6!$5$l$^$9!#$3$N%b%8%e!<%k$r(B
$B;H$($P!"I8=`F~NO$+$iFI$_9~$s$G!"I8=`=PNO$K=q$-=P$9%W%m%0%i%`(B
($B$9$J$o$A(B Unix $B7A<0$N%U%#%k%?%3%^%s%I(B) $B$r(B Apache $B$N%U%#%k%?$K$9$k$3$H$,(B
$B$G$-$^$9!#$3$N%U%#%k%?$N5!9=$O!"(BApache API $B8~$1$K=q$+$l$?(B Apache
$B%5!<%P%W%m%;%9Fb$G<B9T$5$l$k@lMQ$N%U%#%k%?$h$j$b$:$C$HCY$$$G$9$,!"(B
$B0J2<$N$h$&$JMxE@$b$"$j$^$9!#(B</p>
<p><module>mod_ext_filter</module> では <a href="../filter.html">フィルタ</a>
の慣れ親しんだ単純なプログラミングモデルが提供されます。このモジュールを
使えば、標準入力から読み込んで、標準出力に書き出すプログラム
(すなわち Unix 形式のフィルタコマンド) を Apache のフィルタにすることが
できます。このフィルタの機構は、Apache API 向けに書かれた Apache
サーバプロセス内で実行される専用のフィルタよりもずっと遅いですが、
以下のような利点もあります。</p>
<ul>
<li>$B$:$C$H%7%s%W%k$J%W%m%0%i%_%s%0%b%G%k(B</li>
<li>ずっとシンプルなプログラミングモデル</li>
<li>$B%W%m%0%i%`$,I8=`F~NO$+$iFI$s$GI8=`=PNO$K=q$/$b$N$G$"$k8B$j!"(B
$B$I$s$J%W%m%0%i%`8@8l$d%9%/%j%W%H8@8l$G$b;H$&$3$H$,$G$-$k(B</li>
<li>プログラムが標準入力から読んで標準出力に書くものである限り、
どんなプログラム言語やスクリプト言語でも使うことができる</li>
<li>$B4{B8$N%W%m%0%i%`$rJQ99$9$k$3$H$J$/(B Apache $B$N%U%#%k%?$H$7$F(B
$B;H$&$3$H$,$G$-$k(B</li>
<li>既存のプログラムを変更することなく Apache のフィルタとして
使うことができる</li>
</ul>
<p>$B@-G=$NLdBj$K$h$j<B1?MQ$KE,$5$J$$$H$7$F$b!"%U%#%k%?$N%W%m%H%?%$%WMQ$N(B
$B4D6-$H$7$F$O(B <module>mod_ext_filter</module> $B$O;H$($^$9!#(B</p>
<p>性能の問題により実運用に適さないとしても、フィルタのプロトタイプ用の
環境としては <module>mod_ext_filter</module> は使えます。</p>
</summary>
<seealso><a href="../filter.html">$B%U%#%k%?(B</a></seealso>
<seealso><a href="../filter.html">フィルタ</a></seealso>
<section id="examples"><title>$BNc(B</title>
<section id="examples"><title></title>
<section><title>$BB>$N%?%$%W$N%l%9%]%s%9$+$i(B HTML $B$r@8@.$9$k(B</title>
<section><title>他のタイプのレスポンスから HTML を生成する</title>
<example>
# mod_ext_filter directive to define a filter<br />
# to HTML-ize text/c files using the external<br />
@@ -86,9 +86,9 @@
</example>
</section>
<section><title>$B%3%s%F%s%H%(%s%3!<%G%#%s%0$N%U%#%k%?$r<BAu$9$k(B</title>
<p>$BCm(B: $B$3$N(B gzip $B$NNc$O%G%bMQ$G$9!#<BMQE*$J<BAu$O(B
<module>mod_deflate</module> $B$r;2>H$7$F$/$@$5$$!#(B</p>
<section><title>コンテントエンコーディングのフィルタを実装する</title>
<p>注: この gzip の例はデモ用です。実用的な実装は
<module>mod_deflate</module> を参照してください。</p>
<example>
# mod_ext_filter directive to define the external filter<br />
@@ -108,7 +108,7 @@
</example>
</section>
<section><title>$B%5!<%P$rCY$/$9$k(B</title>
<section><title>サーバを遅くする</title>
<example>
# mod_ext_filter directive to define a filter<br />
# which runs everything through cat; cat doesn't<br />
@@ -130,7 +130,7 @@
</example>
</section>
<section><title>sed $B$r;H$C$F1~EzCf$N%F%-%9%H$rCV49$9$k(B</title>
<section><title>sed を使って応答中のテキストを置換する</title>
<example>
# mod_ext_filter directive to define a filter which<br />
# replaces text in the response<br />
@@ -150,7 +150,7 @@
</example>
</section>
<section><title>$BJL$N%U%#%k%?$N%H%l!<%9(B</title>
<section><title>別のフィルタのトレース</title>
<example>
# Trace the data read and written by mod_deflate<br />
# for a particular client (IP 192.168.1.31)<br />
@@ -183,7 +183,7 @@
&lt;/Directory&gt;
</example>
<example><title>$B%G!<%?$r%H%l!<%9$9$k%U%#%k%?(B:</title>
<example><title>データをトレースするフィルタ:</title>
#!/usr/local/bin/perl -w<br />
use strict;<br />
<br />
@@ -206,138 +206,138 @@
<directivesynopsis>
<name>ExtFilterDefine</name>
<description>$B30It%U%#%k%?$rDj5A(B</description>
<description>外部フィルタを定義</description>
<syntax>ExtFilterDefine <var>filtername</var> <var>parameters</var></syntax>
<contextlist><context>server config</context></contextlist>
<usage>
<p><directive>ExtFilterDefine</directive> $B$O!"<B9T$9$k%W%m%0%i%`$d(B
$B0z?t$J$I!"30It%U%#%k%?$NFC@-$rDj5A$7$^$9!#(B</p>
<p><directive>ExtFilterDefine</directive> は、実行するプログラムや
引数など、外部フィルタの特性を定義します。</p>
<p><var>filtername</var> $B$ODj5A$9$k%U%#%k%?$NL>A0$r;XDj$7$^$9!#(B
$B$3$NL>A0$O8e$G(B <directive module="core">SetOutputFilter</directive>
$B%G%#%l%/%F%#%V$G;XDj$G$-$^$9!#L>A0$OEPO?$5$l$k$9$Y$F$N%U%#%k%?$G(B
$B0l0U$G$J$/$F$O$J$j$^$;$s!#(B<em>$B8=;~E@$G$O!"%U%#%k%?$NEPO?(B API $B$+$i$O(B
$B%(%i!<$OJs9p$5$l$^$;$s!#$G$9$+$i!"=EJ#$9$kL>A0$r;H$C$F$7$^$C$?$H$-$G$b(B
$B%f!<%6$K$O$=$N$3$H$OJs9p$5$l$^$;$s!#(B</em></p>
<p><var>filtername</var> は定義するフィルタの名前を指定します。
この名前は後で <directive module="core">SetOutputFilter</directive>
ディレクティブで指定できます。名前は登録されるすべてのフィルタで
一意でなくてはなりません。<em>現時点では、フィルタの登録 API からは
エラーは報告されません。ですから、重複する名前を使ってしまったときでも
ユーザにはそのことは報告されません。</em></p>
<p>$BB3$/%Q%i%a!<%?$N=gHV$O4X78L5$/!"$=$l$i$O<B9T$9$k30It%3%^%s%I$H!"(B
$BB>$NFC@-$rDj5A$7$^$9!#(B<code>cmd=</code> $B$@$1$,I,?\$N%Q%i%a!<%?$G$9!#(B
$B;XDj2DG=$J%Q%i%a!<%?$O(B:</p>
<p>続くパラメータの順番は関係無く、それらは実行する外部コマンドと、
他の特性を定義します。<code>cmd=</code> だけが必須のパラメータです。
指定可能なパラメータは:</p>
<dl>
<dt><code>cmd=<var>cmdline</var></code></dt>
<dd><code>cmd=</code> $B%-!<%o!<%I$O<B9T$9$k30It%3%^%s%I$r;XDj$7$^$9!#(B
$B%W%m%0%i%`L>$N8e$K0z?t$,$"$k>l9g$O!"%3%^%s%I9T$O0zMQId$G0O$`(B
$BI,MW$,$"$j$^$9(B (<em>$BNc$($P(B</em>$B!"(B<code>cmd="<var>/bin/mypgm</var>
<var>arg1</var> <var>arg2</var>"</code> $B$N$h$&$K(B)$B!#%W%m%0%i%`$O(B
$B%7%'%k7PM3$G$J$/!"D>@\<B9T$5$l$^$9$N$G!"DL>o$N%7%'%kMQ$N(B
$B%(%9%1!<%W$OI,MW$"$j$^$;$s!#%W%m%0%i%`$N0z?t$O6uGr$G6h@Z$i$l$^$9!#(B
$B%W%m%0%i%`$N0z?t$N0lIt$H$J$kI,MW$N$"$k6uGr$O%P%C%/%9%Z!<%9$G%(%9%1!<%W(B
$B$G$-$^$9!#0z?t$N0lIt$K$J$k%P%C%/%9%i%C%7%e$O%P%C%/%9%i%C%7%e$G(B
$B%(%9%1!<%W$9$kI,MW$,$"$j$^$9!#I8=`$N(B CGI $B4D6-JQ?t$K2C$($F!"(B
$B4D6-JQ?t(B DOCUMENT_URI, DOCUMENT_PATH_INFO, and
QUERY_STRING_UNESCAPED $B$,%W%m%0%i%`$N$?$a$K@_Dj$5$l$^$9!#(B</dd>
<dd><code>cmd=</code> キーワードは実行する外部コマンドを指定します。
プログラム名の後に引数がある場合は、コマンド行は引用符で囲む
必要があります (<em>例えば</em>、<code>cmd="<var>/bin/mypgm</var>
<var>arg1</var> <var>arg2</var>"</code> のように)。プログラムは
シェル経由でなく、直接実行されますので、通常のシェル用の
エスケープは必要ありません。プログラムの引数は空白で区切られます。
プログラムの引数の一部となる必要のある空白はバックスペースでエスケープ
できます。引数の一部になるバックスラッシュはバックスラッシュで
エスケープする必要があります。標準の CGI 環境変数に加えて、
環境変数 DOCUMENT_URI, DOCUMENT_PATH_INFO, and
QUERY_STRING_UNESCAPED がプログラムのために設定されます。</dd>
<dt><code>mode=<var>mode</var></code></dt>
<dd>$B1~Ez$r=hM}$9$k%U%#%k%?$K$O(B <code>mode=output</code> ($B%G%U%)%k%H(B)
$B$r;H$$$^$9!#%j%/%(%9%H$r=hM}$9$k%U%#%k%?$K$O(B <code>mode=input</code>
$B$r;H$$$^$9!#(B<code>mode=input</code> $B$O(B Apache 2.1 $B$+$i$N?7$7$$5!G=$G$9!#(B</dd>
<dd>応答を処理するフィルタには <code>mode=output</code> (デフォルト)
を使います。リクエストを処理するフィルタには <code>mode=input</code>
を使います。<code>mode=input</code> Apache 2.1 からの新しい機能です。</dd>
<dt><code>intype=<var>imt</var></code></dt>
<dd>$B$3$N%Q%i%a!<%?$O%U%#%k%?$5$l$k$Y$-%I%-%e%a%s%H$N(B
$B%$%s%?!<%M%C%H%a%G%#%"%?%$%W(B (<em>$B$9$J$o$A(B</em>$B!"(BMIME $B%?%$%W(B) $B$r(B
$B;XDj$7$^$9!#%G%U%)%k%H$G$O$9$Y$F$N%I%-%e%a%s%H$,%U%#%k%?$5$l$^$9!#(B
<code>intype=</code> $B$,;XDj$5$l$F$$$l$P!"%U%#%k%?$O;XDj$5$l$F$$$J$$(B
$B%I%-%e%a%s%H$K$OE,MQ$5$l$J$/$J$j$^$9!#(B</dd>
<dd>このパラメータはフィルタされるべきドキュメントの
インターネットメディアタイプ (<em>すなわち</em>、MIME タイプ) を
指定します。デフォルトではすべてのドキュメントがフィルタされます。
<code>intype=</code> が指定されていれば、フィルタは指定されていない
ドキュメントには適用されなくなります。</dd>
<dt><code>outtype=<var>imt</var></code></dt>
<dd>$B$3$N%Q%i%a!<%?$O%U%#%k%?$5$l$?%I%-%e%a%s%H$N(B
$B%$%s%?!<%M%C%H%a%G%#%"%?%$%W(B (<em>$B$9$J$o$A(B</em>$B!"(BMIME $B%?%$%W(B) $B$r(B
$B;XDj$7$^$9!#%U%#%k%?F0:n$K$H$b$J$C$F%$%s%?!<%M%C%H%a%G%#%"%?%$%W$,(B
$BJQ$o$k>l9g$KM-MQ$G$9!#%G%U%)%k%H$G$O%$%s%?!<%M%C%H%a%G%#%"%?%$%W$O(B
$BJQ99$5$l$^$;$s!#(B</dd>
<dd>このパラメータはフィルタされたドキュメントの
インターネットメディアタイプ (<em>すなわち</em>、MIME タイプ) を
指定します。フィルタ動作にともなってインターネットメディアタイプが
変わる場合に有用です。デフォルトではインターネットメディアタイプは
変更されません。</dd>
<dt><code>PreservesContentLength</code></dt>
<dd><code>PreservesContentLength</code> $B%-!<%o!<%I$O%U%#%k%?$,(B
content length <transnote>$B%3%s%F%s%H$ND9$5(B</transnote>
$B$rJQ99$7$J$$$H$$$&$3$H$r;XDj$7$^$9!#$[$H$s$I$N%U%#%k%?$O(B
content length $B$rJQ99$9$k$?$a!"$3$l$O%G%U%)%k%H$G$O$"$j$^$;$s!#(B
$B%U%#%k%?$,D9$5$rJQ$($J$$$H$-$O!"$3$N%-!<%o!<%I$r;XDj$9$k$H(B
$B$h$$$G$7$g$&!#(B</dd>
<dd><code>PreservesContentLength</code> キーワードはフィルタが
content length <transnote>コンテントの長さ</transnote>
を変更しないということを指定します。ほとんどのフィルタは
content length を変更するため、これはデフォルトではありません。
フィルタが長さを変えないときは、このキーワードを指定すると
よいでしょう。</dd>
<dt><code>ftype=<var>filtertype</var></code></dt>
<dd>$B$3$N%Q%i%a!<%?$O%U%#%k%?$,EPO?$5$l$k$Y$-%U%#%k%?%?%$%W$N(B
$B?tCM$r;XDj$7$^$9!#$[$H$s$I$N>l9g$O!"%G%U%)%k%H$N(B AP_FTYPE_RESOURCE $B$G(B
$B==J,$G$9!#%U%#%k%?$,%U%#%k%?%A%'!<%s$NJL$N>l=j$GF0:n$9$kI,MW$,$"$k(B
$B>l9g$O!"$3$N%Q%i%a!<%?$r;XDj$9$kI,MW$,$"$j$^$9!#;XDj2DG=$JCM$O(B
util_filter.h $B$N(B AP_FTYPE_foo $BDj5A$r;2>H$7$F$/$@$5$$!#(B</dd>
<dd>このパラメータはフィルタが登録されるべきフィルタタイプの
数値を指定します。ほとんどの場合は、デフォルトの AP_FTYPE_RESOURCE
十分です。フィルタがフィルタチェーンの別の場所で動作する必要がある
場合は、このパラメータを指定する必要があります。指定可能な値は
util_filter.h AP_FTYPE_foo 定義を参照してください。</dd>
<dt><code>disableenv=<var>env</var></code></dt>
<dd>$B@_Dj$5$l$F$$$?>l9g$K%U%#%k%?$rL58z$K$9$k$?$a$N4D6-JQ?t$r(B
$B;XDj$7$^$9!#(B</dd>
<dd>設定されていた場合にフィルタを無効にするための環境変数を
指定します。</dd>
<dt><code>enableenv=<var>env</var></code></dt>
<dd>$B$3$N%Q%i%a!<%?$O%U%#%k%?$,M-8z$K$J$k$?$a$K@_Dj$5$l$F$$$J$1$l$P(B
$B$J$i$J$$4D6-JQ?t$r;XDj$7$^$9!#(B</dd>
<dd>このパラメータはフィルタが有効になるために設定されていなければ
ならない環境変数を指定します。</dd>
</dl>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>ExtFilterOptions</name>
<description><module>mod_ext_filter</module> $B$N%*%W%7%g%s$r@_Dj(B</description>
<description><module>mod_ext_filter</module> のオプションを設定</description>
<syntax>ExtFilterOptions <var>option</var> [<var>option</var>] ...</syntax>
<default>ExtFilterOptions DebugLevel=0 NoLogStderr</default>
<contextlist><context>directory</context></contextlist>
<usage>
<p><directive>ExtFilterOptions</directive> $B%G%#%l%/%F%#%V$O(B
<module>mod_ext_filter</module> $B$NFCJL$J=hM}MQ$N%*%W%7%g%s$r(B
$B;XDj$7$^$9!#(B<var>Option</var> $B$K$O0J2<$N$I$l$+$r;XDj$7$^$9!#(B</p>
<p><directive>ExtFilterOptions</directive> ディレクティブは
<module>mod_ext_filter</module> の特別な処理用のオプションを
指定します。<var>Option</var> には以下のどれかを指定します。</p>
<dl>
<dt><code>DebugLevel=<var>n</var></code></dt>
<dd>
<code>DebugLevel</code> $B$G(B <module>mod_ext_filter</module>
$B$N@8@.$9$k%G%P%C%0%a%C%;!<%8$N%l%Y%k$r@_Dj$G$-$^$9!#(B
$B%G%U%)%k%H$G$O!"%G%P%C%0%a%C%;!<%8$O@8@.$5$l$^$;$s!#(B
$B$3$l$O(B <code>DebugLevel=0</code> $B$H@_Dj$9$k$N$HF1$8$G$9!#(B
$B?t;z$,Bg$-$/$J$l$P$J$k$[$I!"$h$jB?$/$N%G%P%C%0%a%C%;!<%8$,(B
$B@8@.$5$l!"%5!<%P$N@-G=$OMn$A$^$9!#?tCM$N<B:]$N0UL#$O(B
<code>mod_ext_filter.c</code> $B$N@hF,6a$/$N(B DBGLVL_ $BDj?t$N(B
$BDj5A$G@bL@$5$l$F$$$^$9!#(B
<code>DebugLevel</code> <module>mod_ext_filter</module>
の生成するデバッグメッセージのレベルを設定できます。
デフォルトでは、デバッグメッセージは生成されません。
これは <code>DebugLevel=0</code> と設定するのと同じです。
数字が大きくなればなるほど、より多くのデバッグメッセージが
生成され、サーバの性能は落ちます。数値の実際の意味は
<code>mod_ext_filter.c</code> の先頭近くの DBGLVL_ 定数の
定義で説明されています。
<p>$BCm(B: $B%G%P%C%0%a%C%;!<%8$r(B Apache $B$N%(%i!<%m%0$K(B
$BJ]B8$9$k$h$&$K$9$k$?$a$K$O!"(Bcore $B$N%G%#%l%/%F%#%V(B
<p>注: デバッグメッセージを Apache のエラーログに
保存するようにするためには、core のディレクティブ
<directive module="core">LogLevel</directive>
$B$r;H$&I,MW$,$"$j$^$9!#(B</p>
を使う必要があります。</p>
</dd>
<dt><code>LogStderr | NoLogStderr</code></dt>
<dd><code>LogStderr</code> $B%-!<%o!<%I$O30It%U%#%k%?%W%m%0%i%`$K$h$j(B
$BI8=`%(%i!<(B <transnote>stderr</transnote> $B$K=q$+$l$?%a%C%;!<%8$r(B
Apache $B$N%(%i!<%m%0$KJ]B8$9$k$h$&$K$7$^$9!#(B<code>NoLogStderr</code> $B$O(B
$B5U$KJ]B8$7$J$$$h$&$K$7$^$9!#(B</dd>
<dd><code>LogStderr</code> キーワードは外部フィルタプログラムにより
標準エラー <transnote>stderr</transnote> に書かれたメッセージを
Apache のエラーログに保存するようにします。<code>NoLogStderr</code>
逆に保存しないようにします。</dd>
</dl>
<example><title>$BNc(B</title>
<example><title></title>
ExtFilterOptions LogStderr DebugLevel=0
</example>
<p>$B$3$NNc$G$O!"%U%#%k%?$NI8=`=PNO$K=q$+$l$?%a%C%;!<%8$O(B
Apache $B$N%(%i!<%m%0$KJ]B8$5$l$^$9!#(B<module>mod_ext_filter</module> $B$+$i$O(B
$B%G%P%C%0%a%C%;!<%8$O@8@.$5$l$^$;$s!#(B</p>
<p>この例では、フィルタの標準出力に書かれたメッセージは
Apache のエラーログに保存されます。<module>mod_ext_filter</module> からは
デバッグメッセージは生成されません。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:568323 (outdated) -->
@@ -23,83 +23,83 @@
<modulesynopsis metafile="mod_headers.xml.meta">
<name>mod_headers</name>
<description>HTTP $B%j%/%(%9%H$N%X%C%@$H1~Ez$N%X%C%@$N%+%9%?%^%$%:(B</description>
<description>HTTP リクエストのヘッダと応答のヘッダのカスタマイズ</description>
<status>Extension</status>
<sourcefile>mod_headers.c</sourcefile>
<identifier>headers_module</identifier>
<compatibility><directive module="mod_headers">RequestHeader</directive>
$B$O(B Apache 2.0 $B0J9_$N$_$G;HMQ2DG=(B</compatibility>
Apache 2.0 以降のみで使用可能</compatibility>
<summary>
<p>$B$3$N%b%8%e!<%k$O(B HTTP $B$N%j%/%(%9%H%X%C%@$H1~Ez%X%C%@$r@)8f$7!"(B
$BJQ99$9$k$?$a$N%G%#%l%/%F%#%V$rDs6!$7$^$9!#%X%C%@$rDI2C$7$?$j!"(B
$BCV$-49$($?$j!":o=|$7$?$j$9$k$3$H$,$G$-$^$9!#(B</p>
<p>このモジュールは HTTP のリクエストヘッダと応答ヘッダを制御し、
変更するためのディレクティブを提供します。ヘッダを追加したり、
置き換えたり、削除したりすることができます。</p>
</summary>
<section id="order"><title>$B=hM}$N=gHV(B</title>
<section id="order"><title>処理の順番</title>
<p><module>mod_header</module> $B$N%G%#%l%/%F%#%V$O%5!<%P@_Dj$N$[$\$I$3$K$G$b(B
$B=q$/$3$H$,$G$-!"1F6A$9$kHO0O$r(B<a
href="../sections.html">$B@_DjMQ%;%/%7%g%s(B</a>$B$G0O$`$3$H$G8BDj$9$k(B
$B$3$H$,$G$-$^$9!#(B</p>
<p><module>mod_header</module> のディレクティブはサーバ設定のほぼどこにでも
書くことができ、影響する範囲を<a
href="../sections.html">設定用セクション</a>で囲むことで限定する
ことができます。</p>
<p>$B=hM}$N=gHV$O=EMW$G!"@_Dj%U%!%$%kCf$N=gHV$H!"(B<a
href="../sections.html">$B@_DjMQ%;%/%7%g%s(B</a>$BFb$N0LCV$H$NN>J}$K(B
$B1F6A$5$l$^$9!#0J2<$NFs$D$N%X%C%@$O=gHV$,5U$K$J$k$H(B
$B0c$&7k2L$K$J$j$^$9(B:</p>
<p>処理の順番は重要で、設定ファイル中の順番と、<a
href="../sections.html">設定用セクション</a>内の位置との両方に
影響されます。以下の二つのヘッダは順番が逆になると
違う結果になります:</p>
<example>
RequestHeader append MirrorID "mirror 12"<br />
RequestHeader unset MirrorID
</example>
<p>$B$3$N=gHV$N>l9g$O!"(B<code>MirrorID</code> $B%X%C%@$O@_Dj$5$l$^$;$s!#(B
$B5U$K$J$C$F$$$k$H!"(BMirrorID $B%X%C%@$O(B "mirror 12" $B$K@_Dj$5$l$^$9!#(B</p>
<p>この順番の場合は、<code>MirrorID</code> ヘッダは設定されません。
逆になっていると、MirrorID ヘッダは "mirror 12" に設定されます。</p>
</section>
<section id="early"><title>$BAa4|=hM}!"8e4|=hM}(B</title>
<p><module>mod_headers</module> $B$G$O!"%j%/%(%9%H$NAa4|$+8e4|$+$N(B
$B$I$A$i$GE,MQ$9$k$+$rA*$Y$^$9!#DL>o$O8e4|%b!<%I$G!"(B
$B%3%s%F%s%D@8@.$,<B9T$5$l$kD>A0$K%j%/%(%9%H%X%C%@$,%;%C%H$5$l!"(B
$B%l%9%]%s%9$H$7$FAw=P$5$l$kD>A0$K%l%9%]%s%9%X%C%@$,%;%C%H$5$l$^$9!#(B
$B1?MQCf$N%5!<%P$G$OI,$:8e4|%b!<%I$r;H$C$F$/$@$5$$!#(B</p>
<section id="early"><title>早期処理、後期処理</title>
<p><module>mod_headers</module> では、リクエストの早期か後期かの
どちらで適用するかを選べます。通常は後期モードで、
コンテンツ生成が実行される直前にリクエストヘッダがセットされ、
レスポンスとして送出される直前にレスポンスヘッダがセットされます。
運用中のサーバでは必ず後期モードを使ってください。</p>
<p>$BAa4|%b!<%I$O3+H/<T8~$1$N%F%9%H(B/$B%G%P%C%0MQ$K@_7W$5$l$F$$$^$9!#(B
<code>early</code> $B%-!<%o!<%I;XDj$5$l$?%G%#%l%/%F%#%V$K$h$C$F!"(B
$B%j%/%(%9%H=hM}$N3+;OCOE@$K$J$j$^$9!#(B
$B$D$^$j!"0[$J$k%j%/%(%9%H$r;n$7$?$j%F%9%H%1!<%9$r%;%C%H%"%C%W$9$k$N$K(B
$B3hMQ$G$-$k0lJ}$G!"%l%9%]%s%9$r@8@.$9$kA0$KB>$N%b%8%e!<%k$K$h$C$F(B
$B%X%C%@$,=q$-49$($i$l$F$7$^$&$+$b$7$l$J$$$H$$$&$3$H$r0UL#$7$^$9!#(B</p>
<p>早期モードは開発者向けのテスト/デバッグ用に設計されています。
<code>early</code> キーワード指定されたディレクティブによって、
リクエスト処理の開始地点になります。
つまり、異なるリクエストを試したりテストケースをセットアップするのに
活用できる一方で、レスポンスを生成する前に他のモジュールによって
ヘッダが書き換えられてしまうかもしれないということを意味します。</p>
<p>early $B%G%#%l%/%F%#%V$G$O%j%/%(%9%H%Q%9$N@_Dj$,2r7h$5$l$kA0$K(B
$B=hM}$5$l$k$N$G!"%a%$%s%5!<%P$+%P!<%A%c%k%[%9%H%3%s%F%-%9%H$G$N$_!"(B
$BAa4|%X%C%@$r%;%C%H$G$-$^$9!#(Bearly $B%G%#%l%/%F%#%V$O%j%/%(%9%H%Q%9$K(B
$B0MB8$9$k$3$H$O$G$-$^$;$s$N$G!"(B<code>&lt;Directory&gt;</code> $B$d(B
<code>&lt;Location&gt;</code> $B$H$$$C$?%3%s%F%-%9%HFb$G$O;HMQ(B
$B$G$-$^$;$s!#(B</p>
<p>early ディレクティブではリクエストパスの設定が解決される前に
処理されるので、メインサーバかバーチャルホストコンテキストでのみ、
早期ヘッダをセットできます。early ディレクティブはリクエストパスに
依存することはできませんので、<code>&lt;Directory&gt;</code>
<code>&lt;Location&gt;</code> といったコンテキスト内では使用
できません。</p>
</section>
<section id="examples"><title>$BNc(B</title>
<section id="examples"><title></title>
<ol>
<li>$B%j%/%(%9%H%X%C%@Cf$N(B "TS" $B$G;O$^$k%U%#!<%k%I$r$9$Y$F1~Ez%X%C%@$K(B
$B%3%T!<$7$^$9(B:
<li>リクエストヘッダ中の "TS" で始まるフィールドをすべて応答ヘッダに
コピーします:
<example>
Header echo ^TS
</example>
</li>
<li>
$B%j%/%(%9%H$r<u$1IU$1$?;~9o$H%j%/%(%9%H$r=hM}$7$?;~4V$rF~$l$?%X%C%@!"(B
<code>MyHeader</code> $B$r1~Ez$KDI2C$7$^$9!#$3$N%X%C%@$O%/%i%$%"%s%H$,(B
$B%5!<%P$NIi2Y$rD>4QE*$KCN$k$?$a$d!"%/%i%$%"%s%H(B-$B%5!<%P4V$N(B
$B%\%H%k%M%C%/$rD4$Y$k$?$a$K;H$&$3$H$,$G$-$^$9!#(B
リクエストを受け付けた時刻とリクエストを処理した時間を入れたヘッダ、
<code>MyHeader</code> を応答に追加します。このヘッダはクライアントが
サーバの負荷を直観的に知るためや、クライアント-サーバ間の
ボトルネックを調べるために使うことができます。
<example>
Header add MyHeader "%D %t"
</example>
<p>$B>e5-$N@_Dj$G$O!"0J2<$N$h$&$J%X%C%@$,1~Ez$KDI2C$5$l$k$3$H$K$J$j$^$9(B:</p>
<p>上記の設定では、以下のようなヘッダが応答に追加されることになります:</p>
<example>
MyHeader: D=3775428 t=991424704447256
@@ -107,31 +107,31 @@
</li>
<li>
Joe $B$K$"$$$5$D$r$7$^$9(B:
Joe にあいさつをします:
<example>
Header add MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."
</example>
<p>$B0J2<$N$h$&$J%X%C%@$,1~Ez$KDI2C$5$l$k$3$H$K$J$j$^$9(B</p>
<p>以下のようなヘッダが応答に追加されることになります</p>
<example>
MyHeader: Hello Joe. It took D=3775428 microseconds for Apache to serve this request.
</example>
</li>
<li>$B%j%/%(%9%H$K(B "MyRequestHeader" $B$,$"$k$H$-$K8B$j(B <code>MyHeader</code> $B$r1~Ez$K(B
$BIU$1$^$9!#$3$l$O!"%/%i%$%"%s%H$NMW5a$K1~$($F%X%C%@$r:n@.$9$k$H$-$K(B
$BLr$KN)$A$^$9!#$3$NNc$G$O(B <module>mod_setenvif</module> $B%b%8%e!<%k$,I,MW$J$3$H$K(B
$BCm0U$7$F$/$@$5$$!#(B
<li>リクエストに "MyRequestHeader" があるときに限り <code>MyHeader</code> を応答に
付けます。これは、クライアントの要求に応えてヘッダを作成するときに
役に立ちます。この例では <module>mod_setenvif</module> モジュールが必要なことに
注意してください。
<example>
SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br />
Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
</example>
<p>$B$b$7(B HTTP $B%j%/%(%9%H$K(B <code>MyRequestHeader: value</code> $B%X%C%@$,(B
$B$"$k$H!"1~Ez$K$O0J2<$N$h$&$J%X%C%@$,IU2C$5$l$^$9!#(B</p>
<p>もし HTTP リクエストに <code>MyRequestHeader: value</code> ヘッダが
あると、応答には以下のようなヘッダが付加されます。</p>
<example>
MyHeader: D=3775428 t=991424704447256 mytext
@@ -142,7 +142,7 @@
<directivesynopsis>
<name>RequestHeader</name>
<description>HTTP $B%j%/%(%9%H%X%C%@$N@_Dj(B</description>
<description>HTTP リクエストヘッダの設定</description>
<syntax>RequestHeader set|append|add|unset <var>header</var>
[<var>value</var>] [early|env=[!]<var>variable</var>]</syntax>
<contextlist><context>server config</context><context>virtual host</context>
@@ -150,186 +150,186 @@
<override>FileInfo</override>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O(B HTTP $B%j%/%(%9%H%X%C%@$rCV49!"DI2C!":o=|$G$-$^$9!#(B
$B%X%C%@$O%3%s%F%s%H%O%s%I%i$,<B9T$5$l$kD>A0$K<B9T$5$l!"(B
$BF~$C$FMh$k%X%C%@$rJQ99$9$k$3$H$,2DG=$K$J$C$F$$$^$9!#(B
$B9T$J$&=hM}$OBh(B 1 $B0z?t$K$h$j7h$^$j$^$9!#$3$l$K$O0J2<$NCM$r;XDj(B
$B$9$k$3$H$,$G$-$^$9(B:</p>
<p>このディレクティブは HTTP リクエストヘッダを置換、追加、削除できます。
ヘッダはコンテントハンドラが実行される直前に実行され、
入って来るヘッダを変更することが可能になっています。
行なう処理は第 1 引数により決まります。これには以下の値を指定
することができます:</p>
<dl>
<dt><code>set</code></dt>
<dd>$B%j%/%(%9%H%X%C%@$r@_Dj$7$^$9!#F1$8L>A0$N%X%C%@$,B8:_$7$F$$$k$H!"(B
$B$=$l$rCV$-49$($^$9!#(B</dd>
<dd>リクエストヘッダを設定します。同じ名前のヘッダが存在していると、
それを置き換えます。</dd>
<dt><code>append</code></dt>
<dd>$B%j%/%(%9%H%X%C%@$O!"4{$KB8:_$9$kF1$8L>A0$N%X%C%@$KDI2C$5$l$^$9!#(B
$B?7$7$$CM$,4{B8$N%X%C%@$KDI2C$5$l$k$H$-$K$O!"4{B8$N%X%C%@$N(B
$B8e$K%3%s%^$G6h@Z$i$l$FDI2C$5$l$^$9!#$3$l$O%X%C%@$KJ#?t$NCM$r(B
$B;XDj$9$k$H$-$N(B HTTP $B$NI8=`$NJ}K!$G$9!#(B</dd>
<dd>リクエストヘッダは、既に存在する同じ名前のヘッダに追加されます。
新しい値が既存のヘッダに追加されるときには、既存のヘッダの
後にコンマで区切られて追加されます。これはヘッダに複数の値を
指定するときの HTTP の標準の方法です。</dd>
<dt><code>add</code></dt>
<dd>$B%X%C%@$,4{$KB8:_$7$F$$$k$H$-$G$5$($b!"%j%/%(%9%H%X%C%@$r(B
$B4{B8$N%X%C%@$KDI2C$7$^$9!#$3$l$K$h$j!"Fs$D(B ($B$+$=$l0J>e(B) $B$N(B
$B%X%C%@$NL>A0$,F1$8$K$J$k$3$H$,$"$j$^$9!#$=$N7k2L!"A[Dj$G$-$J$$(B
$B$3$H$,5/$3$k2DG=@-$,$"$j$^$9$N$G!"0lHLE*$K$O(B <code>append</code> $B$NJ}$r(B
$B;H$&J}$,NI$$$G$7$g$&!#(B</dd>
<dd>ヘッダが既に存在しているときでさえも、リクエストヘッダを
既存のヘッダに追加します。これにより、二つ (かそれ以上) の
ヘッダの名前が同じになることがあります。その結果、想定できない
ことが起こる可能性がありますので、一般的には <code>append</code> の方を
使う方が良いでしょう。</dd>
<dt><code>unset</code></dt>
<dd>$B$b$7;XDj$5$l$?L>A0$N%j%/%(%9%H%X%C%@$,B8:_$7$F$$$l$P!":o=|$5$l$^$9!#(B
$BF1$8L>A0$NJ#?t$N%X%C%@$,$"$k$H$-$O!"$9$Y$F:o=|$5$l$^$9!#(B
<var>value</var> $B$r$D$1$F$O$$$1$^$;$s!#(B</dd>
<dd>もし指定された名前のリクエストヘッダが存在していれば、削除されます。
同じ名前の複数のヘッダがあるときは、すべて削除されます。
<var>value</var> をつけてはいけません。</dd>
</dl>
<p>$B$3$N0z?t$N8e$K$O%X%C%@L>(B (<em>header</em>) $B$,B3$-$^$9!#(B
$B%X%C%@L>$K$O:G8e$K%3%m%s$r4^$a$k$3$H$b$G$-$^$9$,!"L5$/$F$b9=$$$^$;$s!#(B
$BBgJ8;z>.J8;z$O6hJL$5$l$^$;$s!#(B<code>add</code>,
<code>append</code>, <code>set</code> $B$N>l9g$O!"(B<em>value</em> $B$,;0$DL\$N(B
$B0z?t$H$7$F;XDj$5$l$^$9!#(B<em>value</em> $B$K6uGr$,$"$k>l9g$OFs=E0zMQId$G(B
$B0O$`I,MW$,$"$j$^$9!#(Bunset $B$N>l9g$O!"(B<em>value</em> $B$O;XDj$7$^$;$s!#(B
<var>value</var> $B$OJ8;zNs!"%U%)!<%^%C%H;XDj;R!"$"$k$$$O!"$=$N:.9g$G$9!#(B
$B;H$&$3$H$N$G$-$k%U%)!<%^%C%H;XDj;R$O!"(B<directive
module="mod_headers">Header</directive> $B$HF1$8$G$9$N$G!"(B
$B>\:Y$O$=$A$i$r$4Mw$/$@$5$$!#(B</p>
<p>この引数の後にはヘッダ名 (<em>header</em>) が続きます。
ヘッダ名には最後にコロンを含めることもできますが、無くても構いません。
大文字小文字は区別されません。<code>add</code>,
<code>append</code>, <code>set</code> の場合は、<em>value</em> が三つ目の
引数として指定されます。<em>value</em> に空白がある場合は二重引用符で
囲む必要があります。unset の場合は、<em>value</em> は指定しません。
<var>value</var> は文字列、フォーマット指定子、あるいは、その混合です。
使うことのできるフォーマット指定子は、<directive
module="mod_headers">Header</directive> と同じですので、
詳細はそちらをご覧ください。</p>
<p><directive>RequestHeader</directive> $B%G%#%l%/%F%#%V$O!"(B
$B$I$&$$$C$?>r7o2<$G%"%/%7%g%s$r9T$&$+$r;XDj$9$kDI2C0z?t(B
$B$"$k$$$O!"(B<a href="#early">$BAa4|=hM}(B</a> $B$r;XDj$9$k(B <code>early</code>
$B%-!<%o!<%I$r@_Dj$9$k$3$H$,$G$-$^$9!#(B
<code>env=<var>...</var></code> $B$N0z?t$G@_Dj$5$l$F$$$k(B
<a href="../env.html">$B4D6-JQ?t(B</a> $B$,B8:_$7$F$$$k(B
($B$"$k$$$O(B <code>env=!<var>...</var></code> $B$G;XDj$5$l$?4D6-JQ?t$,(B
$BB8:_$7$J$$(B) $B>l9g!"(B<directive>RequestHeader</directive> $B%G%#%l%/%F%#%V$O(B
$BM-8z$K$J$j$^$9!#$=$l0J30$N>l9g!"%G%#%l%/%F%#%V$O8zNO$r;}$A$^$;$s!#(B</p>
<p><directive>RequestHeader</directive> ディレクティブは、
どういった条件下でアクションを行うかを指定する追加引数
あるいは、<a href="#early">早期処理</a> を指定する <code>early</code>
キーワードを設定することができます。
<code>env=<var>...</var></code> の引数で設定されている
<a href="../env.html">環境変数</a> が存在している
(あるいは <code>env=!<var>...</var></code> で指定された環境変数が
存在しない) 場合、<directive>RequestHeader</directive> ディレクティブは
有効になります。それ以外の場合、ディレクティブは効力を持ちません。</p>
<p><a href="#early">early</a> $B%b!<%I$G$J$$>l9g$K8B$j!"(B
<directive>RequestHeader</directive> $B%G%#%l%/%F%#%V$O(B
fixup $B%U%'!<%:$G%j%/%(%9%H$,%O%s%I%i$K07$o$l$kD>A0$K(B
$B=hM}$5$l$^$9!#$3$l$K$h$j!"%V%i%&%6$d(B Apache $B$NF~NO%U%#%k%?$K$h$j(B
$B@8@.$5$l$?%X%C%@$r>e=q$-$7$?$j=$@5$7$?$j$G$-$k$h$&$K$J$C$F$$$^$9!#(B</p>
<p><a href="#early">early</a> モードでない場合に限り、
<directive>RequestHeader</directive> ディレクティブは
fixup フェーズでリクエストがハンドラに扱われる直前に
処理されます。これにより、ブラウザや Apache の入力フィルタにより
生成されたヘッダを上書きしたり修正したりできるようになっています。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>Header</name>
<description>HTTP $B1~Ez%X%C%@$N@_Dj(B</description>
<description>HTTP 応答ヘッダの設定</description>
<syntax>Header [<var>condition</var>] set|append|add|unset|echo
<var>header</var> [<var>value</var>] [early|env=[!]<var>variable</var>]</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>FileInfo</override>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O(B HTTP $B1~Ez%X%C%@$rCV49!"DI2C!":o=|$G$-$^$9!#(B
$B%X%C%@$O%3%s%F%s%H%O%s%I%i$d=PNO%U%#%k%?$,<B9T$5$l$?D>8e$K<B9T$5$l!"(B
$B=P$F9T$/%X%C%@$rJQ99$G$-$k$h$&$K$J$C$F$$$^$9!#(B</p>
<p>このディレクティブは HTTP 応答ヘッダを置換、追加、削除できます。
ヘッダはコンテントハンドラや出力フィルタが実行された直後に実行され、
出て行くヘッダを変更できるようになっています。</p>
<p>$B%*%W%7%g%s$N(B <var>condition</var> $B$O(B <code>onsuccess</code> $B$+(B
<code>always</code> $B$N$I$A$i$+$r;XDj$G$-$^$9!#$3$l$OFbIt%X%C%@%F!<%V%k$N$I$l$r(B
$BA`:n$9$k$+$r7hDj$7$^$9!#(B<code>onsuccess</code> $B$O(B <code>2<var>xx</var></code>
$B%9%F!<%?%9%3!<%I$N!"(B<code>always</code> $B$OA4$F$N%9%F!<%?%9%3!<%I(B
(<code>2<var>xx</var></code> $B$r4^$`(B) $B$N0UL#$K$J$j$^$9!#(B
$B$"$k%b%8%e!<%k$G%;%C%H$5$l$k%X%C%@$r%"%s%;%C%H$7$?$$>l9g$OFC$K!"(B
$B$I$N%F!<%V%k$,1F6A$r<u$1$k$+$r<B:]$K;n$7$?$[$&$,$h$$$G$7$g$&!#(B</p>
<p>オプションの <var>condition</var> <code>onsuccess</code>
<code>always</code> のどちらかを指定できます。これは内部ヘッダテーブルのどれを
操作するかを決定します。<code>onsuccess</code> <code>2<var>xx</var></code>
ステータスコードの、<code>always</code> は全てのステータスコード
(<code>2<var>xx</var></code> を含む) の意味になります。
あるモジュールでセットされるヘッダをアンセットしたい場合は特に、
どのテーブルが影響を受けるかを実際に試したほうがよいでしょう。</p>
<p>$B9T$J$&=hM}$OFsHVL\$N$N0z?t$G7h$^$j$^$9!#(B
$B$3$N0z?t$K$O<!$NCM$r;XDj$G$-$^$9(B:</p>
<p>行なう処理は二番目のの引数で決まります。
この引数には次の値を指定できます:</p>
<dl>
<dt><code>set</code></dt>
<dd>$B1~Ez%X%C%@$r@_Dj$7$^$9!#F1$8L>A0$N%X%C%@$,B8:_$9$k>l9g$O$=$l$r(B
$BCV$-49$($^$9!#(B<em>value</em> $B$K$O%U%)!<%^%C%HJ8;zNs$r(B
$B;XDj$9$k$3$H$b$G$-$^$9!#(B</dd>
<dd>応答ヘッダを設定します。同じ名前のヘッダが存在する場合はそれを
置き換えます。<em>value</em> にはフォーマット文字列を
指定することもできます。</dd>
<dt><code>append</code></dt>
<dd>$B1~Ez%X%C%@$r4{$KB8:_$9$kF1$8L>A0$N%X%C%@$KDI2C$7$^$9!#(B
$B?7$7$$CM$,4{B8$N%X%C%@$KDI2C$5$l$k$H$-$K$O!"4{B8$N%X%C%@$N(B
$B8e$K%3%s%^$G6h@Z$i$l$FDI2C$5$l$^$9!#$3$l$O%X%C%@$KJ#?t$NCM$r(B
$B;XDj$9$k$H$-$N(B HTTP $B$NI8=`$NJ}K!$G$9!#(B</dd>
<dd>応答ヘッダを既に存在する同じ名前のヘッダに追加します。
新しい値が既存のヘッダに追加されるときには、既存のヘッダの
後にコンマで区切られて追加されます。これはヘッダに複数の値を
指定するときの HTTP の標準の方法です。</dd>
<dt><code>add</code></dt>
<dd>$B%X%C%@$,4{$KB8:_$7$F$$$k$H$-$G$5$($b!"1~Ez%X%C%@$r(B
$B4{B8$N%X%C%@$KDI2C$7$^$9!#$3$l$K$h$j!"Fs$D(B ($B$+$=$l0J>e(B) $B$N(B
$B%X%C%@$NL>A0$,F1$8$K$J$k$3$H$,$"$j$^$9!#$=$N7k2L!"A[Dj$G$-$J$$(B
$B$3$H$,5/$3$k2DG=@-$,$"$j$^$9$N$G!"0lHLE*$K$O(B <code>append</code> $B$NJ}$r(B
$B;H$&J}$,NI$$$G$7$g$&!#(B</dd>
<dd>ヘッダが既に存在しているときでさえも、応答ヘッダを
既存のヘッダに追加します。これにより、二つ (かそれ以上) の
ヘッダの名前が同じになることがあります。その結果、想定できない
ことが起こる可能性がありますので、一般的には <code>append</code> の方を
使う方が良いでしょう。</dd>
<dt><code>unset</code></dt>
<dd>$B$b$7;XDj$5$l$?L>A0$N1~Ez%X%C%@$,B8:_$7$F$$$l$P!":o=|$5$l$^$9!#(B
$BF1$8L>A0$N%X%C%@$,J#?t$"$k$H$-$O!"$9$Y$F:o=|$5$l$^$9!#(B
<var>value</var> $B$r$D$1$F$O$$$1$^$;$s!#(B</dd>
<dd>もし指定された名前の応答ヘッダが存在していれば、削除されます。
同じ名前のヘッダが複数あるときは、すべて削除されます。
<var>value</var> をつけてはいけません。</dd>
<dt><code>echo</code></dt>
<dd>$B;XDj$5$l$?$b$N$HF1$8L>A0$N%j%/%(%9%H%X%C%@$r1~Ez%X%C%@$G(B
$B$=$N$^$^JV$7$^$9!#(B<var>header</var> $B$K$O@55,I=8=$b;XDj$G$-$^$9!#(B
<var>value</var> $B$r$D$1$F$O$$$1$^$;$s!#(B</dd>
<dd>指定されたものと同じ名前のリクエストヘッダを応答ヘッダで
そのまま返します。<var>header</var> には正規表現も指定できます。
<var>value</var> をつけてはいけません。</dd>
</dl>
<p>$B$3$N0z?t$N8e$K$O%X%C%@L>(B (<var>header</var>) $B$,B3$-$^$9!#(B
$B%X%C%@L>$K$O:G8e$K%3%m%s$r4^$a$k$3$H$b$G$-$^$9$,!"L5$/$F$b9=$$$^$;$s!#(B
<p>この引数の後にはヘッダ名 (<var>header</var>) が続きます。
ヘッダ名には最後にコロンを含めることもできますが、無くても構いません。
<code>set</code>, <code>append</code>, <code>add</code>,
<code>unset</code> $B$G$OBgJ8;z>.J8;z$O(B
$B6hJL$5$l$^$;$s!#(Becho $B$N(B <em>header</em> $BL>$OBgJ8;z>.J8;z$r6hJL$7!"(B
$B@55,I=8=$r;XDj$9$k$3$H$b$G$-$^$9!#(B</p>
<code>unset</code> では大文字小文字は
区別されません。echo の <em>header</em> 名は大文字小文字を区別し、
正規表現を指定することもできます。</p>
<p><code>add</code>, <code>append</code>,
<code>set</code> $B$G$O(B <var>value</var> $B$r;0$DL\$N(B
$B0z?t$H$7$F;XDj$7$^$9!#(B<var>value</var> $B$K6uGr$,$"$k>l9g$OFs=E0zMQId$G(B
$B0O$`I,MW$,$"$j$^$9!#(B<var>value</var> $B$OJ8;z$N$_$+$i$J$kJ8;zNs!"(B
$B%U%)!<%^%C%H;X<(;R$r4^$`J8;zNs!"$b$7$/$ON>J}$+$i$J$kJ8;zNs$r;XDj$G$-$^$9!#(B
<var>value</var> $B$O0J2<$N%U%)!<%^%C%H;X<(;R$r%5%]!<%H$7$^$9(B:</p>
<code>set</code> では <var>value</var> を三つ目の
引数として指定します。<var>value</var> に空白がある場合は二重引用符で
囲む必要があります。<var>value</var> は文字のみからなる文字列、
フォーマット指示子を含む文字列、もしくは両方からなる文字列を指定できます。
<var>value</var> は以下のフォーマット指示子をサポートします:</p>
<table border="1" style="zebra">
<columnspec><column width=".25"/><column width=".75"/></columnspec>
<tr><th>$B%U%)!<%^%C%H(B</th><th>$B2r@b(B</th></tr>
<tr><th>フォーマット</th><th>解説</th></tr>
<tr><td><code>%%</code></td>
<td>$B%Q!<%;%s%H5-9f(B</td></tr>
<td>パーセント記号</td></tr>
<tr><td><code>%t</code></td>
<td>$B%j%/%(%9%H$r<u$1<h$C$?;~9o$r!"(B
Universal Coordinated Time $B$G$N;O$^$j$N;~9o(B (Jan. 1, 1970) $B$+$i7P2a$7$?(B
$B;~4V$r%^%$%/%mIC$H$7$F8=$7$?$b$N!#CM$N:G=i$K$O(B
<code>t=</code> $B$,IU2C$5$l$^$9!#(B</td></tr>
<td>リクエストを受け取った時刻を、
Universal Coordinated Time での始まりの時刻 (Jan. 1, 1970) から経過した
時間をマイクロ秒として現したもの。値の最初には
<code>t=</code> が付加されます。</td></tr>
<tr><td><code>%D</code></td>
<td>$B%j%/%(%9%H$r<u$1<h$C$?;~9o$H!"%X%C%@$rAw$j=P$7$?(B
$B;~4V$H$N:9!#$3$l$O!"%j%/%(%9%H$,B8:_$7$F$$$?4|4V$r8=$7$^$9!#(B
$BCM$N:G=i$K$O(B <code>D=</code> $B$,IU2C$5$l$^$9!#(B</td></tr>
<td>リクエストを受け取った時刻と、ヘッダを送り出した
時間との差。これは、リクエストが存在していた期間を現します。
値の最初には <code>D=</code> が付加されます。</td></tr>
<tr><td><code>%{FOOBAR}e</code></td>
<td><a href="../env.html">$B4D6-JQ?t(B</a>
<code>FOOBAR</code> $B$NCM$G$9!#(B</td></tr>
<td><a href="../env.html">環境変数</a>
<code>FOOBAR</code> の値です。</td></tr>
<tr><td><code>%{FOOBAR}s</code></td>
<td><module>mod_ssl</module> $B$,M-8z$J>l9g!"(B
<a href="mod_ssl.html#envvars">SSL $B4D6-JQ?t(B</a> <code>FOOBAR</code>
$B$NFbMF(B</td></tr>
<td><module>mod_ssl</module> が有効な場合、
<a href="mod_ssl.html#envvars">SSL 環境変数</a> <code>FOOBAR</code>
の内容</td></tr>
</table>
<note><title>$BCm(B</title>
<p><code>%s</code> $B%U%)!<%^%C%H;XDj;R$O(B 2.1 $B0J9_$G$N$_MxMQ$G$-$^$9!#(B
<code>SSLOptions +StdEnvVars</code> $B$rM-8z$K$9$k$3$H$K$h$k%*!<%P!<%X%C%I$r(B
$BHr$1$k$?$a!"(B<code>%e</code> $B$NBe$o$j$H$7$F;H$($^$9!#(B
$BB>$NM}M3$J$I$,$"$C$F!"$I$&$7$F$b(B <code>SSLOptions +StdEnvVars</code>
$B$rM-8z$K$7$J$1$l$P$J$i$J$$>l9g$O!"(B<code>%e</code> $B$N$[$&$,(B
<code>%s</code> $B$h$j$b=hM}8zN($ONI$$$G$9!#(B</p>
<note><title></title>
<p><code>%s</code> フォーマット指定子は 2.1 以降でのみ利用できます。
<code>SSLOptions +StdEnvVars</code> を有効にすることによるオーバーヘッドを
避けるため、<code>%e</code> の代わりとして使えます。
他の理由などがあって、どうしても <code>SSLOptions +StdEnvVars</code>
を有効にしなければならない場合は、<code>%e</code> のほうが
<code>%s</code> よりも処理効率は良いです。</p>
</note>
<p><directive>Header</directive> $B%G%#%l%/%F%#%V$K$ODI2C$N0z?t$r;}$?$;$k$3$H$,(B
$B$G$-$F!"$I$&$$$C$?%"%/%7%g%s$,9T$o$l$?$+$N>r7o$r;XDj$7$?$j!"(B
<a href="#early">$BAa4|=hM}(B</a> $B$r;XDj$9$k(B <code>early</code> $B%-!<%o!<%I$r(B
$B;XDj$G$-$^$9!#(B
<code>env=...</code> $B0z?t$G;XDj$5$l$?(B <a
href="../env.html">$B4D6-JQ?t(B</a> $B$,B8:_$9$k(B ($B$b$7$/$O(B <code>env=!...</code>
$B$,;XDj$5$l$F$$$F4D6-JQ?t$,B8:_$7$J$$(B) $B>l9g$O!"(B<directive>Header</directive>
$B%G%#%l%/%F%#%V$G;XDj$5$l$?F0:n$,9T$J$o$l$^$9!#$=$&$G$J$$>l9g$O!"(B
$B%G%#%l%/%F%#%V$O$=$N%j%/%(%9%H$K$O2?$b$7$^$;$s!#(B</p>
<p><directive>Header</directive> ディレクティブには追加の引数を持たせることが
できて、どういったアクションが行われたかの条件を指定したり、
<a href="#early">早期処理</a> を指定する <code>early</code> キーワードを
指定できます。
<code>env=...</code> 引数で指定された <a
href="../env.html">環境変数</a> が存在する (もしくは <code>env=!...</code>
が指定されていて環境変数が存在しない) 場合は、<directive>Header</directive>
ディレクティブで指定された動作が行なわれます。そうでない場合は、
ディレクティブはそのリクエストには何もしません。</p>
<p><a href="#early">$BAa4|=hM}(B</a>$B%b!<%I$N>l9g0J30$G$O!"(B
<p><a href="#early">早期処理</a>モードの場合以外では、
<directive>Header</directive>
$B%G%#%l%/%F%#%V$O1~Ez$,%M%C%H%o!<%/$KAw$i$l$kD>A0$K(B
$B=hM}$5$l$^$9!#$3$l$O!"%X%C%@%U%#%k%?$K$h$jDI2C$5$l$k%X%C%@$r(B
$B=|$-!"$[$H$s$I$N%X%C%@$r@_Dj$7$?$j>e=q$-$7$?$j$9$k$3$H$,(B
$B2DG=!"$H$$$&$3$H$G$9!#(B</p>
ディレクティブは応答がネットワークに送られる直前に
処理されます。これは、ヘッダフィルタにより追加されるヘッダを
除き、ほとんどのヘッダを設定したり上書きしたりすることが
可能、ということです。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420993 -->
@@ -27,62 +27,62 @@
<status>Extension</status>
<sourcefile>mod_ident.c</sourcefile>
<identifier>ident_module</identifier>
<compatibility>Apache 2.1 $B$G;HMQ2DG=(B</compatibility>
<compatibility>Apache 2.1 で使用可能</compatibility>
<summary>
<p>$B$3$N%b%8%e!<%k$O%j%b!<%H%[%9%H$N(B <a
href="http://www.ietf.org/rfc/rfc1413.txt">RFC 1413</a> $B8_49%G!<%b%s(B
$B$K%3%M%/%7%g%s$N=jM-<T$r?V$-$^$9!#(B</p>
<p>このモジュールはリモートホストの <a
href="http://www.ietf.org/rfc/rfc1413.txt">RFC 1413</a> 互換デーモン
にコネクションの所有者を訊きます。</p>
</summary>
<seealso><module>mod_log_config</module></seealso>
<directivesynopsis>
<name>IdentityCheck</name>
<description>$B%j%b!<%H%f!<%6$N(B RFC 1413 $B$K$h$k%"%$%G%s%F%#%F%#$N%m%.%s%0$r(B
$BM-8z$K$9$k(B</description>
<description>リモートユーザの RFC 1413 によるアイデンティティのロギングを
有効にする</description>
<syntax>IdentityCheck On|Off</syntax>
<default>IdentityCheck Off</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
<compatibility>Apache 2.1 $B$G(B core $B$+$i0\F0(B</compatibility>
<compatibility>Apache 2.1 で core から移動</compatibility>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O!"%/%i%$%"%s%H%^%7%s>e$G(B
identd $B$d$=$l$KN`;w$7$?%G!<%b%s$,F0:n$7$F$$$k$H$-$K!"(B
$B$=$l$>$l$N@\B3$KBP$7$F(B <a href="http://www.ietf.org/rfc/rfc1413.txt"
>RFC 1413</a> $B$K=`=h$7$?%j%b!<%H%f!<%6$N(B
$BL>A0$N%m%.%s%0$r9T$J$&$h$&$K$7$^$9!#(B
$B$3$N>pJs$O!"(B<code>%...l</code> <a href="mod_log_config.html#formats"
>$B%U%)!<%^%C%HJ8;zNs(B</a>$B$r;H$C$F%"%/%;%9%m%0$K<}=8$5$l$^$9!#(B</p>
<p>このディレクティブは、クライアントマシン上で
identd やそれに類似したデーモンが動作しているときに、
それぞれの接続に対して <a href="http://www.ietf.org/rfc/rfc1413.txt"
>RFC 1413</a> に準処したリモートユーザの
名前のロギングを行なうようにします。
この情報は、<code>%...l</code> <a href="mod_log_config.html#formats"
>フォーマット文字列</a>を使ってアクセスログに収集されます。</p>
<note>
$B$3$3$GF@$i$l$?>pJs$O4JC1$J%f!<%6DI@W$K;H$&0J30$O!"(B
$B$^$C$?$/?.Mj$9$k$Y$-$G$O$"$j$^$;$s!#(B</note>
ここで得られた情報は簡単なユーザ追跡に使う以外は、
まったく信頼するべきではありません。</note>
<p>$B$9$Y$F$N%j%/%(%9%H$KBP$7$F%k%C%/%"%C%W$,9T$J$o$l$^$9$N$G!"(B
$B?<9o$JCY1d$NLdBj$r5/$3$9$+$b$7$l$J$$$3$H$KCm0U$7$F$/$@$5$$!#(B
($BLuCm(B: $BNc$($P%/%i%$%"%s%HB&$K(B) $B%U%!%$%"%&%)!<%k$d%W%m%-%7%5!<%P$,$"$k$H!"(B
$B%k%C%/%"%C%W$,<:GT$7!"3F%j%/%(%9%H$K(B <directive module="mod_ident"
>IdentityCheckTimeout</directive>$B$GDj5A$5$l$F$$$kCY1d$,2C$o$k$3$H$K(B
$B$J$k2DG=@-$,$"$j$^$9!#(B
$B=>$C$F!"0lHLE*$K$O%$%s%?!<%M%C%H$+$i%"%/%;%92DG=$J%Q%V%j%C%/$J%5!<%P$G(B
$BM-1W$J$b$N$G$O$"$j$^$;$s!#(B</p>
<p>すべてのリクエストに対してルックアップが行なわれますので、
深刻な遅延の問題を起こすかもしれないことに注意してください。
(訳注: 例えばクライアント側に) ファイアウォールやプロキシサーバがあると、
ルックアップが失敗し、各リクエストに <directive module="mod_ident"
>IdentityCheckTimeout</directive>で定義されている遅延が加わることに
なる可能性があります。
従って、一般的にはインターネットからアクセス可能なパブリックなサーバで
有益なものではありません。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>IdentityCheckTimeout</name>
<description>Ident $B%j%/%(%9%H$,%?%$%`%"%&%H$9$k$^$G$N4|4V$r7h$a$k(B</description>
<description>Ident リクエストがタイムアウトするまでの期間を決める</description>
<syntax>IdentityCheckTimeout <var>seconds</var></syntax>
<default>IdentityCheckTimeout 30</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O(B ident $B%j%/%(%9%H$N%?%$%`%"%&%H;~4V$r7h$a$^$9!#(B
$B%G%U%)%k%H$NCM$G$"$k(B 30 $BIC$O!"<g$K%M%C%H%o!<%/CY1d$N9MN8$N$?$a$K(B <a
href="http://www.ietf.org/rfc/rfc1413.txt">RFC 1413</a> $B$K$h$j(B
$B?d>)$5$l$F$$$^$9!#$7$+$7!"$*$=$i$/%m!<%+%k%M%C%H%o!<%/$NB.EY$K(B
$B9g$o$;$F%?%$%`%"%&%HCM$rD4@a$9$k$N$,$h$$$G$7$g$&!#(B</p>
<p>このディレクティブは ident リクエストのタイムアウト時間を決めます。
デフォルトの値である 30 秒は、主にネットワーク遅延の考慮のために <a
href="http://www.ietf.org/rfc/rfc1413.txt">RFC 1413</a> により
推奨されています。しかし、おそらくローカルネットワークの速度に
合わせてタイムアウト値を調節するのがよいでしょう。</p>
</usage>
</directivesynopsis>

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:450473 (outdated) -->
@@ -23,14 +23,14 @@
<modulesynopsis metafile="mod_info.xml.meta">
<name>mod_info</name>
<description>$B%5!<%P$N@_Dj$NJq3gE*$J354Q$rDs6!$9$k(B</description>
<description>サーバの設定の包括的な概観を提供する</description>
<status>Extension</status>
<sourcefile>mod_info.c</sourcefile>
<identifier>info_module</identifier>
<summary>
<p><module>mod_info</module> $B$r@_Dj$9$k$K$O!"0J2<$r(B <code>httpd.conf</code>
$B%U%!%$%k$K2C$($^$9!#(B</p>
<p><module>mod_info</module> を設定するには、以下を <code>httpd.conf</code>
ファイルに加えます。</p>
<example>
&lt;Location /server-info&gt;<br />
@@ -41,8 +41,8 @@
</example>
<p><directive type="section" module="core">Location</directive>
$B$NCf$G(B <module>mod_access</module> $B$r;H$C$F!"%5!<%P@_Dj>pJs$X$N(B
$B%"%/%;%9$r@)8B$7$?$$$H;W$&$+$b$7$l$^$;$s(B :</p>
の中で <module>mod_access</module> を使って、サーバ設定情報への
アクセスを制限したいと思うかもしれません :</p>
<example>
&lt;Location /server-info&gt;<br />
@@ -55,27 +55,27 @@
&lt;/Location&gt;
</example>
<p>$B0lC6@_Dj$9$k$H!"(B<code>http://your.host.example.com/server-info</code>
$B$K%"%/%;%9$9$k$3$H$G%5!<%P$N>pJs$rF@$i$l$k$h$&$K$J$j$^$9!#(B</p>
<p>一旦設定すると、<code>http://your.host.example.com/server-info</code>
にアクセスすることでサーバの情報を得られるようになります。</p>
</summary>
<section id="security"><title>Security Issues</title>
<p>$B0lC6(B <module>mod_info</module> $B$,%5!<%P$KFI$_9~$^$l$k$H!"(B
$BDs6!$7$F$$$k%O%s%I%i5!G=$O%G%#%l%/%H%jKh$N@_Dj%U%!%$%k(B (<em>$BNc$($P(B</em>
.htaccess) $B$r4^$`(B <em>$B$9$Y$F(B</em>$B$N@_Dj%U%!%$%k$GM-8z$K$J$j$^$9!#(B
$B$3$N%b%8%e!<%k$rM-8z$K$9$k$H$-$O%;%-%e%j%F%#$NLdBj$r9MN8$9$kI,MW$,(B
$B$"$k$G$7$g$&!#(B</p>
<p>一旦 <module>mod_info</module> がサーバに読み込まれると、
提供しているハンドラ機能はディレクトリ毎の設定ファイル (<em>例えば</em>
.htaccess) を含む <em>すべて</em>の設定ファイルで有効になります。
このモジュールを有効にするときはセキュリティの問題を考慮する必要が
あるでしょう。</p>
<p>$BFC$K!"$3$N%b%8%e!<%k$O%7%9%F%`%Q%9!"%f!<%6L>(B/$B%Q%9%o!<%I!"(B
$B%G!<%?%Y!<%9L>$J$I!"B>$N(B Apache $B%b%8%e!<%k$N@_Dj%G%#%l%/%F%#%V$+$i(B
$B%;%-%e%j%F%#>eHyL/$J>pJs$rO3$i$92DG=@-$,$"$j$^$9!#(B
$B$G$9$+$i!"$3$N%b%8%e!<%k$O$-$A$s$H%"%/%;%9@)8f$5$l$?4D6-$G(B<strong>$B$N$_(B</strong>$B!"(B
$BCm0U$7$F;H$C$F$/$@$5$$!#(B</p>
<p>特に、このモジュールはシステムパス、ユーザ名/パスワード、
データベース名など、他の Apache モジュールの設定ディレクティブから
セキュリティ上微妙な情報を漏らす可能性があります。
ですから、このモジュールはきちんとアクセス制御された環境で<strong>のみ</strong>
注意して使ってください。</p>
<p>$B@_Dj>pJs$X$N%"%/%;%9$r@)8B$9$k$?$a$K!"(B<module>mod_authz_host</module> $B$r(B
$B;H$&$N$,NI$$$G$7$g$&!#(B</p>
<p>設定情報へのアクセスを制限するために、<module>mod_authz_host</module>
使うのが良いでしょう。</p>
<example><title>$B%"%/%;%9@)8f(B</title>
<example><title>アクセス制御</title>
&lt;Location /server-info&gt;<br />
<indent>
SetHandler server-info<br />
@@ -89,72 +89,72 @@
</example>
</section>
<section id="queries"><title>$BI=<($5$l$k>pJs$NA*Br(B</title>
<p>$B%G%U%)%k%H$G$O!"%5!<%P>pJs$O$9$Y$F$NM-8z$J%b%8%e!<%k$H!"(B
$B3F%b%8%e!<%k$K$D$$$F!"%b%8%e!<%k$,M}2r$9$k%G%#%l%/%F%#%V!"(B
$B<BAu$7$F$$$k!"%U%C%/!"8=;~E@$G$N@_Dj$N4XO"$9$k%G%#%l%/%F%#%V$K(B
$B$J$C$F$$$^$9!#(B</p>
<section id="queries"><title>表示される情報の選択</title>
<p>デフォルトでは、サーバ情報はすべての有効なモジュールと、
各モジュールについて、モジュールが理解するディレクティブ、
実装している、フック、現時点での設定の関連するディレクティブに
なっています。</p>
<p><code>server-info</code> $B%j%/%(%9%H$X%/%(%j!<$rDI2C$9$k$3$H$G!"(B
$B@_Dj>pJs$NB>$NI=<(7A<0$rA*$V$3$H$,$G$-$^$9!#Nc$($P!"(B
<code>http://your.host.example.com/server-info?config</code> $B$O(B
$B$9$Y$F$N@_Dj%G%#%l%/%F%#%V$rI=<($7$^$9!#(B</p>
<p><code>server-info</code> リクエストへクエリーを追加することで、
設定情報の他の表示形式を選ぶことができます。例えば、
<code>http://your.host.example.com/server-info?config</code>
すべての設定ディレクティブを表示します。</p>
<dl>
<dt><code>?&lt;module-name&gt;</code></dt>
<dd>$B;XDj$5$l$?%b%8%e!<%k$K4XO"$9$k>pJs$N$_(B</dd>
<dd>指定されたモジュールに関連する情報のみ</dd>
<dt><code>?config</code></dt>
<dd>$B%b%8%e!<%k$G%=!<%H$;$:$K!"@_Dj%G%#%l%/%F%#%V$N$_(B</dd>
<dd>モジュールでソートせずに、設定ディレクティブのみ</dd>
<dt><code>?hooks</code></dt>
<dd>$B3F%b%8%e!<%k$,;HMQ$9$k%U%C%/$N$_(B</dd>
<dd>各モジュールが使用するフックのみ</dd>
<dt><code>?list</code></dt>
<dd>$BM-8z$J%b%8%e!<%k$N4JC1$J%j%9%H$N$_(B</dd>
<dd>有効なモジュールの簡単なリストのみ</dd>
<dt><code>?server</code></dt>
<dd>$B4pK\%5!<%P>pJs$N$_(B</dd>
<dd>基本サーバ情報のみ</dd>
</dl>
</section>
<section id="limitations"><title>$B4{CN$N@)8B(B</title>
<p><module>mod_info</module> $B$O!"85$N@_Dj%U%!%$%k$rFI$`$N$G$O$J$/!"(B
$B4{$K%Q!<%9$5$l$?@_Dj$rFI$_9~$`$3$H$G>pJs$rDs6!$7$^$9!#=>$C$F!"(B
$B%Q!<%9:Q$_$N@_Dj>pJs$NLZ$,@8@.$5$l$kJ}K!$K$h$k@)8B$,$$$/$D$+$"$j$^$9(B:</p>
<section id="limitations"><title>既知の制限</title>
<p><module>mod_info</module> は、元の設定ファイルを読むのではなく、
既にパースされた設定を読み込むことで情報を提供します。従って、
パース済みの設定情報の木が生成される方法による制限がいくつかあります:</p>
<ul>
<li>$B%Q!<%9$5$l$?@_Dj$KJ]B8$5$l$:$K!"$9$0$K<B9T$5$l$k%G%#%l%/%F%#%V$O(B
$B0lMw$K8=$l$^$;$s!#$3$l$K$O(B
<li>パースされた設定に保存されずに、すぐに実行されるディレクティブは
一覧に現れません。これには
<directive module="core">ServerRoot</directive>,
<directive module="mod_so">LoadModule</directive>,
<directive module="mod_so">LoadFile</directive> $B$,$"$j$^$9!#(B</li>
<directive module="mod_so">LoadFile</directive> があります。</li>
<li><directive module="core">Include</directive>,
<directive module="core">&lt;IfModule&gt;</directive>,
<directive module="core">&lt;IfDefine&gt;</directive>,
$B$N$h$&$J@_Dj%U%!%$%k<+?H$r@)8f$9$k%G%#%l%/%F%#%V$OI=<($5$l$^$;$s!#(B
$B$=$N%G%#%l%/%F%#%V$NCf$K$"$j!"M-8z$K$J$C$F$$$k%G%#%l%/%F%#%V$O(B
$BI=<($5$l$^$9!#(B</li>
<li>$B%3%a%s%H$OI=<($5$l$^$;$s!#(B($B$3$l$O;EMM$@$H;W$C$F$/$@$5$$!#(B)</li>
<li><code>.htaccess</code> $B%U%!%$%k$N@_Dj%G%#%l%/%F%#%V$OI=<($5$l$^$;$s(B
($B1J5WE*$J%5!<%P@_Dj$N0lIt$G$O$J$$$+$i$G$9(B)$B!#(B</li>
のような設定ファイル自身を制御するディレクティブは表示されません。
そのディレクティブの中にあり、有効になっているディレクティブは
表示されます。</li>
<li>コメントは表示されません。(これは仕様だと思ってください。)</li>
<li><code>.htaccess</code> ファイルの設定ディレクティブは表示されません
(永久的なサーバ設定の一部ではないからです)。</li>
<li><directive module="core">&lt;Directory&gt;</directive>
$B$N$h$&$J%3%s%F%J%G%#%l%/%F%#%V$OIaDL$KI=<($5$l$^$9$,!"(B
<module>mod_info</module> $B$OJD$8%?%0$N(B <directive module="core"
>&lt;/Directory&gt;</directive> $B$J$I$N?t$rCN$k$3$H$O$G$-$^$;$s!#(B</li>
<li><module>mod_perl</module> $B$N$h$&$J%5!<%I%Q!<%F%#%b%8%e!<%k(B
$B$N%G%#%l%/%F%#%V$OI=<($5$l$J$$$+$b$7$l$^$;$s!#(B</li>
のようなコンテナディレクティブは普通に表示されますが、
<module>mod_info</module> は閉じタグの <directive module="core"
>&lt;/Directory&gt;</directive> などの数を知ることはできません。</li>
<li><module>mod_perl</module> のようなサードパーティモジュール
のディレクティブは表示されないかもしれません。</li>
</ul>
</section>
<directivesynopsis>
<name>AddModuleInfo</name>
<description>server-info $B%O%s%I%i$K$h$jI=<($5$l$k%b%8%e!<%k$N>pJs$K(B
$BDI2C$N>pJs$rIU$12C$($k(B</description>
<description>server-info ハンドラにより表示されるモジュールの情報に
追加の情報を付け加える</description>
<syntax>AddModuleInfo <var>module-name</var> <var>string</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>Apache 1.3 $B0J9_(B</compatibility>
<compatibility>Apache 1.3 以降</compatibility>
<usage>
<p>$B$3$l$O!"(B<var>string</var> $B$NFbMF$,%b%8%e!<%k(B <var>module-name</var>
$B$N(B<strong>$BDI2C>pJs(B</strong> $B$H$7$F(B HTML
$B$H$7$F2r<a$5$l!"I=<($5$l$k$h$&$K$7$^$9!#Nc(B:</p>
<p>これは、<var>string</var> の内容がモジュール <var>module-name</var>
の<strong>追加情報</strong> として HTML
として解釈され、表示されるようにします。例:</p>
<example>
AddModuleInfo mod_deflate.c 'See &lt;a \<br />

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990:579425 (outdated) -->
@@ -23,316 +23,316 @@
<modulesynopsis metafile="mod_log_config.xml.meta">
<name>mod_log_config</name>
<description>$B%5!<%P$X$N%j%/%(%9%H$N%m%.%s%0(B</description>
<description>サーバへのリクエストのロギング</description>
<status>Base</status>
<sourcefile>mod_log_config.c</sourcefile>
<identifier>log_config_module</identifier>
<summary>
<p>
$B$3$N%b%8%e!<%k$O%/%i%$%"%s%H$N%j%/%(%9%H$r=@Fp$K%m%0<}=8$9$k5!G=$r(B
$BDs6!$7$^$9!#%m%0$O%+%9%?%^%$%:2DG=$J=q<0$G=q$+$l!"%U%!%$%k$KD>@\(B
$B=q$$$?$j!"30It%W%m%0%i%`$KEO$7$?$j$9$k$3$H$,$G$-$^$9!#8D!9$N%j%/%(%9%H$r(B
$BFCD'$K1~$8$F%m%0$K=q$$$?$j=q$+$J$+$C$?$j$G$-$k$h$&$K!">r7o$K$h$k(B
$B%m%0<}=8$bDs6!$5$l$F$$$^$9!#(B</p>
このモジュールはクライアントのリクエストを柔軟にログ収集する機能を
提供します。ログはカスタマイズ可能な書式で書かれ、ファイルに直接
書いたり、外部プログラムに渡したりすることができます。個々のリクエストを
特徴に応じてログに書いたり書かなかったりできるように、条件による
ログ収集も提供されています。</p>
<p>$B$3$N%b%8%e!<%k$O;0$D$N%G%#%l%/%F%#%VDs6!$7$^$9(B:
$B%m%0%U%!%$%k$r:n@.$9$k$?$a$N(B <directive module="mod_log_config"
<p>このモジュールは三つのディレクティブ提供します:
ログファイルを作成するための <directive module="mod_log_config"
>TransferLog</directive>,
$B?7$7$$=q<0$r(B $BDj5A$9$k(B <directive module="mod_log_config">LogFormat</directive>,
$B%m%0%U%!%$%k$H(B $B=q<0$r0lEY$KDj5A$9$k(B <directive module="mod_log_config"
>CustomLog</directive> $B$G$9!#(B
$B3F%j%/%(%9%H$,J#?t2s%m%0<}=8$5$l$k$h$&$K$9$k$?$a$K(B
<directive>TransferLog</directive> $B%G%#%l%/%F%#%V$H(B
新しい書式を 定義する <directive module="mod_log_config">LogFormat</directive>,
ログファイルと 書式を一度に定義する <directive module="mod_log_config"
>CustomLog</directive> です。
各リクエストが複数回ログ収集されるようにするために
<directive>TransferLog</directive> ディレクティブと
<directive>CustomLog</directive>
$B%G%#%l%/%F%#%V$OJ#?t2s;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
ディレクティブは複数回使用することができます。</p>
</summary>
<seealso><a href="../logs.html">Apache $B%m%0%U%!%$%k(B</a></seealso>
<seealso><a href="../logs.html">Apache ログファイル</a></seealso>
<section id="formats"><title>$B%+%9%?%`%m%0=q<0(B</title>
<section id="formats"><title>カスタムログ書式</title>
<p><directive module="mod_log_config">LogFormat</directive> $B%G%#%l%/%F%#%V$H(B
<p><directive module="mod_log_config">LogFormat</directive> ディレクティブと
<directive module="mod_log_config">CustomLog</directive>
$B%G%#%l%/%F%#%V$N=q<0$r;XDj$9$k0z?t$OJ8;zNs$G$9!#$3$NJ8;zNs$r;H$C$F$=$l$>$l$N(B
$B%j%/%(%9%H$,%m%0%U%!%$%k$K%m%0<}=8$5$l$^$9!#$=$NJ8;zNs$K$O(B
$B%m%0%U%!%$%k$K$=$N$^$^(B
$B=q$+$l$kJ8;zNs$d!"$=$l$>$l2~9T$H%?%V$rI=$9(B C $B8@8l(B
$B7A<0$N@)8fJ8;z(B "\n" $B$H(B "\t"
$B$H$r4^$a$k$3$H$,$G$-$^$9!#$=$N$^$^=PNO$5$;$?$$0zMQId$H%P%C%/%9%i%C%7%e$O(B
$B%P%C%/%9%i%C%7%e$G%(%9%1!<%W$9$kI,MW$,$"$j$^$9!#(B</p>
ディレクティブの書式を指定する引数は文字列です。この文字列を使ってそれぞれの
リクエストがログファイルにログ収集されます。その文字列には
ログファイルにそのまま
書かれる文字列や、それぞれ改行とタブを表す C 言語
形式の制御文字 "\n" と "\t"
とを含めることができます。そのまま出力させたい引用符とバックスラッシュは
バックスラッシュでエスケープする必要があります。</p>
<p>$B%j%/%(%9%H$NFCD'$=$N$b$N$O(B "<code>%</code>"
$B%G%#%l%/%F%#%V$r=q<0$NJ8;zNs$K=q$/$3$H$G(B
$B%m%0<}=8$5$l$^$9!#(B"%"
$B%G%#%l%/%F%#%V$O%m%0%U%!%$%kCf$G$O0J2<$N$h$&$J(B
$BCM$GCV49$5$l$^$9(B:</p>
<p>リクエストの特徴そのものは "<code>%</code>"
ディレクティブを書式の文字列に書くことで
ログ収集されます。"%"
ディレクティブはログファイル中では以下のような
値で置換されます:</p>
<table border="1" style="zebra">
<columnspec><column width=".2"/><column width=".8"/></columnspec>
<tr><th>$B%U%)!<%^%C%HJ8;zNs(B</th>
<th>$B@bL@(B</th></tr>
<tr><th>フォーマット文字列</th>
<th>説明</th></tr>
<tr><td><code>%%</code></td>
<td>$B%Q!<%;%s%H5-9f(B</td></tr>
<td>パーセント記号</td></tr>
<tr><td><code>%a</code></td>
<td>$B%j%b!<%H(B IP $B%"%I%l%9(B</td></tr>
<td>リモート IP アドレス</td></tr>
<tr><td><code>%A</code></td>
<td>$B%m!<%+%k(B IP $B%"%I%l%9(B</td></tr>
<td>ローカル IP アドレス</td></tr>
<tr><td><code>%B</code></td>
<td>$B%l%9%]%s%9$N%P%$%H?t!#(BHTTP $B%X%C%@$O=|$/!#(B</td></tr>
<td>レスポンスのバイト数。HTTP ヘッダは除く。</td></tr>
<tr><td><code>%b</code></td>
<td>$B%l%9%]%s%9$N%P%$%H?t!#(BHTTP $B%X%C%@$O=|$/!#(BCLF $B=q<0!#(B
<em>$B$9$J$o$A(B</em>$B!"(B1 $B%P%$%H$bAw$i$l$J$+$C$?$H$-$O(B 0 $B$G$O$J$/!"(B
'<code>-</code>' $B$K$J$k(B</td></tr>
<td>レスポンスのバイト数。HTTP ヘッダは除く。CLF 書式。
<em>すなわち</em>、1 バイトも送られなかったときは 0 ではなく、
'<code>-</code>' になる</td></tr>
<tr><td><code>%{<var>Foobar</var>}C</code></td>
<td>$B%5!<%P$KAw$i$l$?%j%/%(%9%HCf$N%/%C%-!<(B <var>Foobar</var> $B$NCM(B</td></tr>
<td>サーバに送られたリクエスト中のクッキー <var>Foobar</var> の値</td></tr>
<tr><td><code>%D</code></td>
<td>$B%j%/%(%9%H$r=hM}$9$k$N$K$+$+$C$?;~4V!"%^%$%/%mICC10L(B</td></tr>
<td>リクエストを処理するのにかかった時間、マイクロ秒単位</td></tr>
<tr><td><code>%{<var>FOOBAR</var>}e</code></td>
<td>$B4D6-JQ?t(B <var>FOOBAR</var> $B$NFbMF(B</td></tr>
<td>環境変数 <var>FOOBAR</var> の内容</td></tr>
<tr><td><code>%f</code></td>
<td>$B%U%!%$%kL>(B</td></tr>
<td>ファイル名</td></tr>
<tr><td><code>%h</code></td>
<td>$B%j%b!<%H%[%9%H(B</td></tr>
<td>リモートホスト</td></tr>
<tr><td><code>%H</code></td>
<td>$B%j%/%(%9%H%W%m%H%3%k(B</td></tr>
<td>リクエストプロトコル</td></tr>
<tr><td><code>%{<var>Foobar</var>}i</code></td>
<td>$B%5!<%P$KAw$i$l$?%j%/%(%9%H$N(B <code><var>Foobar</var>:</code>
$B%X%C%@$NFbMF(B</td></tr>
<td>サーバに送られたリクエストの <code><var>Foobar</var>:</code>
ヘッダの内容</td></tr>
<tr><td><code>%l</code></td>
<td>(identd $B$+$i$b$7Ds6!$5$l$F$$$l$P(B) $B%j%b!<%H%m%0L>!#(B
$B$3$l$O(B <module>mod_ident</module> $B$,%5!<%P$KB8:_$7$F!"(B
<td>(identd からもし提供されていれば) リモートログ名。
これは <module>mod_ident</module> がサーバに存在して、
<directive module="mod_ident">IdentityCheck</directive>
$B%G%#%l%/%F%#%V$,(B <code>On</code> $B$K@_Dj$5$l$F$$$J$$8B$j!"(B
<code>-</code> $B$K$J$j$^$9!#(B</td></tr>
ディレクティブが <code>On</code> に設定されていない限り、
<code>-</code> になります。</td></tr>
<tr><td><code>%m</code></td>
<td>$B%j%/%(%9%H%a%=%C%I(B</td></tr>
<td>リクエストメソッド</td></tr>
<tr><td><code>%{<var>Foobar</var>}n</code></td>
<td>$BB>$N%b%8%e!<%k$+$i$N%a%b(B <var>Foobar</var> $B$NFbMF(B</td></tr>
<td>他のモジュールからのメモ <var>Foobar</var> の内容</td></tr>
<tr><td><code>%{<var>Foobar</var>}o</code></td>
<td>$B1~Ez$N(B <code><var>Foobar</var>:</code> $B%X%C%@$NFbMF(B</td></tr>
<td>応答の <code><var>Foobar</var>:</code> ヘッダの内容</td></tr>
<tr><td><code>%p</code></td>
<td>$B%j%/%(%9%H$r07$C$F$$$k%5!<%P$N@5<0$J%]!<%H(B</td></tr>
<td>リクエストを扱っているサーバの正式なポート</td></tr>
<tr><td><code>%P</code></td>
<td>$B%j%/%(%9%H$r07$C$?;R%W%m%;%9$N%W%m%;%9(B ID</td></tr>
<td>リクエストを扱った子プロセスのプロセス ID</td></tr>
<tr><td><code>%{<var>format</var>}P</code></td>
<td>$B%j%/%(%9%H$r07$C$?%o!<%+!<$N%W%m%;%9(B ID $B$+%9%l%C%I(B ID$B!#(B
<var>format</var> $B$H$7$FM-8z$JCM$O(B <code>pid</code>, <code>tid</code>,
<code>hextid</code> $B$G$9!#(B<code>hextid</code> $B$r;H$&$K$O(B
APR 1.2.0 $B0J9_$,I,MW$G$9!#(B
<td>リクエストを扱ったワーカーのプロセス ID かスレッド ID。
<var>format</var> として有効な値は <code>pid</code>, <code>tid</code>,
<code>hextid</code> です。<code>hextid</code> を使うには
APR 1.2.0 以降が必要です。
</td></tr>
<tr><td><code>%q</code></td>
<td>$BLd$$9g$;J8;zNs(B ($BB8:_$9$k>l9g$OA0$K(B <code>?</code> $B$,DI2C$5$l$k!#(B
$B$=$&$G$J$$>l9g$O6uJ8;zNs(B)</td></tr>
<td>問い合せ文字列 (存在する場合は前に <code>?</code> が追加される。
そうでない場合は空文字列)</td></tr>
<tr><td><code>%r</code></td>
<td>$B%j%/%(%9%H$N:G=i$N9T(B</td></tr>
<td>リクエストの最初の行</td></tr>
<tr><td><code>%s</code></td>
<td>$B%9%F!<%?%9!#FbIt$G%j%@%$%l%/%H$5$l$?%j%/%(%9%H$O!"85!9$N(B
$B%j%/%(%9%H$N%9%F!<%?%9(B --- $B:G8e$N%9%F!<%?%9$O(B <code>%&gt;s</code>
<td>ステータス。内部でリダイレクトされたリクエストは、元々の
リクエストのステータス --- 最後のステータスは <code>%&gt;s</code>
</td></tr>
<tr><td><code>%t</code></td>
<td>$B%j%/%(%9%H$r<uIU$1$?;~9o!#(B
CLF $B$N;~9o$N=q<0(B ($BI8=`$N1Q8l$N=q<0(B)</td></tr>
<td>リクエストを受付けた時刻。
CLF の時刻の書式 (標準の英語の書式)</td></tr>
<tr><td><code>%{<var>format</var>}t</code></td>
<td><var>format</var> $B$GM?$($i$l$?=q<0$K$h$k;~9o!#(Bformat $B$O(B
<code>strftime (3)</code> $B$N(B
$B=q<0$G$"$kI,MW$,$"$k!#(B($BCO0h2=$5$l$F$$$k2DG=@-$,$"$k(B)</td></tr>
<td><var>format</var> で与えられた書式による時刻。format は
<code>strftime (3)</code>
書式である必要がある。(地域化されている可能性がある)</td></tr>
<tr><td><code>%T</code></td>
<td>$B%j%/%(%9%H$r07$&$N$K$+$+$C$?;~4V!"ICC10L(B</td></tr>
<td>リクエストを扱うのにかかった時間、秒単位</td></tr>
<tr><td><code>%u</code></td>
<td>$B%j%b!<%H%f!<%6(B ($BG'>Z$K$h$k$b$N!#%9%F!<%?%9(B (<code>%s</code>) $B$,(B
401 $B$N$H$-$O0UL#$,$J$$$b$N$G$"$k2DG=@-$,$"$k(B)
<td>リモートユーザ (認証によるもの。ステータス (<code>%s</code>)
401 のときは意味がないものである可能性がある)
</td></tr>
<tr><td><code>%U</code></td>
<td>$B%j%/%(%9%H$5$l$?(B URL $B%Q%9!#%/%(%jJ8;zNs$O4^$^$J$$(B</td></tr>
<td>リクエストされた URL パス。クエリ文字列は含まない</td></tr>
<tr><td><code>%v</code></td>
<td>$B%j%/%(%9%H$r07$C$F$$$k%5!<%P$N@5<0$J(B <directive
<td>リクエストを扱っているサーバの正式な <directive
module="core">ServerName</directive></td></tr>
<tr><td><code>%V</code></td>
<td><directive module="core"
>UseCanonicalName</directive> $B$N@_Dj$K$h$k%5!<%PL>(B</td></tr>
>UseCanonicalName</directive> の設定によるサーバ名</td></tr>
<tr><td><code>%X</code></td>
<td>$B1~Ez$,40N;$7$?$H$-$N@\B3%9%F!<%?%9(B:
<td>応答が完了したときの接続ステータス:
<table>
<columnspec><column width=".2"/><column width=".6"/></columnspec>
<tr><td><code>X</code> =</td>
<td>$B1~Ez$,40N;$9$kA0$K@\B3$,0[>o=*N;(B</td></tr>
<td>応答が完了する前に接続が異常終了</td></tr>
<tr><td><code>+</code> =</td>
<td>$B1~Ez$,Aw$i$l$?8e$K@\B3$r;}B3$9$k$3$H$,2DG=(B</td></tr>
<td>応答が送られた後に接続を持続することが可能</td></tr>
<tr><td><code>-</code> = </td>
<td>$B1~Ez$,Aw$i$l$?8e$K@\B3$,@Z$i$l$k(B</td></tr>
<td>応答が送られた後に接続が切られる</td></tr>
</table>
<p>($B$3$N%G%#%l%/%F%#%V$O(B Apache
1.3 $B$N8e4|$N%P!<%8%g%s$G$O(B <code>%c</code> $B$K3d$jEv$F$i$l$F(B
$B$$$^$7$?$,!"$3$l$ONr;KE*$K(B ssl $B$,;HMQ$7$F$$$k(B
<p>(このディレクティブは Apache
1.3 の後期のバージョンでは <code>%c</code> に割り当てられて
いましたが、これは歴史的に ssl が使用している
<code>%{<var>var</var>}c</code>
$B9=J8$H>WFM$7$F$$$^$7$?!#(B)</p></td></tr>
構文と衝突していました。)</p></td></tr>
<tr><td><code>%I</code></td>
<td>$B%j%/%(%9%H$H%X%C%@$r4^$`!"<u$1<h$C$?%P%$%H?t!#(B
0 $B$K$O$J$i$J$$!#(B
$B$3$l$r;HMQ$9$k$?$a$K$O(B <module>mod_logio</module> $B$,I,MW(B</td></tr>
<td>リクエストとヘッダを含む、受け取ったバイト数。
0 にはならない。
これを使用するためには <module>mod_logio</module> が必要</td></tr>
<tr><td><code>%O</code></td>
<td>$B%X%C%@$r4^$`!"Aw?.$7$?%P%$%H?t!#(B0 $B$K$O$J$i$J$$!#(B
$B$3$l$r;HMQ$9$k$?$a$K$O(B <module>mod_logio</module> $B$,I,MW(B</td></tr>
<td>ヘッダを含む、送信したバイト数。0 にはならない。
これを使用するためには <module>mod_logio</module> が必要</td></tr>
</table>
<section id="modifiers"><title>$B=$>~;R(B</title>
<section id="modifiers"><title>修飾子</title>
<p>$BFCDj$NMWAG$O(B "%" $B$ND>8e$K(B HTTP $B%9%F!<%?%9%3!<%I$r%+%s%^6h@Z$j$G(B
$B;XDj$9$k$3$H$G!"I=<($r@)8B$9$k$3$H$,$G$-$^$9!#Nc$($P(B
<code>"%400,501{User-agent}i"</code> $B$G$O!"(B
400 $B$H(B 500 $BHV%(%i!<$G$N$_(B <code>User-agent</code> $B$r%m%0$7$^$9!#(B
$BB>$N%9%F!<%?%9%3!<%I$G$O(B <code>"-"</code> $B$H$$$&J8;zNs$,(B
$B%m%0$5$l$^$9!#%9%F!<%?%9%3!<%I$N%j%9%H$O(B "<code>!</code>"
$B$GH]Dj$r;XDj$9$k$3$H$,$G$-$^$9(B :
<code>"%!200,304,302{Referer}i"</code> $B$O!";XDj$5$l$?(B
3 $B$D$N%3!<%I$N(B<em>$B$I$l$K$b3:Ev$7$J$$(B</em>$B%j%/%(%9%HA4$F$G(B
<code>Referer</code> $B$r%m%0$7$^$9!#(B</p>
<p>特定の要素は "%" の直後に HTTP ステータスコードをカンマ区切りで
指定することで、表示を制限することができます。例えば
<code>"%400,501{User-agent}i"</code> では、
400 と 500 番エラーでのみ <code>User-agent</code> をログします。
他のステータスコードでは <code>"-"</code> という文字列が
ログされます。ステータスコードのリストは "<code>!</code>"
で否定を指定することができます :
<code>"%!200,304,302{Referer}i"</code> は、指定された
3 つのコードの<em>どれにも該当しない</em>リクエスト全てで
<code>Referer</code> をログします。</p>
<p>$B=$>~;R(B "&lt;" $B$H(B "&gt;" $B$OFbIt%j%@%$%l%/%H$5$l$?%j%/%(%9%H$N%m%0$K(B
$B85$N%j%/%(%9%H$+:G=*E*$J%j%/%(%9%H$N$I$A$i$r;HMQ$9$k$+$r(B
$B;XDj$9$k$?$a$K;H$$$^$9!#%G%U%)%k%H$G$O!"(B<code>%</code> $B%G%#%l%/%F%#%V$N(B
<code>%s, %U, %T, %D, %r</code> $B$O85$N%j%/%(%9%H$r!"B>$O:G=*E*$J%j%/%(%9%H$r(B
$B;HMQ$7$^$9!#Nc$($P!"%j%/%(%9%H$N:G=*%9%F!<%?%9$r5-O?$9$k$K$O(B
<code>%&gt;s</code> $B$r!"FbItE*$KG'>Z$5$l$F$$$J$$%j%=!<%9$X%j%@%$%l%/%H$5$l$?(B
$B%j%/%(%9%H$G85$N%j%/%(%9%H$GG'>Z$5$l$?%f!<%6$r5-O?$9$k$?$a$K$O(B
<code>%&lt;u</code> $B$r;H$&$3$H$,$G$-$^$9!#(B</p>
<p>修飾子 "&lt;" と "&gt;" は内部リダイレクトされたリクエストのログに
元のリクエストか最終的なリクエストのどちらを使用するかを
指定するために使います。デフォルトでは、<code>%</code> ディレクティブの
<code>%s, %U, %T, %D, %r</code> は元のリクエストを、他は最終的なリクエストを
使用します。例えば、リクエストの最終ステータスを記録するには
<code>%&gt;s</code> を、内部的に認証されていないリソースへリダイレクトされた
リクエストで元のリクエストで認証されたユーザを記録するためには
<code>%&lt;u</code> を使うことができます。</p>
</section>
<section id="format-notes"><title>$B$=$NB>Cm0UE@(B</title>
<section id="format-notes"><title>その他注意点</title>
<p>$B%;%-%e%j%F%#>e$NM}M3$K$h$j(B 2.0.46 $B$h$j!"(B
<code>%r</code>, <code>%i</code>, <code>%o</code> $B$KF~$C$F$$$k!"(B
$B0u;zIT2DG=$JJ8;z$HB>$NFCJL$JJ8;z$O!"(B<code>\x<var>hh</var></code>
$B$H$$$&7A<0$NJ8;zNs$G%(%9%1!<%W$5$l$k$h$&$K$J$j$^$7$?!#(B<var>hh</var> $B$O(B
$B$=$N$^$^$N%P%$%H$NCM$N(B 16 $B?J$G$NCM$G$9!#$3$N5,B'$NNc30$K$O!"(B
$B%P%C%/%9%i%C%7%e$r;H$C$F%(%9%1!<%W$5$l$k(B <code>"</code> $B$H(B <code>\</code> $B$H!"(B
C $B7A<0$NI=5-K!$,;H$o$l$k6uGrJ8;z(B (<code>\n</code>, <code>\t</code> $B$J$I(B)
$B$,$"$j$^$9!#(B2.0.46 $B0JA0$N%P!<%8%g%s$G$O%(%9%1!<%W=hM}$O9T$o$l$^$;$s$N$G!"(B
$B@8%m%0%U%!%$%k$r07$&:]$KCm0U$,I,MW$G$9!#(B</p>
<p>セキュリティ上の理由により 2.0.46 より、
<code>%r</code>, <code>%i</code>, <code>%o</code> に入っている、
印字不可能な文字と他の特別な文字は、<code>\x<var>hh</var></code>
という形式の文字列でエスケープされるようになりました。<var>hh</var>
そのままのバイトの値の 16 進での値です。この規則の例外には、
バックスラッシュを使ってエスケープされる <code>"</code> <code>\</code> と、
C 形式の表記法が使われる空白文字 (<code>\n</code>, <code>\t</code> など)
があります。2.0.46 以前のバージョンではエスケープ処理は行われませんので、
生ログファイルを扱う際に注意が必要です。</p>
<p>httpd 2.0 $B$G$O(B 1.3 $B$H$O0[$J$j!"(B<code>%b</code> $B$H(B <code>%B</code>
$B%U%)!<%^%C%HJ8;zNs$O%/%i%$%"%s%H$KAw?.$5$l$?%P%$%H?t$=$N$b$N$G$O$J$/!"(B
HTTP $B%l%9%]%s%9$N%P%$%H?t$G$9(B ($B$3$l$i$O0[$J$k$b$N$G!"$?$H$($P!"(B
$B%3%M%/%7%g%s$,ESCf$GGK4~$5$l$?>l9g$d!"(BSSL $B;HMQ;~$K0lCW$7$^$;$s(B) $B!#(B
<module>mod_logio</module> $B$GDs6!$5$l$F$$$k(B <code>%O</code>
$B%U%)!<%^%C%HJ8;zNs$G!"%M%C%H%o!<%/7PM3$G<B:]$KE>Aw$5$l$?%P%$%H?t$r(B
$B5-O?$G$-$^$9!#(B</p>
<p>httpd 2.0 では 1.3 とは異なり、<code>%b</code> <code>%B</code>
フォーマット文字列はクライアントに送信されたバイト数そのものではなく、
HTTP レスポンスのバイト数です (これらは異なるもので、たとえば、
コネクションが途中で破棄された場合や、SSL 使用時に一致しません) 。
<module>mod_logio</module> で提供されている <code>%O</code>
フォーマット文字列で、ネットワーク経由で実際に転送されたバイト数を
記録できます。</p>
</section>
<section id="examples"><title>$BNc(B</title>
<section id="examples"><title></title>
<p>$B$h$/;H$o$l$k%U%)!<%^%C%HJ8;zNs$O(B:</p>
<p>よく使われるフォーマット文字列は:</p>
<dl>
<dt>Common Log Format (CLF)</dt>
<dd><code>"%h %l %u %t \"%r\" %&gt;s %b"</code></dd>
<dt>$B%P!<%A%c%k%[%9%HIU$-(B Common Log Format</dt>
<dt>バーチャルホスト付き Common Log Format</dt>
<dd><code>"%v %h %l %u %t \"%r\" %&gt;s %b"</code></dd>
<dt>NCSA extended/combined $B%m%0=q<0(B</dt>
<dt>NCSA extended/combined ログ書式</dt>
<dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
\"%{User-agent}i\""</code></dd>
<dt>Referer $B%m%0=q<0(B</dt>
<dt>Referer ログ書式</dt>
<dd><code>"%{Referer}i -&gt; %U"</code></dd>
<dt>Agent ($B%V%i%&%6(B) $B%m%0=q<0(B</dt>
<dt>Agent (ブラウザ) ログ書式</dt>
<dd><code>"%{User-agent}i"</code></dd>
</dl>
</section>
</section>
<section id="security"><title>$B%;%-%e%j%F%#$K4X$7$F(B</title>
<p>$B%m%0%U%!%$%k$,J]B8$5$l$F$$$k%G%#%l%/%H%j$,%5!<%P$r5/F0$7$?0J30$N%f!<%6$G(B
$B=q$-9~$_2DG=$J$H$-$K%;%-%e%j%F%#$NLdBj$,H/@8$9$kM}M3$N>\:Y$O(B<a
href="../misc/security_tips.html#serverroot">$B%;%-%e%j%F%#$N$3$D(B</a>
$B$r;2>H$7$F$/$@$5$$!#(B</p>
<section id="security"><title>セキュリティに関して</title>
<p>ログファイルが保存されているディレクトリがサーバを起動した以外のユーザで
書き込み可能なときにセキュリティの問題が発生する理由の詳細は<a
href="../misc/security_tips.html#serverroot">セキュリティのこつ</a>
を参照してください。</p>
</section>
<directivesynopsis>
<name>BufferedLogs</name>
<description>$B%G%#%9%/$K=q$-=P$9A0$K%a%b%j$K%m%0%(%s%H%j$r%P%C%U%!$9$k(B</description>
<description>ディスクに書き出す前にメモリにログエントリをバッファする</description>
<syntax>BufferedLogs On|Off</syntax>
<default>BufferedLogs Off</default>
<contextlist><context>server config</context></contextlist>
<status>Experimental</status>
<compatibility>2.0.41 $B0J9_(B</compatibility>
<compatibility>2.0.41 以降</compatibility>
<usage>
<p><directive>BufferedLogs</directive> $B%G%#%l%/%F%#%V$r;H$&$H(B
<module>mod_log_config</module> $B$N5sF0$,JQ2=$7$F!"(B
$BJ#?t$N%m%0$r=q$-=P$9:]$K!"$=$l$>$l$N%j%/%(%9%H=hM}8eKh$K(B
$B=q$-=P$9$N$G$O$J$/!"$$$C$?$s%a%b%j$KC_$($F$+$i!"(B
$B$^$H$a$F%G%#%9%/$K=q$-=P$9$h$&$K$J$j$^$9!#(B
$B$3$N7k2L%G%#%9%/%"%/%;%9$,$h$j8zN(E*$K$J$j!"(B
$B9b$$%Q%U%)!<%^%s%9$NF@$i$l$k%7%9%F%`$b$"$k$G$7$g$&!#(B
$B$3$N%G%#%l%/%F%#%V$O%5!<%PA4BN$G0lEY$@$1@_Dj$G$-$^$9(B;
$B%P!<%A%c%k%[%9%H$4$H$K@_Dj$9$k$3$H$O$G$-$^$;$s!#(B</p>
<p><directive>BufferedLogs</directive> ディレクティブを使うと
<module>mod_log_config</module> の挙動が変化して、
複数のログを書き出す際に、それぞれのリクエスト処理後毎に
書き出すのではなく、いったんメモリに蓄えてから、
まとめてディスクに書き出すようになります。
この結果ディスクアクセスがより効率的になり、
高いパフォーマンスの得られるシステムもあるでしょう。
このディレクティブはサーバ全体で一度だけ設定できます;
バーチャルホストごとに設定することはできません。</p>
<note>$B$3$N%G%#%l%/%F%#%V$O<B83E*$J$b$N$G$9$N$G!"(B
$B;HMQ$9$k:]$OCm0U$7$F$/$@$5$$!#(B</note>
<note>このディレクティブは実験的なものですので、
使用する際は注意してください。</note>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>CookieLog</name>
<description>$B%/%C%-%s%0$N%m%.%s%0$N$?$a$N%U%!%$%kL>$r@_Dj$9$k(B</description>
<description>クッキングのロギングのためのファイル名を設定する</description>
<syntax>CookieLog <var>filename</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>$B$3$N%G%#%l%/%F%#%V$OHs?d>)(B</compatibility>
<compatibility>このディレクティブは非推奨</compatibility>
<usage>
<p><directive>CookieLog</directive>
$B%G%#%l%/%F%#%V$O%/%C%-!<$N%m%.%s%0$N$?$a$N%U%!%$%kL>$r(B
$B@_Dj$7$^$9!#(Bfilename $B$O(B <directive
ディレクティブはクッキーのロギングのためのファイル名を
設定します。filename <directive
module="core">ServerRoot</directive>
$B$+$i$NAjBP%Q%9$G$9!#$3$N%G%#%l%/%F%#%V$O(B <code
>mod_cookies</code> $B$H$N8_49@-$N$?$a$@$1$K(B
$BB8:_$7!";HMQ$O?d>)$5$l$F$$$^$;$s!#(B</p>
からの相対パスです。このディレクティブは <code
>mod_cookies</code> との互換性のためだけに
存在し、使用は推奨されていません。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>CustomLog</name>
<description>$B%m%0%U%!%$%k$NL>A0$H=q<0$r@_Dj$9$k(B</description>
<description>ログファイルの名前と書式を設定する</description>
<syntax>CustomLog <var>file</var>|<var>pipe</var>
<var>format</var>|<var>nickname</var>
[env=[!]<var>environment-variable</var>]</syntax>
@@ -340,45 +340,45 @@
</contextlist>
<usage>
<p><directive>CustomLog</directive> $B%G%#%l%/%F%#%V$O%5!<%P$X$N%j%/%(%9%H$r(B
$B%m%0<}=8$9$k$?$a$K;H$o$l$^$9!#%m%0$N=q<0$,;XDj$5$l!"(B
$B4D6-JQ?t$r;H$C$F%m%.%s%0$,>r7o$K1~$8$F9T$J$o$l$k$h$&$K$9$k$3$H$b$G$-$^$9!#(B</p>
<p><directive>CustomLog</directive> ディレクティブはサーバへのリクエストを
ログ収集するために使われます。ログの書式が指定され、
環境変数を使ってロギングが条件に応じて行なわれるようにすることもできます。</p>
<p>$B%m%0$,=q$+$l$k>l=j$r;XDj$9$k:G=i$N0z?t$O0J2<$NFs$D$N7A<0$NCM$r(B
$B$H$k$3$H$,$G$-$^$9(B:</p>
<p>ログが書かれる場所を指定する最初の引数は以下の二つの形式の値を
とることができます:</p>
<dl>
<dt><var>file</var></dt>
<dd><directive module="core">ServerRoot</directive>
$B$+$i$NAjBP%Q%9$GI=$5$l$k%U%!%$%kL>!#(B</dd>
からの相対パスで表されるファイル名。</dd>
<dt><var>pipe</var></dt>
<dd>$B%Q%$%WJ8;z(B "<code>|</code>" $B$H!"$=$N8e$KI8=`F~NO$+$i%m%0$N(B
$B>pJs$r<u$1$H$k%W%m%0%i%`$X$N%Q%9$,B3$$$?$b$N!#(B
<dd>パイプ文字 "<code>|</code>" と、その後に標準入力からログの
情報を受けとるプログラムへのパスが続いたもの。
<note type="warning"><title>$B%;%-%e%j%F%#(B</title>
<p>$B$b$7%W%m%0%i%`$,;HMQ$5$l$?>l9g!"(B
<program>httpd</program> $B$,5/F0$5$l$?%f!<%6$H$7$F<B9T$5$l$^$9!#$3$l$O%5!<%P$,(B
root $B$K$h$C$F5/F0$5$l$?>l9g$O(B root $B$K$J$j$^$9!#%W%m%0%i%`$,(B
$B0BA4$G$"$k$h$&$KN10U$7$F$/$@$5$$!#(B</p>
<note type="warning"><title>セキュリティ</title>
<p>もしプログラムが使用された場合、
<program>httpd</program> が起動されたユーザとして実行されます。これはサーバが
root によって起動された場合は root になります。プログラムが
安全であるように留意してください。</p>
</note>
<note type="warning"><title>$BCm(B</title>
<p>Unix $B$G$J$$%W%i%C%H%U%)!<%`$G%U%!%$%k$N%Q%9$rF~NO$7$F$$$k$H$-$O!"(B
$B;HMQ$7$F$$$k%W%i%C%H%U%)!<%`$,%P%C%/%9%i%C%7%e$N;HMQ$r5v2D$7$F$$$?(B
$B$H$7$F!"DL>o$N%9%i%C%7%e$@$1$r;H$&$h$&$K5$$r$D$1$F$/$@$5$$!#(B
$B0lHLE*$K!"@_Dj%U%!%$%kCf$G$O>o$KIaDL$N%9%i%C%7%e$N$_$r;H$&$h$&$K$9$k(B
$BJ}$,NI$$$G$9!#(B</p>
<note type="warning"><title></title>
<p>Unix でないプラットフォームでファイルのパスを入力しているときは、
使用しているプラットフォームがバックスラッシュの使用を許可していた
として、通常のスラッシュだけを使うように気をつけてください。
一般的に、設定ファイル中では常に普通のスラッシュのみを使うようにする
方が良いです。</p>
</note></dd>
</dl>
<p>$BFs$D$a$N0z?t$O%m%0%U%!%$%k$K2?$,=q$+$l$k$+$r;XDj$7$^$9!#(B
$BA0$K$"$k(B <directive
module="mod_log_config">LogFormat</directive> $B%G%#%l%/%F%#%V$K$h$j(B
$BDj5A$5$l$?(B <var>nickname</var> $B$+!"(B<a href="#formats">$B%m%0$N=q<0(B</a>
$B$N$H$3$m$G@bL@$5$l$F$$$k!"L@<(E*$J(B <var>format</var> $BJ8;zNs$N(B
$B$I$A$i$+$r;XDj$9$k$3$H$,$G$-$^$9!#(B</p>
<p>二つめの引数はログファイルに何が書かれるかを指定します。
前にある <directive
module="mod_log_config">LogFormat</directive> ディレクティブにより
定義された <var>nickname</var> か、<a href="#formats">ログの書式</a>
のところで説明されている、明示的な <var>format</var> 文字列の
どちらかを指定することができます。</p>
<p>$BNc$($P!"0J2<$NFs$D$N%G%#%l%/%F%#%V72$OA4$/F1$88z2L$r$b$?$i$7$^$9(B:</p>
<p>例えば、以下の二つのディレクティブ群は全く同じ効果をもたらします:</p>
<example>
# CustomLog with format nickname<br />
@@ -389,18 +389,18 @@
CustomLog logs/access_log "%h %l %u %t \"%r\" %&gt;s %b"
</example>
<p>$B;0$DL\$N0z?t$O>JN,2DG=$G!"%5!<%P$N4D6-$K$"$kJQ?t$,$"$k$+$J$$$+$K(B
$B1~$8$F%j%/%(%9%H$r%m%0<}=8$9$k$+$I$&$+$r@)8f$9$k$?$a$K;H$&$3$H$,$G$-$^$9!#(B
$B;XDj$5$l$?(B<a href="../env.html">$B4D6-JQ?t(B</a>$B$,%j%/%(%9%H$KBP$7$F(B
$B@_Dj$5$l$F$$$?>l9g(B ('<code>env=!<var>name</var></code>' $BJ8$,;H$o$l$?$H$-$O(B
$B@_Dj$5$l$F$$$J$$>l9g(B)$B!"%j%/%(%9%H$,%m%0<}=8$5$l$^$9!#(B</p>
<p>三つ目の引数は省略可能で、サーバの環境にある変数があるかないかに
応じてリクエストをログ収集するかどうかを制御するために使うことができます。
指定された<a href="../env.html">環境変数</a>がリクエストに対して
設定されていた場合 ('<code>env=!<var>name</var></code>' 文が使われたときは
設定されていない場合)、リクエストがログ収集されます。</p>
<p>$B4D6-JQ?t$O(B <module>mod_setenvif</module> $B%b%8%e!<%k$H(B
<module>mod_rewrite</module> $B%b%8%e!<%k$NN>J}$b$7$/$O(B
$BJRJ}$rMQ$$$F%j%/%(%9%H$4$H$K@_Dj$9$k$3$H$,$G$-$^$9!#(B
$BNc$($P!"%5!<%P$K$"$k$9$Y$F$N(B GIF $B2hA|$X$N%j%/%(%9%H$rJL$N%m%0%U%!%$%k(B
$B$K$O5-O?$7$?$$$1$l$I!"%a%$%s%m%0$K$O5-O?$7$?$/$J$$!"$H$$$&$H$-$O(B
$B0J2<$N$b$N$r;H$&$3$H$,$G$-$^$9(B:</p>
<p>環境変数は <module>mod_setenvif</module> モジュールと
<module>mod_rewrite</module> モジュールの両方もしくは
片方を用いてリクエストごとに設定することができます。
例えば、サーバにあるすべての GIF 画像へのリクエストを別のログファイル
には記録したいけれど、メインログには記録したくない、というときは
以下のものを使うことができます:</p>
<example>
SetEnvIf Request_URI \.gif$ gif-image<br />
@@ -408,8 +408,8 @@
CustomLog nongif-requests.log common env=!gif-image
</example>
<p>$B8E$$(B RefererIgnore $B%G%#%l%/%F%#%V$HF1$85sF0$r$5$;$?$$>l9g$O!"(B
$B<!$N$h$&$K$7$^$9(B:</p>
<p>古い RefererIgnore ディレクティブと同じ挙動をさせたい場合は、
次のようにします:</p>
<example>
SetEnvIf Referer example\.com localreferer<br />
@@ -420,7 +420,7 @@
<directivesynopsis>
<name>LogFormat</name>
<description>$B%m%0%U%!%$%k$G;HMQ$9$k=q<0$r@_Dj$9$k(B</description>
<description>ログファイルで使用する書式を設定する</description>
<syntax>LogFormat <var>format</var>|<var>nickname</var>
[<var>nickname</var>]</syntax>
<default>LogFormat "%h %l %u %t \"%r\" %>s %b"</default>
@@ -428,35 +428,35 @@
</contextlist>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O%"%/%;%9%m%0%U%!%$%k$N=q<0$r;XDj$7$^$9!#(B</p>
<p>このディレクティブはアクセスログファイルの書式を指定します。</p>
<p><directive>LogFormat</directive> $B%G%#%l%/%F%#%V$OFs$D$N7A<0$N$I$A$i$+$r(B
$B$H$k$3$H$,$G$-$^$9!#:G=i$N7A<0$G$O0l$D$N0z?t$N$_$,;XDj$5$l!"(B
$BB3$/(B <directive>TransferLog</directive>
$B$G;XDj$5$l$?%m%0$G;H$o$l$k%m%0$N=q<0$r@_Dj$7$^$9!#$3$NC1FH$N0z?t$G$O(B
$B>e$N(B<a href="#formats">$B%+%9%?%`%m%0=q<0(B</a>$B$G@bL@$5$l$F$$$k$h$&$K(B
<var>format</var> $B$rL@<(E*$K;XDj$9$k$3$H$,$G$-$^$9!#(B
$B$b$7$/$O!"2<$G@bL@$5$l$F$$$k$h$&$KA0$K(B <directive>LogFormat</directive>
$B%G%#%l%/%F%#%V$GDj5A$5$l$?%m%0$N=q<0$r(B <var>nickname</var>$B$r;H$C$F(B
$B;2>H$9$k$3$H$b$G$-$^$9!#(B</p>
<p><directive>LogFormat</directive> ディレクティブは二つの形式のどちらかを
とることができます。最初の形式では一つの引数のみが指定され、
続く <directive>TransferLog</directive>
で指定されたログで使われるログの書式を設定します。この単独の引数では
上の<a href="#formats">カスタムログ書式</a>で説明されているように
<var>format</var> を明示的に指定することができます。
もしくは、下で説明されているように前に <directive>LogFormat</directive>
ディレクティブで定義されたログの書式を <var>nickname</var>を使って
参照することもできます。</p>
<p><directive>LogFormat</directive> $B%G%#%l%/%F%#%V$NFs$D$a$N7A<0$O(B
<var>format</var> $B$K(B <var>nickname</var> $B$rM?$($^$9!#(B
$B%U%)!<%^%C%HJ8;zNsA4BN$r:F$S=q$/$+$o$j$K!"(B
$B$3$N(B <var>nickname</var> $B$rB3$-$N(B <directive
>LogFormat</directive> $B%G%#%l%/%F%#%V$d(B
<directive>CustomLog</directive> $B%G%#%l%/%F%#%V$G;H$&$3$H$,$G$-$^$9!#(B
Nickname $B$rDj5A$9$k(B <directive>LogFormat</directive> $B%G%#%l%/%F%#%V$O(B
<strong>$BB>$K$O2?$b$7$^$;$s(B</strong> -- $B$9$J$o$A!"%K%C%/%M!<%`$rDj5A(B
$B$9$k(B<em>$B$@$1(B</em>$B$G!"<B:]$K=q<0$rE,MQ$7$F%G%U%)%k%H$K$9$k$H$$$&$3$H$O9T$J$$$^$;$s!#(B
$B$G$9$+$i!"$3$l$OB3$/(B <directive module="mod_log_config">TransferLog</directive>
$B%G%#%l%/%F%#%V$K$O1F6A$rM?$($^$;$s!#(B
$B$5$i$K!"(B<directive>LogFormat</directive> $B%G%#%l%/%F%#%V$O4{B8$N(B nickname $B$r(B
$B;H$C$FJL$N(B nickname $B$rDj5A$9$k$3$H$O$G$-$^$;$s!#(BNickname $B$K$O(B
$B%Q!<%;%s%H5-9f(B (<code>%</code>) $B$,4^$^$l$F$$$F$O$$$1$J$$$3$H$K$bCm0U(B
$B$7$F$/$@$5$$!#(B</p>
<p><directive>LogFormat</directive> ディレクティブの二つめの形式は
<var>format</var> <var>nickname</var> を与えます。
フォーマット文字列全体を再び書くかわりに、
この <var>nickname</var> を続きの <directive
>LogFormat</directive> ディレクティブや
<directive>CustomLog</directive> ディレクティブで使うことができます。
Nickname を定義する <directive>LogFormat</directive> ディレクティブは
<strong>他には何もしません</strong> -- すなわち、ニックネームを定義
する<em>だけ</em>で、実際に書式を適用してデフォルトにするということは行ないません。
ですから、これは続く <directive module="mod_log_config">TransferLog</directive>
ディレクティブには影響を与えません。
さらに、<directive>LogFormat</directive> ディレクティブは既存の nickname
使って別の nickname を定義することはできません。Nickname には
パーセント記号 (<code>%</code>) が含まれていてはいけないことにも注意
してください。</p>
<example><title>$BNc(B</title>
<example><title></title>
LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost_common
</example>
</usage>
@@ -464,23 +464,23 @@
<directivesynopsis>
<name>TransferLog</name>
<description>$B%m%0%U%!%$%k$N0LCV$r;XDj(B</description>
<description>ログファイルの位置を指定</description>
<syntax>TransferLog <var>file</var>|<var>pipe</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$O!"%m%0=q<0$rD>@\;XDj$G$-$J$$$3$H$H!"(B
$B>r7oIU$-%m%.%s%0$,L5$$$3$H$r=|$/$H!"(B<directive module="mod_log_config"
>CustomLog</directive> $B$HA4$/F1$80z?t$H8z2L$,$"$j$^$9!#(B
$BD>@\%m%0=q<0$r;XDj$9$kBe$o$j$K!"%m%0$N=q<0$O$=$3$^$G$G0lHV:G8e$K;XDj$5$l$?(B
$B%K%C%/%M!<%`$rDj5A$7$J$$(B
<directive module="mod_log_config">LogFormat</directive> $B%G%#%l%/%F%#%V(B
$B$GDj5A$5$l$?$b$N$r;H$$$^$9!#(B
$B$b$7B>$N=q<0$,A4$/;XDj$5$l$F$$$J$$$H$-$O(B Common Log Format
$B$,;H$o$l$^$9!#(B</p>
<p>このディレクティブは、ログ書式を直接指定できないことと、
条件付きロギングが無いことを除くと、<directive module="mod_log_config"
>CustomLog</directive> と全く同じ引数と効果があります。
直接ログ書式を指定する代わりに、ログの書式はそこまでで一番最後に指定された
ニックネームを定義しない
<directive module="mod_log_config">LogFormat</directive> ディレクティブ
で定義されたものを使います。
もし他の書式が全く指定されていないときは Common Log Format
が使われます。</p>
<example><title>$BNc(B</title>
<example><title></title>
LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-agent}i\""<br />
TransferLog logs/access_log
</example>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420993:533344 (outdated) -->
@@ -23,50 +23,50 @@
<modulesynopsis metafile="mod_log_forensic.xml.meta">
<name>mod_log_forensic</name>
<description>$B%5!<%P$KAw$i$l$?%j%/%(%9%H$N(B forensic $B%m%.%s%0(B</description>
<description>サーバに送られたリクエストの forensic ロギング</description>
<status>Extension</status>
<sourcefile>mod_log_forensic.c</sourcefile>
<identifier>log_forensic_module</identifier>
<compatibility><module>mod_unique_id</module> $B$O%P!<%8%g%s(B 2.1 $B$+$i$OI,?\$G$O(B
$B$J$/$J$C$?(B</compatibility>
<compatibility><module>mod_unique_id</module> はバージョン 2.1 からは必須では
なくなった</compatibility>
<summary>
<p>$B$3$N%b%8%e!<%k$O%/%i%$%"%s%H%j%/%(%9%H$N(B forensic $B%m%.%s%0$r(B
$B9T$J$$$^$9!#%m%0<}=8$O%j%/%(%9%H$N=hM}$NA0$H8e$K9T$J$o$l$^$9$N$G!"(B
forensic $B%m%0$O3F%j%/%(%9%H$KBP$7$FFs9T%m%0<}=8$7$^$9!#(B
Forensic $B%m%,!<$OHs>o$K87L)$G$9!#$3$l$O0J2<$N$3$H$r0UL#$7$^$9(B:</p>
<p>このモジュールはクライアントリクエストの forensic ロギングを
行ないます。ログ収集はリクエストの処理の前と後に行なわれますので、
forensic ログは各リクエストに対して二行ログ収集します。
Forensic ロガーは非常に厳密です。これは以下のことを意味します:</p>
<ul>
<li>$B%U%)!<%^%C%H$O8GDj$G$9!#<B9T;~$K%m%.%s%0%U%)!<%^%C%H$rJQ99$9$k$3$H$O(B
$B$G$-$^$;$s!#(B</li>
<li>$B%G!<%?$r=q$1$J$$>l9g$O;R%W%m%;%9$O$=$N>l$G=*N;$7!"$5$i$K%3%"$r(B
$B%@%s%W$9$k$+$b$7$l$^$;$s(B (<directive module="mpm_common"
>CoreDumpDirectory</directive> $B%G%#%l%/%F%#%V$N@_Dj$K0M$j$^$9(B)$B!#(B</li>
<li>フォーマットは固定です。実行時にロギングフォーマットを変更することは
できません。</li>
<li>データを書けない場合は子プロセスはその場で終了し、さらにコアを
ダンプするかもしれません (<directive module="mpm_common"
>CoreDumpDirectory</directive> ディレクティブの設定に依ります)。</li>
</ul>
<p>Forensic $B%m%0$N=PNO$r8!::$9$k$?$a$K$O!"(B
$BG[I[J*$N(B support $B%G%#%l%/%H%j$K$"$k(B <code>check_forensic</code>
$B%9%/%j%W%H$,Lr$KN)$D$G$7$g$&!#(B</p>
<p>Forensic ログの出力を検査するためには、
配布物の support ディレクトリにある <code>check_forensic</code>
スクリプトが役に立つでしょう。</p>
</summary>
<seealso><a href="../logs.html">Apache $B%m%0%U%!%$%k(B</a></seealso>
<seealso><a href="../logs.html">Apache ログファイル</a></seealso>
<seealso><module>mod_log_config</module></seealso>
<section id="formats"><title>Forensic $B%m%0%U%)!<%^%C%H(B</title>
<p>$B3F%j%/%(%9%H$O(B2$B2s%m%0<}=8$5$l$^$9!#:G=i$O%j%/%(%9%H$,=hM}$5$l$k(B
<em>$BA0(B</em> ($B$D$^$j!"%X%C%@$r<u$1<h$C$?8e(B) $B$G$9!#(B2$BEYL\$N%m%0$O(B
$B%j%/%(%9%H$,=hM}$5$l$?(B<em>$B8e(B</em>$B!"DL>o$N%m%0<}=8$HF1$8$H$-$K(B
$B9T$J$o$l$^$9!#(B</p>
<section id="formats"><title>Forensic ログフォーマット</title>
<p>各リクエストは2回ログ収集されます。最初はリクエストが処理される
<em>前</em> (つまり、ヘッダを受け取った後) です。2度目のログは
リクエストが処理された<em>後</em>、通常のログ収集と同じときに
行なわれます。</p>
<p>$B3F%j%/%(%9%H$r<1JL$9$k$?$a$K!"%j%/%(%9%H$K$O(B
$B0l0U$J%j%/%(%9%H(B ID $B$,3d$jEv$F$i$l$^$9!#$3$N(B forensic ID $B$O(B
$B%U%)!<%^%C%HJ8;zNs(B <code>%{forensic-id}n</code> $B$r;H$&$3$H$G(B
$BDL>o$N(B transfer $B%m%0$K%m%0<}=8$9$k$3$H$b$G$-$^$9!#(B
<module>mod_unique_id</module> $B$r;H$C$F$$$k>l9g$O!"$=$l$,@8@.$9$k(B
ID $B$,;H$o$l$^$9!#(B</p>
<p>各リクエストを識別するために、リクエストには
一意なリクエスト ID が割り当てられます。この forensic ID
フォーマット文字列 <code>%{forensic-id}n</code> を使うことで
通常の transfer ログにログ収集することもできます。
<module>mod_unique_id</module> を使っている場合は、それが生成する
ID が使われます。</p>
<p>$B:G=i$N9T$O(B forensic ID$B!"%j%/%(%9%H9T$H<u$1<h$C$?$9$Y$F$N%X%C%@$r(B
$B%Q%$%WJ8;z(B (<code>|</code>) $B$GJ,N%$7$F%m%0<}=8$7$^$9!#(B
$BNc$($P0J2<$N$h$&$K$J$j$^$9(B ($B<B:]$O$9$Y$FF1$89T$K$J$j$^$9(B):</p>
<p>最初の行は forensic ID、リクエスト行と受け取ったすべてのヘッダを
パイプ文字 (<code>|</code>) で分離してログ収集します。
例えば以下のようになります (実際はすべて同じ行になります):</p>
<example>
+yQtJf8CoAB4AAFNXBIEAAAAA|GET /manual/de/images/down.gif
@@ -75,71 +75,71 @@
Firefox/0.8|Accept:image/png, <var>etc...</var>
</example>
<p>$B:G=i$N%W%i%9J8;z$,$3$N%m%0$O:G=i$N%m%0$G$"$k$3$H$r<($7$^$9!#(B
$BFsHVL\$N9T$O%^%$%J%9J8;z$H(B ID $B$N$_$G$9(B:</p>
<p>最初のプラス文字がこのログは最初のログであることを示します。
二番目の行はマイナス文字と ID のみです:</p>
<example>
-yQtJf8CoAB4AAFNXBIEAAAAA
</example>
<p><code>check_forensic</code> $B%9%/%j%W%H$O0z?t$H$7$F%m%0%U%!%$%k$NL>A0$r(B
$B<h$j$^$9!#(B<code>+</code>/<code>-</code> $B$N(B ID $B$NAH$rD4$Y!"40N;$7$F$$$J$$(B
$B%j%/%(%9%H$,$"$k>l9g$O7Y9p$rH/$7$^$9!#(B</p>
<p><code>check_forensic</code> スクリプトは引数としてログファイルの名前を
取ります。<code>+</code>/<code>-</code> の ID の組を調べ、完了していない
リクエストがある場合は警告を発します。</p>
</section>
<section id="security"><title>$B%;%-%e%j%F%#$NLdBj(B</title>
<p>$B%m%0%U%!%$%k$,J]B8$5$l$k%G%#%l%/%H%j$,%5!<%P$r5/F0$7$?%f!<%6(B
$B0J30$G=q$-9~$_2DG=$K$J$C$F$$$k$H$-$K%;%-%e%j%F%#$,GK$i$l$k2DG=@-$,(B
$B$"$k$3$H$K$D$$$F$N>\:Y$O(B<a
href="../misc/security_tips.html#serverroot">$B%;%-%e%j%F%#$N$3$D(B</a>$B$r(B
$B;2>H$7$F$/$@$5$$!#(B</p>
<section id="security"><title>セキュリティの問題</title>
<p>ログファイルが保存されるディレクトリがサーバを起動したユーザ
以外で書き込み可能になっているときにセキュリティが破られる可能性が
あることについての詳細は<a
href="../misc/security_tips.html#serverroot">セキュリティのこつ</a>を
参照してください。</p>
</section>
<directivesynopsis>
<name>ForensicLog</name>
<description>Forensic $B%m%0$N%U%!%$%kL>$r@_Dj$9$k(B</description>
<description>Forensic ログのファイル名を設定する</description>
<syntax>ForensicLog <var>filename</var>|<var>pipe</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<usage>
<p><directive>ForensicLog</directive> $B%G%#%l%/%F%#%V$O(B forensic $B2r@O$N$?$a$N(B
$B%5!<%P$X$N%j%/%(%9%H$r%m%0<}=8$K;H$$$^$9!#(B
$B3F%m%0%(%s%H%j$K$O!"IaDL$N(B <directive module="mod_log_config"
>CustomLog</directive> $B%G%#%l%/%F%#%V$r;H$C$F%j%/%(%9%H$H4XO"IU$1$k$3$H$N(B
$B$G$-$k(B
$B0l0U$J(B ID $B$,3d$jEv$F$i$l$^$9!#(B<module>mod_log_forensic</module> $B$O(B
<code>forensic-id</code> $B$H$$$&%H!<%/%s$r:n@.$7!"%U%)!<%^%C%HJ8;zNs(B
<code>%{forensic-id}n</code> $B$r;H$&$3$H$G$=$N%H!<%/%s$r(B transfer $B%m%0$K(B
$BDI2C$9$k$3$H$,$G$-$^$9!#(B</p>
<p><directive>ForensicLog</directive> ディレクティブは forensic 解析のための
サーバへのリクエストをログ収集に使います。
各ログエントリには、普通の <directive module="mod_log_config"
>CustomLog</directive> ディレクティブを使ってリクエストと関連付けることの
できる
一意な ID が割り当てられます。<module>mod_log_forensic</module>
<code>forensic-id</code> というトークンを作成し、フォーマット文字列
<code>%{forensic-id}n</code> を使うことでそのトークンを transfer ログに
追加することができます。</p>
<p>$B0z?t$O%m%0$,=q$-=P$5$l$k0LCV$r;XDj$7!"0J2<$N(B 2$B<oN`$NCM$N$I$A$i$+$r(B
$B<h$k$3$H$,$G$-$^$9(B:</p>
<p>引数はログが書き出される位置を指定し、以下の 2種類の値のどちらかを
取ることができます:</p>
<dl>
<dt><var>filename</var></dt>
<dd><directive module="core">ServerRoot</directive> $B$+$i$N(B
$BAjBP%U%!%$%kL>(B</dd>
<dd><directive module="core">ServerRoot</directive> からの
相対ファイル名</dd>
<dt><var>pipe</var></dt>
<dd>$B%Q%$%WJ8;z(B "<code>|</code>" $B$H!"$=$N8e$K%m%0>pJs$rI8=`F~NO$+$i(B
$B<u$1<h$k%W%m%0%i%`!#%W%m%0%i%`L>$O(B <directive
module="core">ServerRoot</directive> $B$+$i$NAjBP%Q%9$H$7$F$b(B
$B;XDj$G$-$^$9!#(B
<dd>パイプ文字 "<code>|</code>" と、その後にログ情報を標準入力から
受け取るプログラム。プログラム名は <directive
module="core">ServerRoot</directive> からの相対パスとしても
指定できます。
<note type="warning"><title>$B%;%-%e%j%F%#(B:</title>
<p>$B%W%m%0%i%`$r;H$&>l9g!"$=$N%W%m%0%i%`$O(B <program>httpd</program> $B$r5/F0$7$?%f!<%6$G(B
$B<B9T$5$l$^$9!#$D$^$j!"%5!<%P$,(B root $B$G<B9T$5$l$?>l9g$O(B root $B$G(B
$B<B9T$5$l$k$H$$$&$3$H$G$9!#%W%m%0%i%`$,0BA4$G$"$k$+!"$h$j8"8B$N>/$J$$(B
$B%f!<%6$K@Z$jBX$($k$h$&$K$J$C$F$$$k$3$H$r3N$+$a$F$/$@$5$$!#(B</p>
<note type="warning"><title>セキュリティ:</title>
<p>プログラムを使う場合、そのプログラムは <program>httpd</program> を起動したユーザで
実行されます。つまり、サーバが root で実行された場合は root で
実行されるということです。プログラムが安全であるか、より権限の少ない
ユーザに切り替えるようになっていることを確かめてください。</p>
</note>
<note><title>$BCm(B</title>
<p>Unix $B0J30$N%W%i%C%H%U%)!<%`$G%U%!%$%kL>$rF~NO$9$k$H$-$O!"(B
$B%W%i%C%H%U%)!<%`$,%P%C%/%9%i%C%7%e$N;HMQ$r5v2D$7$F$$$k>l9g$G$b!"(B
$B%9%i%C%7%e$N$_$,;H$o$l$k$h$&$K5$$r$D$1$F$/$@$5$$!#(B
$BIaDL$O@_Dj%U%!%$%k$9$Y$F$K$*$$$F!"%9%i%C%7%e$NJ}$r;HMQ$9$k$h$&$K(B
$B$7$F$/$@$5$$!#(B</p>
<note><title></title>
<p>Unix 以外のプラットフォームでファイル名を入力するときは、
プラットフォームがバックスラッシュの使用を許可している場合でも、
スラッシュのみが使われるように気をつけてください。
普通は設定ファイルすべてにおいて、スラッシュの方を使用するように
してください。</p>
</note></dd>
</dl>
</usage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990:630289 (outdated) -->
@@ -23,52 +23,52 @@
<modulesynopsis metafile="mod_logio.xml.meta">
<name>mod_logio</name>
<description>$B%j%/%(%9%HKh$KF~NO%P%$%H?t$H=PNO%P%$%H?t$H$r%m%.%s%0(B</description>
<description>リクエスト毎に入力バイト数と出力バイト数とをロギング</description>
<status>Extension</status>
<sourcefile>mod_logio.c</sourcefile>
<identifier>logio_module</identifier>
<summary>
<p>$B$3$N%b%8%e!<%k$O%j%/%(%9%H$4$H$K<u$1<h$C$?%P%$%H?t$H(B
$BAw?.$7$?%P%$%H?t$N%m%.%s%0$r9T$J$&5!G=$rDs6!$7$^$9!#(B
$B5-O?$5$l$k?t;z$O%j%/%(%9%H$N%X%C%@$H%l%9%]%s%9$NK\BN$r(B
$BH?1G$7$?!"<B:]$K%M%C%H%o!<%/$G<u$1<h$C$?%P%$%HCM$G$9!#(B
$BF~NO$G$O(B SSL/TLS $B$NA0$K!"=PNO$G$O(B SSL/TLS $B$N8e$K?t$($k$N$G!"(B
$B?t;z$O0E9f$K$h$kJQ2=$b@5$7$/H?1G$7$?$b$N$K$J$j$^$9!#(B</p>
<p>このモジュールはリクエストごとに受け取ったバイト数と
送信したバイト数のロギングを行なう機能を提供します。
記録される数字はリクエストのヘッダとレスポンスの本体を
反映した、実際にネットワークで受け取ったバイト値です。
入力では SSL/TLS の前に、出力では SSL/TLS の後に数えるので、
数字は暗号による変化も正しく反映したものになります。</p>
<p>$B$3$N%b%8%e!<%k$N;HMQ$K$O(B <module>mod_log_config</module> $B%b%8%e!<%k$,(B
$BI,MW$G$9!#(B</p>
<p>このモジュールの使用には <module>mod_log_config</module> モジュールが
必要です。</p>
</summary>
<seealso><module>mod_log_config</module></seealso>
<seealso><a href="../logs.html">Apache $B%m%0%U%!%$%k(B</a></seealso>
<seealso><a href="../logs.html">Apache ログファイル</a></seealso>
<section id="formats">
<title>$B%+%9%?%`%m%0=q<0(B</title>
<title>カスタムログ書式</title>
<p>$B$3$N%b%8%e!<%k$O?7$7$$%m%.%s%0MQ%G%#%l%/%F%#%V$r2C$($^$9!#(B
$B%j%/%(%9%H<+?H$NFCD'$O%U%)!<%^%C%HJ8;zNs$K!"0J2<$NMM$KCV49$5$l$k(B
"<code>%</code>" $B%G%#%l%/%F%#%V$r(B
$BF~$l$k$3$H$G%m%0<}=8$5$l$^$9(B:</p>
<p>このモジュールは新しいロギング用ディレクティブを加えます。
リクエスト自身の特徴はフォーマット文字列に、以下の様に置換される
"<code>%</code>" ディレクティブを
入れることでログ収集されます:</p>
<table border="1" style="zebra">
<tr><th>$B%U%)!<%^%C%HJ8;zNs(B</th>
<th>$B@bL@(B</th></tr>
<tr><th>フォーマット文字列</th>
<th>説明</th></tr>
<tr><td><code>%...I</code></td>
<td>$B%j%/%(%9%H$H%X%C%@$r4^$`!"<u$1<h$C$?%P%$%H?t!#(B
0 $B$K$O$J$i$J$$!#(B</td></tr>
<td>リクエストとヘッダを含む、受け取ったバイト数。
0 にはならない。</td></tr>
<tr><td><code>%...O</code></td>
<td>$B%X%C%@$r4^$`!"Aw?.$7$?%P%$%H?t!#(B0 $B$K$O$J$i$J$$!#(B</td></tr>
<td>ヘッダを含む、送信したバイト数。0 にはならない。</td></tr>
</table>
<p>$BDL>o!"$3$N5!G=$O0J2<$NMM$K;HMQ$5$l$^$9(B:</p>
<p>通常、この機能は以下の様に使用されます:</p>
<dl>
<dt>$B7k9g(B I/O $B%m%0=q<0(B:</dt>
<dt>結合 I/O ログ書式:</dt>
<dd><code>"%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\"
\"%{User-agent}i\" %I %O"</code></dd>
</dl>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990:656733 (outdated) -->
@@ -23,77 +23,77 @@
<modulesynopsis metafile="mod_mem_cache.xml.meta">
<name>mod_mem_cache</name>
<description>URI $B$r%-!<$K$7$?%3%s%F%s%D$N%-%c%C%7%e(B</description>
<description>URI をキーにしたコンテンツのキャッシュ</description>
<status>Extension</status>
<sourcefile>mod_mem_cache.c</sourcefile>
<identifier>mem_cache_module</identifier>
<summary>
<p>$B$3$N%b%8%e!<%k$O(B <module>mod_cache</module> $B$r(B<em>$BI,MW$H$7$^$9(B</em>$B!#(B
$B$3$l$O(B <module>mod_cache</module> $B$N%5%]!<%H%b%8%e!<%k$H$7$F(B
$BF0:n$7!"%a%b%j$r;HMQ$7$?%9%H%l!<%84IM}5!9=$rDs6!$7$^$9!#(B
<module>mod_mem_cache</module> $B$OFs$D$N%b!<%I$N$I$A$i$+$GF0:n$9$k$h$&$K(B
$B@_Dj$G$-$^$9(B: $B%U%!%$%k5-=R;R$N%-%c%C%7%e$+%R!<%WCf$N%*%V%8%'%/%H$N(B
$B%-%c%C%7%e$G$9!#%m!<%+%k$G@8@.$5$l$?%3%s%F%s%D$KBP$7$F%-%c%C%7%e$9$k$H$-$d!"(B
<module>mod_proxy</module> $B$r;H$C$F(B <directive
module="mod_proxy">ProxyPass</directive> ($B$D$^$j(B<dfn>$B%j%P!<%9%W%m%-%7(B</dfn
>$B8~$1(B) $B$K@_Dj$7$?$H$-$N%P%C%/%(%s%I%5!<%P$N%3%s%F%s%D$KBP$7$F(B
$B%-%c%C%7%e$r$9$k$H$-$K!"$?$$$X$s8z2LE*$G$9!#(B</p>
<p>このモジュールは <module>mod_cache</module> を<em>必要とします</em>。
これは <module>mod_cache</module> のサポートモジュールとして
動作し、メモリを使用したストレージ管理機構を提供します。
<module>mod_mem_cache</module> は二つのモードのどちらかで動作するように
設定できます: ファイル記述子のキャッシュかヒープ中のオブジェクトの
キャッシュです。ローカルで生成されたコンテンツに対してキャッシュするときや、
<module>mod_proxy</module> を使って <directive
module="mod_proxy">ProxyPass</directive> (つまり<dfn>リバースプロキシ</dfn
>向け) に設定したときのバックエンドサーバのコンテンツに対して
キャッシュをするときに、たいへん効果的です。</p>
<p>$B%3%s%F%s%D$N%-%c%C%7%e$X$NJ]B8$H<hF@$O(B URI $B$K4p$E$$$?%-!<$,;H$o$l$^$9!#(B
$B%"%/%;%9J]8n$N$+$1$i$l$F$$$k%3%s%F%s%D$O%-%c%C%7%e$5$l$^$;$s!#(B</p>
<p>コンテンツのキャッシュへの保存と取得は URI に基づいたキーが使われます。
アクセス保護のかけられているコンテンツはキャッシュされません。</p>
</summary>
<seealso><module>mod_cache</module></seealso>
<seealso><module>mod_disk_cache</module></seealso>
<directivesynopsis>
<name>MCacheSize</name>
<description>$B%-%c%C%7%e$K;H$o$l$k%a%b%j$N:GBgNL$r%P%$%HC10L$G;XDj(B</description>
<description>キャッシュに使われるメモリの最大量をバイト単位で指定</description>
<syntax>MCacheSize <var>KBytes</var></syntax>
<default>MCacheSize 100</default>
<contextlist><context>server config</context></contextlist>
<usage>
<p><directive>MCacheSize</directive> $B%G%#%l%/%F%#%V$O%-%c%C%7%e$K(B
$B;H$o$l$k%a%b%j$NBg$-$5$r%-%m%P%$%H(B (1024 $B%P%$%HC10L(B) $B$G@_Dj$7$^$9!#(B
$B?7$7$$%*%V%8%'%/%H$r%-%c%C%7%e$KA^F~$9$k$3$H$K$J$j!"%*%V%8%'%/%H$N(B
$B%5%$%:$,;D$j$N%a%b%j$h$jBg$-$$>l9g$O!"$=$N?7$7$$%*%V%8%'%/%H$NA^F~$,(B
$B2DG=$K$J$k$^$G!"8E$$%*%V%8%'%/%H$,:o=|$5$l$F$$$-$^$9!#(B
$B%*%V%8%'%/%H$O(B <directive
<p><directive>MCacheSize</directive> ディレクティブはキャッシュに
使われるメモリの大きさをキロバイト (1024 バイト単位) で設定します。
新しいオブジェクトをキャッシュに挿入することになり、オブジェクトの
サイズが残りのメモリより大きい場合は、その新しいオブジェクトの挿入が
可能になるまで、古いオブジェクトが削除されていきます。
オブジェクトは <directive
module="mod_mem_cache">MCacheRemovalAlgorithm</directive>
$B$G;XDj$7$?%"%k%4%j%:%`$K=>$C$F:o=|$5$l$^$9!#(B</p>
で指定したアルゴリズムに従って削除されます。</p>
<example><title>$BNc(B</title>
<example><title></title>
MCacheSize 700000
</example>
<note><title>$BCm(B</title>
<p><directive>MCacheSize</directive> $B$NCM$O(B <directive module="mod_mem_cache"
>MCacheMaxObjectSize</directive> $B%G%#%l%/%F%#%V$G;XDj$7$?CM$h$j(B
$BBg$-$/$J$1$l$P$J$j$^$;$s!#(B</p>
<note><title></title>
<p><directive>MCacheSize</directive> の値は <directive module="mod_mem_cache"
>MCacheMaxObjectSize</directive> ディレクティブで指定した値より
大きくなければなりません。</p>
</note>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>MCacheMaxObjectCount</name>
<description>$B%-%c%C%7%e$KJ]4I$5$l$k%*%V%8%'%/%H$N:GBg?t(B</description>
<description>キャッシュに保管されるオブジェクトの最大数</description>
<syntax>MCacheMaxObjectCount <var>value</var></syntax>
<default>MCacheMaxObjectCount 1009</default>
<contextlist><context>server config</context></contextlist>
<usage>
<p><directive>MCacheMaxObjectCount</directive> $B%G%#%l%/%F%#%V$O(B
$B%-%c%C%7%e$5$l$k%*%V%8%'%/%H$N:GBg?t$r;XDj$7$^$9!#(B
$B$3$NCM$O%O%C%7%e%F!<%V%k$r:n@.$9$k$H$-$K;H$o$l$^$9!#(B
$B?7$7$$%*%V%8%'%/%H$rA^F~$9$k$H$-$K!"%*%V%8%'%/%H$N:GBg?t$K(B
$BC#$7$F$7$^$C$F$$$k$H$-!"?7$7$$%*%V%8%'%/%H$r%-%c%C%7%e$G$-$k$h$&$K!"(B
$B%*%V%8%'%/%H$r0l$D>C5n$7$^$9!#%*%V%8%'%/%H$O(B
<p><directive>MCacheMaxObjectCount</directive> ディレクティブは
キャッシュされるオブジェクトの最大数を指定します。
この値はハッシュテーブルを作成するときに使われます。
新しいオブジェクトを挿入するときに、オブジェクトの最大数に
達してしまっているとき、新しいオブジェクトをキャッシュできるように、
オブジェクトを一つ消去します。オブジェクトは
<directive
module="mod_mem_cache">MCacheRemovalAlgorithm</directive>
$B$G;XDj$5$l$?%"%k%4%j%:%`$K=>$C$F:o=|$5$l$^$9!#(B</p>
で指定されたアルゴリズムに従って削除されます。</p>
<example><title>$BNc(B</title>
<example><title></title>
MCacheMaxObjectCount 13001
</example>
</usage>
@@ -101,16 +101,16 @@
<directivesynopsis>
<name>MCacheMinObjectSize</name>
<description>$B%-%c%C%7%e$KJ]4I$5$l$k%I%-%e%a%s%H$N:G>.%5%$%:(B ($B%P%$%H(B)</description>
<description>キャッシュに保管されるドキュメントの最小サイズ (バイト)</description>
<syntax>MCacheMinObjectSize <var>bytes</var></syntax>
<default>MCacheMinObjectSize 0</default>
<contextlist><context>server config</context></contextlist>
<usage>
<p><directive>MCacheMinObjectSize</directive> $B%G%#%l%/%F%#%V$O!"%I%-%e%a%s%H$r(B
$B%-%c%C%7%e$9$k$+$I$&$+$rH=Dj$9$k!":G>.$N%5%$%:$r%P%$%H?t$G@_Dj$7$^$9!#(B</p>
<p><directive>MCacheMinObjectSize</directive> ディレクティブは、ドキュメントを
キャッシュするかどうかを判定する、最小のサイズをバイト数で設定します。</p>
<example><title>$BNc(B</title>
<example><title></title>
MCacheMinObjectSize 10000
</example>
</usage>
@@ -118,51 +118,51 @@
<directivesynopsis>
<name>MCacheMaxObjectSize</name>
<description>$B%-%c%C%7%e$KJ]4I$G$-$k%I%-%e%a%s%H$N:GBg%5%$%:(B ($B%P%$%H(B)</description>
<description>キャッシュに保管できるドキュメントの最大サイズ (バイト)</description>
<syntax>MCacheMaxObjectSize <var>bytes</var></syntax>
<default>MCacheMaxObjectSize 10000</default>
<contextlist><context>server config</context></contextlist>
<usage>
<p><directive>MCacheMaxObjectSize</directive> $B$O%I%-%e%a%s%H$r(B
$B%-%c%C%7%e$9$k$+$I$&$+$rH=Dj$9$k!":GBg$N%5%$%:$r%P%$%H?t$G@_Dj$7$^$9!#(B</p>
<p><directive>MCacheMaxObjectSize</directive> はドキュメントを
キャッシュするかどうかを判定する、最大のサイズをバイト数で設定します。</p>
<example><title>$BNc(B</title>
<example><title></title>
MCacheMaxObjectSize 6400000
</example>
<note><title>$BCm(B</title>
<p><directive>MCacheMaxObjectSize</directive> $B$NCM$O(B <directive
<note><title></title>
<p><directive>MCacheMaxObjectSize</directive> の値は <directive
module="mod_mem_cache">MCacheMinObjectSize</directive>
$B$G;XDj$7$?CM$h$j$bBg$-$/$J$1$l$P$J$j$^$;$s!#(B</p>
で指定した値よりも大きくなければなりません。</p>
</note>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>MCacheRemovalAlgorithm</name>
<description>$B%-%c%C%7%e$+$i:o=|$9$k%I%-%e%a%s%H$rA*$V$?$a$N%"%k%4%j%:%`(B</description>
<description>キャッシュから削除するドキュメントを選ぶためのアルゴリズム</description>
<syntax>MCacheRemovalAlgorithm LRU|GDSF</syntax>
<default>MCacheRemovalAlgorithm GDSF</default>
<contextlist><context>server config</context></contextlist>
<usage>
<p><directive>MCacheRemovalAlgorithm</directive> $B%G%#%l%/%F%#%V$O!"(B
$B%-%c%C%7%e$+$i:o=|$9$k%I%-%e%a%s%H$rA*Br$9$k$?$a$N%"%k%4%j%:%`$r(B
$B;XDj$7$^$9!#A*Br;h$OFs$D$"$j$^$9(B:</p>
<p><directive>MCacheRemovalAlgorithm</directive> ディレクティブは、
キャッシュから削除するドキュメントを選択するためのアルゴリズムを
指定します。選択肢は二つあります:</p>
<dl>
<dt><code>LRU</code> (Least Recently Used)</dt>
<dd><code>LRU</code> $B0lHVD9$/%"%/%;%9$5$l$F$$$J$$%I%-%e%a%s%H$r:o=|$7$^$9!#(B
<dd><code>LRU</code> 一番長くアクセスされていないドキュメントを削除します。
</dd>
<dt><code>GDSF</code> (GreadyDual-Size)</dt>
<dd><code>GDSF</code> $B$O%-%c%C%7%e%_%9$N%3%9%H$H%I%-%e%a%s%H$N%5%$%:$r$b$H$K!"(B
$B%I%-%e%a%s%H$N%-%c%C%7%e$KBP$7$FM%@hEY$r$D$1$^$9!#(B
$BM%@hEY$N0lHVDc$$%I%-%e%a%s%H$,:G=i$K:o=|$5$l$^$9!#(B</dd>
<dd><code>GDSF</code> はキャッシュミスのコストとドキュメントのサイズをもとに、
ドキュメントのキャッシュに対して優先度をつけます。
優先度の一番低いドキュメントが最初に削除されます。</dd>
</dl>
<example><title>$BNc(B</title>
<example><title></title>
MCacheRemovalAlgorithm GDSF<br />
MCacheRemovalAlgorithm LRU
</example>
@@ -171,36 +171,36 @@
<directivesynopsis>
<name>MCacheMaxStreamingBuffer</name>
<description>$B%9%H%j!<%`$5$l$F$$$k1~Ez$r%-%c%C%7%eITG=$H7hDj$9$k$^$G$K(B
$B%a%b%j$K%P%C%U%!$9$k:GBgNL(B</description>
<description>ストリームされている応答をキャッシュ不能と決定するまでに
メモリにバッファする最大量</description>
<syntax>MCacheMaxStreamingBuffer <var>size_in_bytes</var></syntax>
<default>MCacheMaxStreamingBuffer of 100000 $B$+(B MCacheMaxObjectSize $B$N>/$$J}(B</default>
<default>MCacheMaxStreamingBuffer of 100000 MCacheMaxObjectSize の少い方</default>
<contextlist><context>server config</context>
</contextlist>
<usage>
<p><directive>MCacheMaxStreamingBuffer</directive> $B%G%#%l%/%F%#%V$O!"(B
$B%5%$%:$,Bg$-$9$.$F%-%c%C%7%e$G$-$J$$$HH=CG$9$k$^$G$N!"(B
$B%9%H%j!<%`1~Ez$N%P%C%U%!$N$?$a$N:GBg%P%$%H?t$r;XDj$7$^$9!#(B
$B%9%H%j!<%`1~Ez$H$O!"%3%s%F%s%D$NA4BN$,$9$0$K$OF@$i$l$:!"(B
<code>Content-Length</code> $B$,$o$+$i$J$$1~Ez$r;X$7$^$9!#(B
$B%9%H%j!<%`1~Ez$r9T$J$&$h$&$J$b$N$K$O%W%m%-%7$5$l$?1~Ez$d!"(B
CGI $B%9%/%j%W%H$N=PNO$J$I$,$"$j$^$9!#%G%U%)%k%H$G$O%9%H%j!<%`$N1~Ez$O(B
<code>Content-Length</code> $B$,$J$$8B$j%-%c%C%7%e(B<em>$B$5$l$^$;$s(B</em>$B!#(B
$B$3$N$h$&$JF0:n$K$J$C$F$$$kM}M3$O!"7k6I%-%c%C%7%e$K<}$^$j$-$i$J$$$H(B
$BH=CG$9$k$3$H$K$J$C$F$7$^$&$h$&$J!"%5%$%:$NBg$-$J1~Ez$N%P%C%U%!%j%s%0$K!"(B
$BBgNL$N%a%b%j$,>CHq$5$l$k$N$rHr$1$k$?$a$G$9!#(B
<directive>MCacheMaxStreamingBuffer</directive> $B%G%#%l%/%F%#%V$r;H$&$H!"(B
<code>Content-Length</code> $B$r4^$^$J$$1~Ez$KBP$7$F;XDj$5$l$?:GBgNL$^$G(B
$B%P%C%U%!$9$k$h$&$K$G$-$^$9!#%P%C%U%!$r;H$$@Z$k$H!"%P%C%U%!Cf$N(B
$B%3%s%F%s%D$O<N$F$i$l!"%-%c%C%7%eF0:n$rCf;_$7$^$9!#(B</p>
<p><directive>MCacheMaxStreamingBuffer</directive> ディレクティブは、
サイズが大きすぎてキャッシュできないと判断するまでの、
ストリーム応答のバッファのための最大バイト数を指定します。
ストリーム応答とは、コンテンツの全体がすぐには得られず、
<code>Content-Length</code> がわからない応答を指します。
ストリーム応答を行なうようなものにはプロキシされた応答や、
CGI スクリプトの出力などがあります。デフォルトではストリームの応答は
<code>Content-Length</code> がない限りキャッシュ<em>されません</em>。
このような動作になっている理由は、結局キャッシュに収まりきらないと
判断することになってしまうような、サイズの大きな応答のバッファリングに、
大量のメモリが消費されるのを避けるためです。
<directive>MCacheMaxStreamingBuffer</directive> ディレクティブを使うと、
<code>Content-Length</code> を含まない応答に対して指定された最大量まで
バッファするようにできます。バッファを使い切ると、バッファ中の
コンテンツは捨てられ、キャッシュ動作を中止します。</p>
<note><title>$BCm(B:</title>
<p><directive>MCacheMaxStreamingBuffer</directive> $B$KHsNm$NCM$r(B
$B;H$C$F$b!"%/%i%$%"%s%H$X$N1~Ez$NE>Aw$KFC$KCY1d$OH/@8$7$^$;$s!#(B
<module>mod_mem_cache</module> $B$O%9%H%j!<%`%3%s%F%s%D$NCGJR$r(B
$B%P%C%U%!$K%3%T!<$7$?8e!"B(:B$K!"$=$NItJ,$r%/%i%$%"%s%H$X$NG[Aw$N(B
$B<!CJ$N=PNO%U%#%k%?$KAw$j$^$9!#(B</p>
<note><title>:</title>
<p><directive>MCacheMaxStreamingBuffer</directive> に非零の値を
使っても、クライアントへの応答の転送に特に遅延は発生しません。
<module>mod_mem_cache</module> はストリームコンテンツの断片を
バッファにコピーした後、即座に、その部分をクライアントへの配送の
次段の出力フィルタに送ります。</p>
</note>
<example>

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -23,109 +23,109 @@
<modulesynopsis metafile="mod_negotiation.xml.meta">
<name>mod_negotiation</name>
<description><a href="../content-negotiation.html">$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</a>
$B5!G=$rDs6!$9$k(B</description>
<description><a href="../content-negotiation.html">コンテントネゴシエーション</a>
機能を提供する</description>
<status>Base</status>
<sourcefile>mod_negotiation.c</sourcefile>
<identifier>negotiation_module</identifier>
<summary>
<p>$B%3%s%F%s%H%M%4%7%(!<%7%g%s!"$h$j@53N$K$O%3%s%F%s%D$NA*Br5!G=$O!"(B
$BJ#?tMQ0U$5$l$F$$$k%I%-%e%a%s%H$+$i!"%/%i%$%"%s%H$NG=NO$K0lHV9g$C$?(B
$B%I%-%e%a%s%H$rA*Br$9$k5!G=$G$9!#$3$N<BAu$OFs$D$"$j$^$9!#(B</p>
<p>コンテントネゴシエーション、より正確にはコンテンツの選択機能は、
複数用意されているドキュメントから、クライアントの能力に一番合った
ドキュメントを選択する機能です。この実装は二つあります。</p>
<ul>
<li>$B%?%$%W%^%C%W(B (<code>type-map</code>
$B%O%s%I%i$G07$o$l$k%U%!%$%k(B)$B!#$3$l$O(B variants
$B$r4^$s$G$$$k%U%!%$%k$rL@<(E*$K;XDj$7$^$9!#(B</li>
<li>タイプマップ (<code>type-map</code>
ハンドラで扱われるファイル)。これは variants
を含んでいるファイルを明示的に指定します。</li>
<li>MultiViews $B$NC5:w(B (<code>MultiViews</code> <directive
module="core">Option</directive> $B$GM-8z$K$J$j$^$9(B)$B!#(B
$B%5!<%P$,0EL[$NFb$K%U%!%$%kL>$N%Q%?!<%s%^%C%A$r9T$J$$!"(B
$B$=$N7k2L$+$iA*Br$7$^$9!#(B</li>
<li>MultiViews の探索 (<code>MultiViews</code> <directive
module="core">Option</directive> で有効になります)。
サーバが暗黙の内にファイル名のパターンマッチを行ない、
その結果から選択します。</li>
</ul>
</summary>
<seealso><directive module="core">Options</directive></seealso>
<seealso><module>mod_mime</module></seealso>
<seealso><a href="../content-negotiation.html">$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</a></seealso>
<seealso><a href="../env.html">$B4D6-JQ?t(B</a></seealso>
<seealso><a href="../content-negotiation.html">コンテントネゴシエーション</a></seealso>
<seealso><a href="../env.html">環境変数</a></seealso>
<section id="typemaps"><title>$B%?%$%W%^%C%W(B</title>
<p>$B%?%$%W%^%C%W$O(B RFC 822 $B$N%a!<%k%X%C%@$KN`;w$7$?=q<0$G$9!#(B
$B%I%-%e%a%s%H$N5-=R$,6u9T$GJ,N%$5$l$F=q$+$l$F$$$F!"%O%C%7%eJ8;z(B
('#') $B$G;O$^$k9T$O%3%a%s%H$H$7$F07$o$l$^$9!#(B
$B%I%-%e%a%s%H$N@bL@$OJ#?t$N%X%C%@%l%3!<%I$+$i9=@.$5$l$^$9!#(B
$B%l%3!<%I$O!"B3$-$N9T$,6uGr$G;O$^$C$F$$$k$HJ#?t$N9T$K$^$?$,$j$^$9!#(B
$B:G=i$N6uGr$,>C5n$5$l$F!"A0$N9T$H$D$J$2$F(B 1 $B9T$H$7$F07$o$l$^$9!#(B
$B%X%C%@%l%3!<%I$O%-!<%o!<%IL>$N8e$KCM$,B3$/$H$$$&7A<0$G!"(B
$B%-!<%o!<%IL>$O>o$K%3%m%s$G=*$o$j$^$9!#6uGr$O%X%C%@L>$HCM$N4V!"(B
$BCM$N%H!<%/%s$N4V$KF~$l$k$3$H$,$G$-$^$9!#(B
$B;HMQ2DG=$J%X%C%@$O0J2<$N$H$*$j$G$9(B:</p>
<section id="typemaps"><title>タイプマップ</title>
<p>タイプマップは RFC 822 のメールヘッダに類似した書式です。
ドキュメントの記述が空行で分離されて書かれていて、ハッシュ文字
('#') で始まる行はコメントとして扱われます。
ドキュメントの説明は複数のヘッダレコードから構成されます。
レコードは、続きの行が空白で始まっていると複数の行にまたがります。
最初の空白が消去されて、前の行とつなげて 1 行として扱われます。
ヘッダレコードはキーワード名の後に値が続くという形式で、
キーワード名は常にコロンで終わります。空白はヘッダ名と値の間、
値のトークンの間に入れることができます。
使用可能なヘッダは以下のとおりです:</p>
<dl>
<dt><code>Content-Encoding:</code></dt>
<dd>$B%U%!%$%k$N%(%s%3!<%G%#%s%0!#(BApache $B$O(B <directive
module="mod_mime">AddEncoding</directive> $B%G%#%l%/%F%#%V(B
$B$GDj5A$5$l$?%(%s%3!<%G%#%s%0$@$1$rG'<1$7$^$9!#DL>o(B compress
$B$5$l$?%U%!%$%k$N$?$a$N(B <code>x-compress</code> $B$H(B gzip
$B$5$l$?%U%!%$%k$N$?$a$N(B <code>x-gzip</code> $B$r4^$_$^$9!#(B
$B%(%s%3!<%G%#%s%0$NHf3S$r$9$k$H$-$O!"@\F,<-(B <code>x-</code>
$B$OL5;k$5$l$^$9!#(B</dd>
<dd>ファイルのエンコーディング。Apache は <directive
module="mod_mime">AddEncoding</directive> ディレクティブ
で定義されたエンコーディングだけを認識します。通常 compress
されたファイルのための <code>x-compress</code> gzip
されたファイルのための <code>x-gzip</code> を含みます。
エンコーディングの比較をするときは、接頭辞 <code>x-</code>
は無視されます。</dd>
<dt><code>Content-Language:</code></dt>
<dd>$B%$%s%?!<%M%C%HI8=`$N8@8l%?%0(B
<dd>インターネット標準の言語タグ
(<a href="http://www.ietf.org/rfc/rfc1766.txt">RFC 1766</a>)
$B$GDj5A$5$l$F$$$k8@8l$N<oN`!#Nc$($P!"(B<code>en</code>
$B$O1Q8l$rI=$7$^$9!#(B
$BJ#?t$N8@8l$,3JG<$5$l$k>l9g$O%3%s%^$G6h@Z$i$l$^$9!#(B</dd>
で定義されている言語の種類。例えば、<code>en</code>
は英語を表します。
複数の言語が格納される場合はコンマで区切られます。</dd>
<dt><code>Content-Length:</code></dt>
<dd>$B%U%!%$%k$ND9$5(B ($B%P%$%H?t(B)$B!#(B
$B$3$N%X%C%@$,$J$$>l9g!"%U%!%$%k$N<B:]$ND9$5$,;HMQ$5$l$^$9!#(B</dd>
<dd>ファイルの長さ (バイト数)。
このヘッダがない場合、ファイルの実際の長さが使用されます。</dd>
<dt><code>Content-Type:</code></dt>
<dd>$B%I%-%e%a%s%H$N(B MIME
$B%a%G%#%"%?%$%W!"%*%W%7%g%J%k$J%Q%i%a!<%?IU$-!#%Q%i%a!<%?$N9=J8$O(B
<dd>ドキュメントの MIME
メディアタイプ、オプショナルなパラメータ付き。パラメータの構文は
<code>name=value</code>
$B$G!"%a%G%#%"%?%$%W$dB>$N%Q%i%a!<%?$H$O%;%_%3%m%s$GJ,N%$5$l$^$9!#(B
$B6&DL$N%Q%i%a!<%?$O0J2<$N$H$*$j(B:
で、メディアタイプや他のパラメータとはセミコロンで分離されます。
共通のパラメータは以下のとおり:
<dl>
<dt><code>level</code></dt>
<dd>$B%a%G%#%"%?%$%W$N%P!<%8%g%s$r<($9@0?t!#(B
<code>text/html</code> $B$G$O(B 2 $B$,%G%U%)%k%H$G!"$=$NB>$N>l9g$O(B
0 $B$,%G%U%)%k%H$G$9!#(B</dd>
<dd>メディアタイプのバージョンを示す整数。
<code>text/html</code> では 2 がデフォルトで、その他の場合は
0 がデフォルトです。</dd>
<dt><code>qs</code></dt>
<dd>$B%/%i%$%"%s%H$NG=NO$K4X78$J$/!"(Bvariant
$B$rB>$HHf3S$7$?$H$-$NAjBPE*$J!VIJ<A!W$G!"(B0.0 $B$+$i(B 1.0
$B$NHO0O$NIbF0E@>.?t!#(B
$BNc$($P!"<L??$rI=8=$7$h$&$H$7$F$$$k$H$-$OIaDL$O(B JPEG
$B%U%!%$%k$NJ}$,(B ASCII $B%U%!%$%k$h$j$b9b$$IJ<A$K$J$j$^$9!#(B
$B$7$+$7!"%j%=!<%9$,(B ASCII $B%"!<%H$GI=8=$5$l$F$$$k$H$-$O!"(BASCII
$B%U%!%$%k$NJ}$,(B JPEG
$B%U%!%$%k$h$j$b9b$$IJ<A$K$J$j$^$9!#$3$N$h$&$K!"(B<code>qs</code>
$B$O%j%=!<%9Kh$KFCM-$NCM$r<h$j$^$9!#(B
<dd>クライアントの能力に関係なく、variant
を他と比較したときの相対的な「品質」で、0.0 から 1.0
の範囲の浮動点小数。
例えば、写真を表現しようとしているときは普通は JPEG
ファイルの方が ASCII ファイルよりも高い品質になります。
しかし、リソースが ASCII アートで表現されているときは、ASCII
ファイルの方が JPEG
ファイルよりも高い品質になります。このように、<code>qs</code>
はリソース毎に特有の値を取ります。
</dd>
</dl>
<example><title>$BNc(B</title>
<example><title></title>
Content-Type: image/jpeg; qs=0.8
</example>
</dd>
<dt><code>URI:</code></dt>
<dd>($B;XDj$N%a%G%#%"%?%$%W!"%3%s%F%s%H%(%s%3!<%G%#%s%0$N(B) variant $B$N(B
$B%U%!%$%k$N(B uri. $B$3$l$O!"%^%C%W%U%!%$%k$+$i$NAjBP(B URL $B$H$7$F(B
$B2r<a$5$l$^$9!#F1$8%5!<%P$KB8:_$7$J$1$l$P$J$i$:!"%/%i%$%"%s%H$,(B
$BD>@\%j%/%(%9%H$7$?$H$-$K%"%/%;%9$r5v2D$5$l$k$b$N$G$J$1$l$P$J$j$^$;$s!#(B</dd>
<dd>(指定のメディアタイプ、コンテントエンコーディングの) variant
ファイルの uri. これは、マップファイルからの相対 URL として
解釈されます。同じサーバに存在しなければならず、クライアントが
直接リクエストしたときにアクセスを許可されるものでなければなりません。</dd>
<dt><code>Body:</code></dt>
<dd>Apache 2.0 $B$G?7@_$5$l$?$3$N(B Body $B%X%C%@$r;H$C$F!"(B
$B%j%=!<%9$N<B:]$NFbMF$r%?%$%W%^%C%W%U%!%$%k$K=q$/$3$H$,$G$-$^$9!#(B
$B$3$N%X%C%@$OK\J8$NFbMF$N6h@Z$j$H$J$kJ8;zNs$G;O$^$kI,MW$,$"$j$^$9!#(B
$B%?%$%W%^%C%W%U%!%$%k$NB3$/9T$O!"6h@Z$jJ8;zNs$,8+$D$+$k$^$G!"(B
$B%j%=!<%9$NK\J8$K$J$j$^$9!#(B
<dd>Apache 2.0 で新設されたこの Body ヘッダを使って、
リソースの実際の内容をタイプマップファイルに書くことができます。
このヘッダは本文の内容の区切りとなる文字列で始まる必要があります。
タイプマップファイルの続く行は、区切り文字列が見つかるまで、
リソースの本文になります。
<example><title>Example:</title>
Body:----xyz----<br />
@@ -141,110 +141,110 @@
</section>
<section id="multiviews"><title>MultiViews</title>
<p>MultiViews $BC5:w$O!"(B<code>Multiviews</code> <directive
module="core">Options</directive> $B%G%#%l%/%F%#%V$K$h$jM-8z$K$J$j$^$9!#(B
$B%5!<%P$,(B <code>/some/dir/foo</code>
$B$X$N%j%/%(%9%H$r<u$1<h$j!"(B<code>/some/dir/foo</code> $B$,B8:_(B
<em>$B$7$J$$(B</em>$B>l9g!"%5!<%P$O%G%#%l%/%H%j$rFI$s$G!"(B
<code>foo.*</code> $B$K$"$F$O$^$kA4$F$N%U%!%$%k$rC5$7!"(B
$B;v<B>e$=$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!"(B
$B$=$N%U%!%$%kL>$rD>@\;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!"(B
$B$=$N%I%-%e%a%s%H$rJV$7$^$9!#(B</p>
<p>MultiViews 探索は、<code>Multiviews</code> <directive
module="core">Options</directive> ディレクティブにより有効になります。
サーバが <code>/some/dir/foo</code>
へのリクエストを受け取り、<code>/some/dir/foo</code> が存在
<em>しない</em>場合、サーバはディレクトリを読んで、
<code>foo.*</code> にあてはまる全てのファイルを探し、
事実上それらのファイルをマップするタイプマップを作ります。
そのとき、メディアタイプとコンテントエンコーディングは、
そのファイル名を直接指定したときと同じものが割り当てられます。
それからクライアントの要求に一番合うものを選び、
そのドキュメントを返します。</p>
<p>$B%U%!%$%k$rA*Br$9$k:]$K!"4XO"$9$k%3%s%F%s%H%M%4%7%(!<%7%g%s$N(B
$B%a%?>pJs$r;}$?$J$$%U%!%$%k$K$D$$$F!"H=Dj$r9T$&$+$I$&$+$r(B
<p>ファイルを選択する際に、関連するコンテントネゴシエーションの
メタ情報を持たないファイルについて、判定を行うかどうかを
<directive module="mod_mime">MultiViewsMatch</directive>
$B%G%#%l%/%F%#%V$G@_Dj$7$^$9!#(B</p>
ディレクティブで設定します。</p>
</section>
<directivesynopsis>
<name>CacheNegotiatedDocs</name>
<description>$B%3%s%F%s%H%M%4%7%(!<%7%g%s$5$l$?%I%-%e%a%s%H$r%W%m%-%7%5!<%P$,(B
$B%-%c%C%7%e$G$-$k$h$&$K$9$k(B</description>
<description>コンテントネゴシエーションされたドキュメントをプロキシサーバが
キャッシュできるようにする</description>
<syntax>CacheNegotiatedDocs On|Off</syntax>
<default>CacheNegotiatedDocs Off</default>
<contextlist><context>server config</context>
<context>virtual host</context>
</contextlist>
<compatibility>$B%P!<%8%g%s(B 2.0$B$G9=J8$,JQ$o$j$^$7$?(B</compatibility>
<compatibility>バージョン 2.0で構文が変わりました</compatibility>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$,@_Dj$5$l$F$$$k$H!"%3%s%F%s%H%M%4%7%(!<%7%g%s(B
$B$r$7$?7k2L$N%I%-%e%a%s%H$N%-%c%C%7%e$r5v2D$7$^$9!#(B
$B$3$l$O!"%W%m%-%7$N8e$m$K$$$k%/%i%$%"%s%H$,G=NO$K0lHV9g$C$?(B
$B%I%-%e%a%s%H$G$O$J$/!"(B
$B%-%c%C%7%e$r$h$j8z2LE*$K$9$k$b$N$rF@$k2DG=@-$,$"$k$H$$$&$3$H$G$9!#(B</p>
<p>このディレクティブが設定されていると、コンテントネゴシエーション
をした結果のドキュメントのキャッシュを許可します。
これは、プロキシの後ろにいるクライアントが能力に一番合った
ドキュメントではなく、
キャッシュをより効果的にするものを得る可能性があるということです。</p>
<p>$B$3$N%G%#%l%/%F%#%V$O(B HTTP/1.0 $B%V%i%&%6$+$i$N%j%/%(%9%H(B
$B$N$_$KE,MQ$5$l$^$9!#(BHTTP/1.1 $B$O!"(B
$B8r>D$5$l$?%I%-%e%a%s%H$N%-%c%C%7%e$KBP$7$F$:$C$H$h$$@)8f$,2DG=$J$N$G!"(B
$B$3$N%G%#%l%/%F%#%V$O(B HTTP/1.1 $B$N%j%/%(%9%H$K$O1F6A$7$^$;$s!#(B</p>
<p>2.0 $B$h$jA0$N%P!<%8%g%s$G$O!"(B
<directive>CacheNegotiatedDocs</directive> $B$O0z?t$r<h$i$:!"(B
$B%G%#%l%/%F%#%V$,B8:_$9$k$3$H$G(B on $B$NF0:n$r$7$F$$$^$7$?!#(B</p>
<p>このディレクティブは HTTP/1.0 ブラウザからのリクエスト
のみに適用されます。HTTP/1.1 は、
交渉されたドキュメントのキャッシュに対してずっとよい制御が可能なので、
このディレクティブは HTTP/1.1 のリクエストには影響しません。</p>
<p>2.0 より前のバージョンでは、
<directive>CacheNegotiatedDocs</directive> は引数を取らず、
ディレクティブが存在することで on の動作をしていました。</p>
</usage>
</directivesynopsis>
<directivesynopsis>
<name>ForceLanguagePriority</name>
<description>$BMW5a$K9g$&C1FH$N%I%-%e%a%s%H$,8+$D$+$i$J$+$C$?$H$-$K9T$J$&$3$H$r;XDj(B
<description>要求に合う単独のドキュメントが見つからなかったときに行なうことを指定
</description>
<syntax>ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</syntax>
<default>ForceLanguagePriority Prefer</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>FileInfo</override>
<compatibility>$B%P!<%8%g%s(B 2.0.30 $B0J9_$G;HMQ2DG=(B</compatibility>
<compatibility>バージョン 2.0.30 以降で使用可能</compatibility>
<usage>
<p><directive>ForceLanguagePriority</directive> $B%G%#%l%/%F%#%V$O(B
$BMW5a$K9g$&%I%-%e%a%s%H$r0l$D$@$1JV$9$3$H$,$G$-$J$$$H$-$K!"(B
<p><directive>ForceLanguagePriority</directive> ディレクティブは
要求に合うドキュメントを一つだけ返すことができないときに、
<directive module="mod_negotiation">LanguagePriority</directive>
$B%G%#%l%/%F%#%V$r;H$C$F%M%4%7%(!<%7%g%s$N7k2L$rJV$7$^$9!#(B</p>
ディレクティブを使ってネゴシエーションの結果を返します。</p>
<p><code>ForceLanguagePriority Prefer</code> $B$O!"F1Ey$NA*Br;h$,(B
$B$$$/$D$+$"$k$H$-$K!"(BHTTP $B$N(B 300 (MULTIPLE CHOICES) $B$rJV$9Be$o$j$K!"(B
<code>LanguagePriority</code> $B$r;H$C$F0l$D$@$1%I%-%e%a%s%H$rJV$9$h$&$K(B
$B$7$^$9!#0J2<$N%G%#%l%/%F%#%V$,;XDj$5$l$F$$$F!"%f!<%6$N(B <code>Accept-Language</code>
$B%X%C%@$G$O(B <code>en</code> $B$H(B <code>de</code> $B$NIJ<A$,6&$K(B
<code>.500</code> ($BF1$8$/$i$$5vMF(B) $B$G$"$k$H$-$O!"(B
$B:G=i$K%^%C%A$9$k(B variant $B$N(B <code>en</code> $B$,Aw$i$l$^$9!#(B</p>
<p><code>ForceLanguagePriority Prefer</code> は、同等の選択肢が
いくつかあるときに、HTTP の 300 (MULTIPLE CHOICES) を返す代わりに、
<code>LanguagePriority</code> を使って一つだけドキュメントを返すように
します。以下のディレクティブが指定されていて、ユーザの <code>Accept-Language</code>
ヘッダでは <code>en</code> <code>de</code> の品質が共に
<code>.500</code> (同じくらい許容) であるときは、
最初にマッチする variant <code>en</code> が送られます。</p>
<example>
LanguagePriority en fr de<br />
ForceLanguagePriority Prefer
</example>
<p><code>ForceLanguagePriority Fallback</code> $B$G$O!"(BHTTP 406
(NOT ACCEPTABLE) $B$rAw?.$9$kBe$o$j$K!"(B
<p><code>ForceLanguagePriority Fallback</code> では、HTTP 406
(NOT ACCEPTABLE) を送信する代わりに、
<directive module="mod_negotiation">LanguagePriority</directive>
$B$,@5$7$$7k2L$rAw$j$^$9!#(B
$B0J2<$N%G%#%l%/%F%#%V$,;XDj$5$l$F$$$F!"%f!<%6$N(B <code>Accept-Language</code>
$B$,(B <code>es</code> $B8@8l$N$_$r5v2D$7$F$$$F!"$5$i$K$=$N$h$&$J(B variant $B$,$J$$$H$-$K$O!"(B
$B0J2<$N(B <directive module="mod_negotiation">LanguagePriority</directive>
$B$N%j%9%H$N:G=i$N(B variant $B$,Aw$l$l$^$9!#(B</p>
が正しい結果を送ります。
以下のディレクティブが指定されていて、ユーザの <code>Accept-Language</code>
<code>es</code> 言語のみを許可していて、さらにそのような variant がないときには、
以下の <directive module="mod_negotiation">LanguagePriority</directive>
のリストの最初の variant が送れれます。</p>
<example>
LanguagePriority en fr de<br />
ForceLanguagePriority Fallback
</example>
<p><code>Prefer</code> $B$H(B <code>Fallback</code> $B$NN>J}$N%*%W%7%g%s$r(B
$BF1;~$K;XDj$9$k$3$H$,$G$-$^$9!#(B
$B$G$9$+$i!"J#?t$N(B variant $B$,$"$k$H$-$O(B
<directive module="mod_negotiation">LanguagePriority</directive> $B$N:G=i$N(B
variant $B$,Aw$i$l!"%/%i%$%"%s%H$N5vMF8@8l$K9g$&(B vaiant $B$,$J$$$H$-$O(B
$BB8:_$9$k%I%-%e%a%s%H$G:G=i$N$b$N$,Aw$i$l$k!"$H$$$&MM$K$9$k$3$H$,$G$-$^$9!#(B</p>
<p><code>Prefer</code> <code>Fallback</code> の両方のオプションを
同時に指定することができます。
ですから、複数の variant があるときは
<directive module="mod_negotiation">LanguagePriority</directive> の最初の
variant が送られ、クライアントの許容言語に合う vaiant がないときは
存在するドキュメントで最初のものが送られる、という様にすることができます。</p>
</usage>
<seealso><directive module="mod_mime">AddLanguage</directive></seealso>
</directivesynopsis>
<directivesynopsis>
<name>LanguagePriority</name>
<description>$B%/%i%$%"%s%H$,M%@hEY$r<($5$J$+$C$?$H$-$N8@8l$N(B variant $B$NM%@hEY$r(B
$B;XDj(B</description>
<description>クライアントが優先度を示さなかったときの言語の variant の優先度を
指定</description>
<syntax>LanguagePriority <var>MIME-lang</var> [<var>MIME-lang</var>]
...</syntax>
<contextlist><context>server config</context><context>virtual host</context>
@@ -252,25 +252,25 @@
<override>FileInfo</override>
<usage>
<p><directive>LanguagePriority</directive> $B$O!"(BMultiViews
$B%j%/%(%9%H$r07$&$H$-$K!"%/%i%$%"%s%H$,M%@h=g0L$rDs6!$7$F$$$J$$>l9g$N(B
$B8@8l$NM%@h=g0L$r@_Dj$7$^$9!#(B<var>MIME-lang</var>
$B$N%j%9%H$,M%@hEY$N9_=g$KJB$S$^$9!#(B</p>
<p><directive>LanguagePriority</directive> は、MultiViews
リクエストを扱うときに、クライアントが優先順位を提供していない場合の
言語の優先順位を設定します。<var>MIME-lang</var>
のリストが優先度の降順に並びます。</p>
<example><title>Example:</title>
LanguagePriority en fr de
</example>
<p><code>foo.html</code> $B$,%j%/%(%9%H$5$l!"(B<code>foo.html.fr</code>
$B$H(B <code>foo.html.de</code> $B$,N>J}B8:_$7!"(B
$B%V%i%&%6$,8@8l$NM%@h=g0L$rDs6!$7$F$J$$>l9g$O(B
<code>foo.html.fr</code> $B$,JV$5$l$^$9!#(B</p>
<p><code>foo.html</code> がリクエストされ、<code>foo.html.fr</code>
<code>foo.html.de</code> が両方存在し、
ブラウザが言語の優先順位を提供してない場合は
<code>foo.html.fr</code> が返されます。</p>
<p>$B$3$N%G%#%l%/%F%#%V$OB>$NJ}K!$G!V:GA1!W(B
$B$N8@8l$,7hDj$G$-$J$$$H$-$+!"(B<directive
module="mod_negotiation">ForceLanguagePriority</directive> $B%G%#%l%/%F%#%V$,(B
<code>None</code> $B0J30$N$H$-$K$N$_8z2L$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B
$B0lHLE*$K$O!"%5!<%PB&$G$O$J$/%/%i%$%"%s%HB&$G9%$_$N8@8l$r7hDj$7$^$9!#(B</p>
<p>このディレクティブは他の方法で「最善」
の言語が決定できないときか、<directive
module="mod_negotiation">ForceLanguagePriority</directive> ディレクティブが
<code>None</code> 以外のときにのみ効果があることに注意してください。
一般的には、サーバ側ではなくクライアント側で好みの言語を決定します。</p>
</usage>
<seealso><directive module="mod_mime">AddLanguage</directive></seealso>
</directivesynopsis>

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 395228:655869 (outdated) -->
@@ -23,123 +23,123 @@
<modulesynopsis metafile="mod_proxy_ajp.xml.meta">
<name>mod_proxy_ajp</name>
<description><module>mod_proxy</module> $B$G(B AJP
$B$r%5%]!<%H$9$k$?$a$N%b%8%e!<%k(B</description>
<description><module>mod_proxy</module> AJP
をサポートするためのモジュール</description>
<status>Extension</status>
<sourcefile>proxy_ajp.c</sourcefile>
<identifier>proxy_ajp_module</identifier>
<summary>
<p>$BK\%b%8%e!<%k$K$O(B <module>mod_proxy</module> $B$,(B<em>$BI,MW$G$9(B</em>$B!#(B
<code>Apache JServ Protocol version 1.3</code> ($B0J9_(B <em>AJP13</em>)
$B$r%5%]!<%H$7$^$9!#(B</p>
<p>本モジュールには <module>mod_proxy</module> が<em>必要です</em>。
<code>Apache JServ Protocol version 1.3</code> (以降 <em>AJP13</em>)
をサポートします。</p>
<p><code>AJP13</code> $B%W%m%H%3%k$r07$($k$h$&$K$9$k$K$O(B
<module>mod_proxy</module> $B$H(B <module>mod_proxy_ajp</module>
$B$r%5!<%P$KAH$_9~$`I,MW$,$"$j$^$9!#(B</p>
<p><code>AJP13</code> プロトコルを扱えるようにするには
<module>mod_proxy</module> <module>mod_proxy_ajp</module>
をサーバに組み込む必要があります。</p>
<note type="warning"><title>$B7Y9p(B</title>
<note type="warning"><title>警告</title>
<p><a href="#access"
>$B0BA4$J%5!<%P$K$9$k(B</a>$B$^$G%W%m%/%75!G=$OM-8z$K$7$J$$$G$/$@$5$$!#(B
$B%*!<%W%s%W%m%-%7%5!<%P$O$"$J$?<+?H$N%M%C%H%o!<%/$K$H$C$F$b!"(B
$B%$%s%?!<%M%C%HA4BN$K$H$C$F$b4m81$G$9!#(B</p>
>安全なサーバにする</a>までプロクシ機能は有効にしないでください。
オープンプロキシサーバはあなた自身のネットワークにとっても、
インターネット全体にとっても危険です。</p>
</note>
</summary>
<seealso><module>mod_proxy</module></seealso>
<section id="overviewprotocol"><title>$B%W%m%H%3%k$N35MW(B</title>
<p><code>AJP13</code> $B%W%m%H%3%k$O%Q%1%C%H;X8~$G$9!#(B
$B2DFI$J%W%l!<%s%F%-%9%H7A<0$G$O$J$/%P%$%J%j7A<0$K$J$C$?$N$O!"(B
$B$*$=$i$/%Q%U%)!<%^%s%9>e$NM}M3$K$h$j$^$9!#(B
$B%&%'%V%5!<%P$O%5!<%V%l%C%H%3%s%F%J$H(B TCP $B%3%M%/%7%g%s$GDL?.$7$^$9!#(B
$B%=%1%C%H@8@.$O=E$$=hM}$J$N$G!"Ii2Y$r8:$i$9$?$a$K!"%5!<%V%l%C%H%3%s%F%J$H$N(B
TCP $B@\B3$r0];}$7!"J#?t$N%j%/%(%9%H!&%l%9%]%s%9=hM}%5%$%/%k$KBP$7$F0l$D$N(B
$B%3%M%/%7%g%s$r;H$$$^$o$9$h$&$K$J$C$F$$$^$9!#(B</p>
<p>$B$"$k%j%/%(%9%H$K%3%M%/%7%g%s$,3d$jEv$F$i$l$k$H!"$=$N=hM}%5%$%/%k$,(B
$B40N;$9$k$^$GB>$N$b$N$K;H$o$l$k$3$H$O$"$j$^$;$s!#(B
$B$D$^$j%3%M%/%7%g%s>e$G$O!"%j%/%(%9%H$NF1;~=hM}$O9T$o$l$^$;$s!#(B
$B$3$N$?$a!"%3%M%/%7%g%sN>C<$G$N<B9T$9$k%3!<%I$r4J7i$K$G$-$k0lJ}$G!"(B
$BF1;~$K3+$/%3%M%/%7%g%s$OB?$/$J$C$F$$$^$9!#(B</p>
<p>$B%5!<%V%l%C%H%3%s%F%J$X$N%3%M%/%7%g%s$r3+$$$?8e$O!"%3%M%/%7%g%s$N>uBV$O(B
$B<!$N$I$l$+$K$J$j$^$9(B:</p>
<section id="overviewprotocol"><title>プロトコルの概要</title>
<p><code>AJP13</code> プロトコルはパケット指向です。
可読なプレーンテキスト形式ではなくバイナリ形式になったのは、
おそらくパフォーマンス上の理由によります。
ウェブサーバはサーブレットコンテナと TCP コネクションで通信します。
ソケット生成は重い処理なので、負荷を減らすために、サーブレットコンテナとの
TCP 接続を維持し、複数のリクエスト・レスポンス処理サイクルに対して一つの
コネクションを使いまわすようになっています。</p>
<p>あるリクエストにコネクションが割り当てられると、その処理サイクルが
完了するまで他のものに使われることはありません。
つまりコネクション上では、リクエストの同時処理は行われません。
このため、コネクション両端での実行するコードを簡潔にできる一方で、
同時に開くコネクションは多くなっています。</p>
<p>サーブレットコンテナへのコネクションを開いた後は、コネクションの状態は
次のどれかになります:</p>
<ul>
<li> Idle <br />$B%3%M%/%7%g%s>e$G=hM}$5$l$F$$$k%j%/%(%9%H$O$"$j$^$;$s!#(B</li>
<li> Assigned <br />$B%3%M%/%7%g%s$O%j%/%(%9%H$r=hM}Cf$G$9!#(B</li>
<li> Idle <br />コネクション上で処理されているリクエストはありません。</li>
<li> Assigned <br />コネクションはリクエストを処理中です。</li>
</ul>
<p>$B%3%M%/%7%g%s$,FCDj$N%j%/%(%9%H$K%"%5%$%s$5$l$k$H!"4pK\E*$J>pJs(B ($BNc$($P(B
HTTP $B%X%C%@Ey(B) $B$,05=L$5$l$?7A(B ($BNc$($PDL>o$NJ8;zNs$O@0?t$K%(%s%3!<%I$5$l$^$9(B)
$B$GE>Aw$5$l$^$9!#>\:Y$O2<5-$N!V%j%/%(%9%H%Q%1%C%H$N9=B$!W$r;2>H$7$F$/$@$5$$!#(B
$B%j%/%(%9%H$K%\%G%#$,B8:_(B <code>(content-length > 0)</code> $B$9$l$P!"(B
$B4pK\E*$J>pJs$ND>8e$KJL%Q%1%C%H$GE>Aw$5$l$^$9!#(B</p>
<p>$B$3$N;~E@$G$*$=$i$/!"%5!<%V%l%C%H%3%s%F%J$O=hM}$r3+;O$G$-$k$h$&$K$J$j$^$9!#(B
$B$G$9$N$G!"<!$N%a%C%;!<%8$r%&%'%V%5!<%P$KLa$7$FCN$i$;$i$l$k$h$&$K$J$j$^$9!#(B</p>
<p>コネクションが特定のリクエストにアサインされると、基本的な情報 (例えば
HTTP ヘッダ等) が圧縮された形 (例えば通常の文字列は整数にエンコードされます)
で転送されます。詳細は下記の「リクエストパケットの構造」を参照してください。
リクエストにボディが存在 <code>(content-length > 0)</code> すれば、
基本的な情報の直後に別パケットで転送されます。</p>
<p>この時点でおそらく、サーブレットコンテナは処理を開始できるようになります。
ですので、次のメッセージをウェブサーバに戻して知らせられるようになります。</p>
<ul>
<li>SEND_HEADERS <br/>$B%V%i%&%6$K%X%C%@$rAw?.$7$^$9!#(B</li>
<li>SEND_BODY_CHUNK <br/>$B%V%i%&%6$K%\%G%#%G!<%?$N%A%c%s%/$rAw$j$^$9!#(B
<li>SEND_HEADERS <br/>ブラウザにヘッダを送信します。</li>
<li>SEND_BODY_CHUNK <br/>ブラウザにボディデータのチャンクを送ります。
</li>
<li>GET_BODY_CHUNK <br/>$B%j%/%(%9%H$N%G!<%?$rA4$F<u$1<h$j=*$o$C$F$$$J$$$H$-$K!"(B
$B;D$C$F$$$k%G!<%?$r<u$1<h$j$^$9!#%Q%1%C%H$K$"$kDj$^$C$?:GBgD9$,$"$j!"G$0U$N(B
$BBg$-$5$N%G!<%?$,%j%/%(%9%H$N%\%G%#$H$7$F4^$^$l$&$k>l9g(B
($BNc$($P%U%!%$%k$N%"%C%W%m!<%I$N>l9g(B) $B$KI,MW$H$J$j$^$9!#(B
($BCm(B: HTTP $B$N%A%c%s%/E>Aw$H$O4XO"$"$j$^$;$s!#(B)</li>
<li>END_RESPONSE <br/>$B%j%/%(%9%H=hM}%5%$%/%k$r=*N;$7$^$9!#(B</li>
<li>GET_BODY_CHUNK <br/>リクエストのデータを全て受け取り終わっていないときに、
残っているデータを受け取ります。パケットにある定まった最大長があり、任意の
大きさのデータがリクエストのボディとして含まれうる場合
(例えばファイルのアップロードの場合) に必要となります。
(注: HTTP のチャンク転送とは関連ありません。)</li>
<li>END_RESPONSE <br/>リクエスト処理サイクルを終了します。</li>
</ul>
<p>$B8D!9$N%a%C%;!<%8$O$=$l$>$l0[$J$k%G!<%?%Q%1%C%H7A<0$K$J$C$F$$$^$9!#(B
$B8e=R$N!V%l%9%]%s%9%Q%1%C%H$N9=B$!W$r;2>H$7$F$/$@$5$$!#(B</p>
<p>個々のメッセージはそれぞれ異なるデータパケット形式になっています。
後述の「レスポンスパケットの構造」を参照してください。</p>
</section>
<section id="basppacketstruct"><title>$B4pK\%Q%1%C%H9=B$(B</title>
<p>$B$3$N%W%m%H%3%k$K$O(B XDR $B$+$i<u$17Q$$$@ItJ,$,>/$7$"$j$^$9$,!"B?$/$NE@$G(B
$B0[$J$j$^$9(B ($BNc$($P(B 4 $B%P%$%H%"%i%$%a%s%H$G$J$$$3$H$J$I(B) $B!#(B</p>
<p>$B%P%$%H%*!<%@!<(B: $B8D!9$N%P%$%H$N%(%s%G%#%"%s$,$I$&$J$C$F$$$k$+$O!"(B
$B;d$O>\$7$/$J$$$N$G$9$,!"%j%H%k%(%s%G%#%"%s$K$J$C$F$$$k$H;W$$$^$9!#(B
XDR $B;EMM$G$=$&$J$C$F$$$k$N$H!"AG@2$i$7$$$3$H$K(B sys/socket $B%i%$%V%i%j$,(B
(C $B$G(B) $B$=$&$$$&Iw$K$G$-$F$$$k$N$G$=$&$J$N$@$H;W$$$^$7$?!#(B
$B%=%1%C%H8F$S=P$7$NFbIt$K$D$$$F$h$j>\$7$$J}$,$$$i$C$7$c$$$^$7$?$i!"(B
$B$465<x$/$@$5$$!#(B</p>
<p>$B%W%m%H%3%k$K$O(B 4 $B$D$N%G!<%?%?%$%W$,$"$j$^$9(B: byte, boolean,
integer, string $B$G$9!#(B</p>
<section id="basppacketstruct"><title>基本パケット構造</title>
<p>このプロトコルには XDR から受け継いだ部分が少しありますが、多くの点で
異なります (例えば 4 バイトアライメントでないことなど) 。</p>
<p>バイトオーダー: 個々のバイトのエンディアンがどうなっているかは、
私は詳しくないのですが、リトルエンディアンになっていると思います。
XDR 仕様でそうなっているのと、素晴らしいことに sys/socket ライブラリが
(C で) そういう風にできているのでそうなのだと思いました。
ソケット呼び出しの内部についてより詳しい方がいらっしゃいましたら、
ご教授ください。</p>
<p>プロトコルには 4 つのデータタイプがあります: byte, boolean,
integer, string です。</p>
<dl>
<dt><strong>Byte</strong></dt><dd>$B%P%$%H0l$D$G$9!#(B</dd>
<dt><strong>Byte</strong></dt><dd>バイト一つです。</dd>
<dt><strong>Boolean</strong></dt>
<dd>$B%P%$%H0l$D$G!"(B<code>1 = true</code>, <code>0 = false</code> $B$G$9!#(B
(C $B$N$h$&$K(B) $BHsNm$r??$H$7$F07$C$F$7$^$&$H!"$"$k>l9g$OF0$/$+$b$7$l$^$;$s$7!"(B
$BF0$+$J$$$+$b$7$l$^$;$s!#(B</dd>
<dd>バイト一つで、<code>1 = true</code>, <code>0 = false</code> です。
(C のように) 非零を真として扱ってしまうと、ある場合は動くかもしれませんし、
動かないかもしれません。</dd>
<dt><strong>Integer</strong></dt>
<dd><code>0 $B$+$i(B 2^16 (32768)</code> $B$NHO0O$N?t;z!#9b<!$N(B 2 $B%P%$%H$,(B
$B@h$K3JG<$5$l$^$9!#(B</dd>
<dd><code>0 から 2^16 (32768)</code> の範囲の数字。高次の 2 バイトが
先に格納されます。</dd>
<dt><strong>String</strong></dt>
<dd>$B2DJQD9$NJ8;zNs(B (2^16 $B$,D9$5$N>e8B(B) $B!#D9$5>pJs$N%Q%1%C%H(B 2 $B%P%$%H$N8e$K(B
$BJ8;zNs(B ($B=*C<J8;z(B '\0' $B$r4^$`(B) $B$,B3$/7A<0$G%(%s%3!<%I$5$l$^$9!#(B
$B%(%s%3!<%I$5$l$F$$$kD9$5>pJs$O:G8e$N(B '\0' $B$r(B<strong>$B%+%&%s%H$7$J$$(B</strong>
$B$3$H$KCm0U$7$F$/$@$5$$!=!=$3$l$O(B <code>strlen</code> $B$HF1MM$G$9!#(B
$B$3$l$i$N=*C<J8;z$r%9%-%C%W$9$k$?$a$K!"$"$^$j0UL#$NL5$$%$%s%/%j%a%s%HJ8(B
$B$r$?$/$5$s=q$+$J$$$H$$$1$J$$$N$O!"(B
Java $B$NB&$+$i8+$k$H>/$7J6$i$o$7$/46$8$i$l$k$+$b$7$l$^$;$s!#(B
$B$3$&$J$C$?M}M3$O$*$=$i$/!"(BServlet $B%3%s%F%J$+$iJV$5$l$kJ8;zNs$rFI$_=P$9;~$K!"(B
$B8zN($h$/(B C $B$N%3!<%I$r=q$1$k$h$&$K$9$k!=!=%5!<%V%l%C%H$+$iJV$5$l$k(B
$BJ8;zNs$O(B \0 $BJ8;z$G=*C<$5$l$F$$$k$N$G!"(BC $B$N%3!<%I$G$O$o$6$o$6%3%T!<$r$;$:$K!"(B
$B0l$D$N%P%C%U%!$X$N%j%U%!%l%s%9$r<h$j2s$9$h$&$K=q$/$3$H$,$G$-$k!=!=(B
$B$?$a$@$H;W$o$l$^$9!#(B
'\0' $BJ8;z$,$J$$>l9g$O!"(BC $B$G$OJ8;zNs$N5,B'$K9g$&$h$&$K%3%T!<$7$J$1$l$P(B
$B$$$1$J$/$J$C$F$7$^$$$^$9!#(B</dd>
<dd>可変長の文字列 (2^16 が長さの上限) 。長さ情報のパケット 2 バイトの後に
文字列 (終端文字 '\0' を含む) が続く形式でエンコードされます。
エンコードされている長さ情報は最後の '\0' を<strong>カウントしない</strong>
ことに注意してください――これは <code>strlen</code> と同様です。
これらの終端文字をスキップするために、あまり意味の無いインクリメント文
をたくさん書かないといけないのは、
Java の側から見ると少し紛らわしく感じられるかもしれません。
こうなった理由はおそらく、Servlet コンテナから返される文字列を読み出す時に、
効率よく C のコードを書けるようにする――サーブレットから返される
文字列は \0 文字で終端されているので、C のコードではわざわざコピーをせずに、
一つのバッファへのリファレンスを取り回すように書くことができる――
ためだと思われます。
'\0' 文字がない場合は、C では文字列の規則に合うようにコピーしなければ
いけなくなってしまいます。</dd>
</dl>
<section><title>$B%Q%1%C%H%5%$%:(B</title>
<p>$BB?$/$N%3!<%I$G$=$&$J$C$F$$$k$N$G$9$,!"%Q%1%C%H%5%$%:$N:GBg%5%$%:$O(B
<code>8 * 1024 (8K)</code> $B$G$9!#%Q%1%C%H$N<B:]$ND9$5$O%X%C%@$K(B
$B%(%s%3!<%I$5$l$FF~$C$F$$$^$9!#(B</p>
<section><title>パケットサイズ</title>
<p>多くのコードでそうなっているのですが、パケットサイズの最大サイズは
<code>8 * 1024 (8K)</code> です。パケットの実際の長さはヘッダに
エンコードされて入っています。</p>
</section>
<section><title>$B%Q%1%C%H%X%C%@(B</title>
<p>$B%5!<%P$+$i%3%s%F%J$KAw=P$5$l$k%Q%1%C%H$O(B <code>0x1234</code> $B$G;O$^$j$^$9!#(B
$B%3%s%F%J$+$i%5!<%P$KAw$i$l$k%Q%1%C%H$O(B <code>AB</code> (ASCII $B%3!<%I(B A $B$H(B
ASCII $B%3!<%I(B B) $B$G;O$^$j$^$9!#$3$NFs%P%$%H$N8e$K!"%Z%$%m!<%ID9$,(B ($B>e5-$N7A<0$G(B)
$BB3$-$^$9!#$3$N$?$a!"%Z%$%m!<%ID9$N:GBgCM$O(B 2^16 $B$K$G$-$k$h$&$K;W$($^$9$,!"(B
$B<B:]$K$O%3!<%I$G$O:GBgCM$O(B 8K $B$K@_Dj$5$l$F$$$^$9!#(B</p>
<section><title>パケットヘッダ</title>
<p>サーバからコンテナに送出されるパケットは <code>0x1234</code> で始まります。
コンテナからサーバに送られるパケットは <code>AB</code> (ASCII コード A と
ASCII コード B) で始まります。この二バイトの後に、ペイロード長が (上記の形式で)
続きます。このため、ペイロード長の最大値は 2^16 にできるように思えますが、
実際にはコードでは最大値は 8K に設定されています。</p>
<table>
<tr>
<td colspan="6"><em>$B%Q%1%C%H7A<0(B (Server->Container)</em></td>
<td colspan="6"><em>パケット形式 (Server->Container)</em></td>
</tr>
<tr>
<td>Byte</td>
@@ -153,13 +153,13 @@
<td>Contents</td>
<td>0x12</td>
<td>0x34</td>
<td colspan="2">$B%G!<%?D9(B (n)</td>
<td colspan="2">データ長 (n)</td>
<td>Data</td>
</tr>
</table>
<table>
<tr>
<td colspan="6"><em>$B%Q%1%C%H7A<0(B (Container->Server)</em></td>
<td colspan="6"><em>パケット形式 (Container->Server)</em></td>
</tr>
<tr>
<td>Byte</td>
@@ -173,98 +173,98 @@
<td>Contents</td>
<td>A</td>
<td>B</td>
<td colspan="2">$B%G!<%?D9(B (n)</td>
<td colspan="2">データ長 (n)</td>
<td>Data</td>
</tr>
</table>
<p>$B$[$H$s$I$N%Q%1%C%H$G!"%Z%$%m!<%I$N:G=i$N%P%$%H$,%a%C%;!<%8$N7?$r%(%s%3!<%I(B
$B$7$F$$$^$9!#Nc30$O%5!<%P$+$i%3%s%F%J$KAw$i$l$k%j%/%(%9%H%\%G%#%Q%1%C%H$G$9(B
$B!=!=$3$l$i$OI8=`E*$J%Q%1%C%H7A<0(B (<code>0x1234</code> $B$H%Q%1%C%HD9(B)
$B$G$9$,!"$=$N8e$KB3$/%W%l%U%#%C%/%9%3!<%I$,$"$j$^$;$s!#(B</p>
<p>$B%&%'%V%5!<%P$O<!$N%a%C%;!<%8$r%5!<%V%l%C%H%3%s%F%J$KAw=P$G$-$^$9!#(B</p>
<p>ほとんどのパケットで、ペイロードの最初のバイトがメッセージの型をエンコード
しています。例外はサーバからコンテナに送られるリクエストボディパケットです
――これらは標準的なパケット形式 (<code>0x1234</code> とパケット長)
ですが、その後に続くプレフィックスコードがありません。</p>
<p>ウェブサーバは次のメッセージをサーブレットコンテナに送出できます。</p>
<table>
<tr>
<td>$B%3!<%I(B</td>
<td>$B%Q%1%C%H$N7?(B</td>
<td>$B0UL#(B</td>
<td>コード</td>
<td>パケットの型</td>
<td>意味</td>
</tr>
<tr>
<td>2</td>
<td>Forward Request</td>
<td>$B%j%/%(%9%H=hM}%5%$%/%k$r8eB3$N%G!<%?$H$H$b$K3+;O$9$k!#(B</td>
<td>リクエスト処理サイクルを後続のデータとともに開始する。</td>
</tr>
<tr>
<td>7</td>
<td>Shutdown</td>
<td>$B%&%'%V%5!<%P$,%3%s%F%J$K!"%3%s%F%J$r=*N;$9$k$h$&$KEA$($k!#(B</td>
<td>ウェブサーバがコンテナに、コンテナを終了するように伝える。</td>
</tr>
<tr>
<td>8</td>
<td>Ping</td>
<td>$B%&%'%V%5!<%P$,%3%s%F%J$K@)8f$r<u$1;}$D$h$&$KEA$($k(B
($B%;%-%e%"%m%0%$%s%U%'!<%:(B) $B!#(B</td>
<td>ウェブサーバがコンテナに制御を受け持つように伝える
(セキュアログインフェーズ) 。</td>
</tr>
<tr>
<td>10</td>
<td>CPing</td>
<td>$B%&%'%V%5!<%P$,%3%s%F%J$K(B CPong $B$GB(:B$K1~Ez$9$k$h$&$KEA$($k!#(B</td>
<td>ウェブサーバがコンテナに CPong で即座に応答するように伝える。</td>
</tr>
<tr>
<td>none</td>
<td>Data</td>
<td>$B%5%$%:(B (2 $B%P%$%H(B) $B$H$=$l$KB3$/%\%G%#%G!<%?!#(B</td>
<td>サイズ (2 バイト) とそれに続くボディデータ。</td>
</tr>
</table>
<p>$B4pK\E*$J%;%-%e%j%F%#$r3NJ]$9$k$?$a!"%[%9%H$5$l$F$$$k%^%7%s$HF10l$N(B
$B%^%7%s$+$i$N%j%/%(%9%H$KBP$7$F$N$_!"%3%s%F%J$O<B:]$K(B <code>Shutdown</code>
$B$r<B9T$7$^$9!#(B</p>
<p>$B:G=i$N(B <code>Data</code> $B%Q%1%C%H$O!"(B<code>Forward Request</code>
$B$ND>8e$K%&%'%V%5!<%P$+$iAw$i$l$^$9!#(B</p>
<p>$B%5!<%V%l%C%H%3%s%F%J$O%&%'%V%5!<%P$K!"<!$N%?%$%W$N%a%C%;!<%8$rAw$k$3$H$,(B
$B$G$-$^$9(B :</p>
<p>基本的なセキュリティを確保するため、ホストされているマシンと同一の
マシンからのリクエストに対してのみ、コンテナは実際に <code>Shutdown</code>
を実行します。</p>
<p>最初の <code>Data</code> パケットは、<code>Forward Request</code>
の直後にウェブサーバから送られます。</p>
<p>サーブレットコンテナはウェブサーバに、次のタイプのメッセージを送ることが
できます :</p>
<table>
<tr>
<td>$B%3!<%I(B</td>
<td>$B%Q%1%C%H$N7?(B</td>
<td>$B0UL#(B</td>
<td>コード</td>
<td>パケットの型</td>
<td>意味</td>
</tr>
<tr>
<td>3</td>
<td>Send Body Chunk</td>
<td>$B%5!<%V%l%C%H%3%s%F%J$+$i%&%'%V%5!<%P$K(B
($B$=$7$F$*$=$i$/$=$N$^$^%V%i%&%6$K(B)$B!"%\%G%#$N%A%c%s%/$rAw$k!#(B</td>
<td>サーブレットコンテナからウェブサーバに
(そしておそらくそのままブラウザに)、ボディのチャンクを送る。</td>
</tr>
<tr>
<td>4</td>
<td>Send Headers</td>
<td>$B%5!<%V%l%C%H%3%s%F%J$+$i%&%'%V%5!<%P$K(B ($B$=$7$F$*$=$i$/$=$N$^$^%V%i%&%6$K(B)
$B%l%9%]%s%9%X%C%@$rAw$k!#(B</td>
<td>サーブレットコンテナからウェブサーバに (そしておそらくそのままブラウザに)
レスポンスヘッダを送る。</td>
</tr>
<tr>
<td>5</td>
<td>End Response</td>
<td>$B%l%9%]%s%9(B ($B$D$^$j%j%/%(%9%H=hM}%5%$%/%k(B) $B=*N;$NL\0u$rAw$k!#(B
<td>レスポンス (つまりリクエスト処理サイクル) 終了の目印を送る。
</td>
</tr>
<tr>
<td>6</td>
<td>Get Body Chunk</td>
<td>$B$^$@A4$FE>Aw$5$l$F$$$J$$>l9g!";D$C$F$$$k%j%/%(%9%H$N%G!<%?$r<u$1<h$k!#(B
<td>まだ全て転送されていない場合、残っているリクエストのデータを受け取る。
</td>
</tr>
<tr>
<td>9</td>
<td>CPong $B1~Ez(B</td>
<td>CPing $B%j%/%(%9%H$K1~Ez$9$k!#(B</td>
<td>CPong 応答</td>
<td>CPing リクエストに応答する。</td>
</tr>
</table>
<p>$B>e5-%a%C%;!<%8$O!"$=$l$>$lFbIt9=B$$,0[$J$C$F$$$^$9!#>\:Y$O2<5-$r$4Mw$/$@$5$$!#(B
<p>上記メッセージは、それぞれ内部構造が異なっています。詳細は下記をご覧ください。
</p>
</section>
</section>
<section id="rpacetstruct"><title>$B%j%/%(%9%H%Q%1%C%H9=B$(B</title>
<p>$B%5!<%P$+$i%3%s%F%J$XAw$i$l$k%a%C%;!<%8$,(B
<em>Forward Request</em> $B7?$N>l9g(B :</p>
<section id="rpacetstruct"><title>リクエストパケット構造</title>
<p>サーバからコンテナへ送られるメッセージが
<em>Forward Request</em> 型の場合 :</p>
<example><pre>
AJP13_FORWARD_REQUEST :=
prefix_code (byte) 0x02 = JK_AJP13_FORWARD_REQUEST
@@ -281,7 +281,7 @@ AJP13_FORWARD_REQUEST :=
attributes *(attribut_name attribute_value)
request_terminator (byte) OxFF
</pre></example>
<p><code>request_headers</code> $B$O<!$N$h$&$J9=B$$K$J$C$F$$$^$9(B :
<p><code>request_headers</code> は次のような構造になっています :
</p><example><pre>
req_header_name :=
sc_req_header_name | (string) [see below for how this is parsed]
@@ -290,24 +290,24 @@ sc_req_header_name := 0xA0xx (integer)
req_header_value := (string)
</pre></example>
<p><code>$BB0@-(B</code> $B$O%*%W%7%g%s$G!"<!$N$h$&$J9=B$$r$7$F$$$^$9(B :</p>
<p><code>属性</code> はオプションで、次のような構造をしています :</p>
<example><pre>
attribute_name := sc_a_name | (sc_a_req_attribute string)
attribute_value := (string)
</pre></example>
<p>$B$b$C$H$b=EMW$J%X%C%@$O(B <code>content-length</code> $B$@$H$$$&$3$H$K(B
$BCm0U$7$F$/$@$5$$!#%3%s%F%J$O<!$N%Q%1%C%H$rC5$9$+$I$&$+$r!"(B
$B$=$l$r8+$F7h$a$k$+$i$G$9!#(B</p>
<section><title>Forward Request $BMWAG$N>\:Y$J@bL@(B
<p>もっとも重要なヘッダは <code>content-length</code> だということに
注意してください。コンテナは次のパケットを探すかどうかを、
それを見て決めるからです。</p>
<section><title>Forward Request 要素の詳細な説明
</title></section>
<section><title>Request prefix</title>
<p>$B%j%/%(%9%H$K$D$$$F$OA4$F!"$3$NCM$O(B 2 $B$K$J$j$^$9!#B>$N(B Prefix $B%3!<%I$N>\:Y$O(B
$B>e5-$r$4Mw$/$@$5$$!#(B</p>
<p>リクエストについては全て、この値は 2 になります。他の Prefix コードの詳細は
上記をご覧ください。</p>
</section>
<section><title>Method</title>
<p>HTTP $B%a%=%C%I$O(B 1 $B%P%$%H$K%(%s%3!<%I$5$l$^$9(B :</p>
<p>HTTP メソッドは 1 バイトにエンコードされます :</p>
<table>
<tr><td>Command Name</td><td>Code</td></tr>
<tr><td>OPTIONS</td><td>1</td></tr>
@@ -338,25 +338,25 @@ attribute_value := (string)
<tr><td>BASELINE_CONTROL</td><td>26</td></tr>
<tr><td>MKACTIVITY</td><td>27</td></tr>
</table>
<p>$B:#8e$N(B ajp13 $B%P!<%8%g%s$G$O!"$3$N0lMw$K$J$$!":#8eDI2C$5$l$k%a%=%C%I$r(B
$BAw$k$+$b$7$l$^$;$s!#(B</p>
<p>今後の ajp13 バージョンでは、この一覧にない、今後追加されるメソッドを
送るかもしれません。</p>
</section>
<section><title>protocol, req_uri, remote_addr, remote_host, server_name,
server_port, is_ssl</title>
<p>$B$3$l$i$O$^$5$KJ8;zDL$j$N$b$N$G$9!#$I$l$bI,MW$G!"%j%/%(%9%H$NKh2s$K$D$-(B
$BAw$i$l$^$9!#(B</p>
<p>これらはまさに文字通りのものです。どれも必要で、リクエストの毎回につき
送られます。</p>
</section>
<section><title>Headers</title>
<p><code>request_headers</code> $B$N9=B$$O<!$N$h$&$J$b$N$G$9(B :
$B$^$:%X%C%@$N?t(B <code>num_headers</code> $B$,%(%s%3!<%I$5$l$^$9!#(B
$B<!$K%X%C%@L>(B <code>req_header_name</code> / $BCM(B <code>req_header_value</code>
$B$NAH$,B3$-$^$9!#8zN($N$?$a!"0lHLE*$J%X%C%@$O@0?t$G%(%s%3!<%I$7$FE>Aw$7$^$9!#(B
$B%X%C%@L>$,4pK\%X%C%@$N0lMw$KL5$$>l9g$O!"DL>oDL$j(B ($BJ8;zNs$H$7$F!"D9$5(B
$B%W%l%U%#%C%/%9IU$-$G(B) $BE>Aw$5$l$^$9!#0lHLE*$J%X%C%@(B
<code>sc_req_header_name</code> $B$N0lMw$H$=$N%3!<%I$O<!$NDL$j$G$9(B
($B$I$l$bBgJ8;z>.J8;z$r6hJL$7$^$9(B) :</p>
<p><code>request_headers</code> の構造は次のようなものです :
まずヘッダの数 <code>num_headers</code> がエンコードされます。
次にヘッダ名 <code>req_header_name</code> / <code>req_header_value</code>
の組が続きます。効率のため、一般的なヘッダは整数でエンコードして転送します。
ヘッダ名が基本ヘッダの一覧に無い場合は、通常通り (文字列として、長さ
プレフィックス付きで) 転送されます。一般的なヘッダ
<code>sc_req_header_name</code> の一覧とそのコードは次の通りです
(どれも大文字小文字を区別します) :</p>
<table>
<tr><td>$BL>A0(B</td><td>$B%3!<%I$NCM(B</td><td>$B%3!<%IL>(B</td></tr>
<tr><td>名前</td><td>コードの値</td><td>コード名</td></tr>
<tr><td>accept</td><td>0xA001</td><td>SC_REQ_ACCEPT</td></tr>
<tr><td>accept-charset</td><td>0xA002</td><td>SC_REQ_ACCEPT_CHARSET
</td></tr>
@@ -378,32 +378,32 @@ attribute_value := (string)
<tr><td>referer</td><td>0xA00D</td><td>SC_REQ_REFERER</td></tr>
<tr><td>user-agent</td><td>0xA00E</td><td>SC_REQ_USER_AGENT</td></tr>
</table>
<p>$B$3$l$rFI$_9~$`(B Java $B$N%3!<%I$G$O!":G=i$N(B 2 $B%P%$%H@0?t$r<h$j9~$_!"(B
$BL\0u$K$J$k%P%$%H(B <code>'0xA0'</code> $B$G$"$l$P!"%X%C%@L>$NG[Ns$N(B
$B%$%s%G%C%/%9$r;H$$$^$9!#@hF,%P%$%H$,(B <code>0xA0</code> $B$G$J$$>l9g$O!"(B
$B@hF,(B 2 $B%P%$%H$OJ8;zNsD9$rI=$9@0?t$G$"$k$H2r<a$7!"FI$_9~$_$O$8$a$^$9!#(B</p>
<p>$B%X%C%@L>$ND9$5$O(B <code>0x9999 (==0xA000 -1)</code> $B0J>e$K$J$i$J$$$H$$$&(B
$B2>Dj$N2<$KF0$$$F$$$F!">/$7$"$$$^$$$G$9$,9gM}E*$J5sF0$K$J$C$F$$$^$9!#(B</p>
<note><title>$BCm(B:</title>
<code>content-length</code> $B%X%C%@$O$H$F$b=EMW$G$9!#(B
$BB8:_$7$F$$$FHs%<%m$G$"$l$P!"%j%/%(%9%H$K$O%\%G%#$,$"$k(B ($BNc$($P(B POST
$B%j%/%(%9%H(B) $B$H?dB,$7!"$=$N%\%G%#$r<h$j9~$`$?$a$K(B
$BD>8e$N%Q%1%C%H$rF~NO%9%H%j!<%`$+$iFI$_9~$_$O$8$a$^$9!#(B
<p>これを読み込む Java のコードでは、最初の 2 バイト整数を取り込み、
目印になるバイト <code>'0xA0'</code> であれば、ヘッダ名の配列の
インデックスを使います。先頭バイトが <code>0xA0</code> でない場合は、
先頭 2 バイトは文字列長を表す整数であると解釈し、読み込みはじめます。</p>
<p>ヘッダ名の長さは <code>0x9999 (==0xA000 -1)</code> 以上にならないという
仮定の下に動いていて、少しあいまいですが合理的な挙動になっています。</p>
<note><title>:</title>
<code>content-length</code> ヘッダはとても重要です。
存在していて非ゼロであれば、リクエストにはボディがある (例えば POST
リクエスト) と推測し、そのボディを取り込むために
直後のパケットを入力ストリームから読み込みはじめます。
</note>
</section>
<section><title>$BB0@-(B</title>
<p><code>?</code> $B%W%l%U%#%C%/%9$G;O$^$kB0@-(B ($BNc(B <code>?context</code>)
$B$O!#>JN,2DG=$G$9!#$=$l$>$lB0@-$N7?$r<($9(B 1 $B%P%$%H$N%3!<%I$H!"(B
$BCM$NJ8;zNs$,B3$-$^$9!#(B
$B$3$l$i$O=gITF1$GAw$k$3$H$,$G$-$^$9(B (C $B$N%3!<%I$O>o$K2<$N0lMw=g$K(B
$BAw$k$h$&$G$9$,(B) $B!#(B
$B%*%W%7%g%s$NB0@-$N%j%9%H$N:G8e$K$O!"FCJL$J=*N;%3!<%I$,Aw$i$l$^$9!#(B
$B%3!<%I$N0lMw$O(B : </p>
<section><title>属性</title>
<p><code>?</code> プレフィックスで始まる属性 (例 <code>?context</code>)
は。省略可能です。それぞれ属性の型を示す 1 バイトのコードと、
値の文字列が続きます。
これらは順不同で送ることができます (C のコードは常に下の一覧順に
送るようですが) 。
オプションの属性のリストの最後には、特別な終了コードが送られます。
コードの一覧は : </p>
<table>
<tr><td>Information</td><td>Code Value</td><td>Note</td></tr>
<tr><td>?context</td><td>0x01</td><td>$BL$<BAu(B
<tr><td>?context</td><td>0x01</td><td>未実装
</td></tr>
<tr><td>?servlet_path</td><td>0x02</td><td>$BL$<BAu(B
<tr><td>?servlet_path</td><td>0x02</td><td>未実装
</td></tr>
<tr><td>?remote_user</td><td>0x03</td><td></td></tr>
<tr><td>?auth_type</td><td>0x04</td><td></td></tr>
@@ -417,33 +417,33 @@ attribute_value := (string)
<tr><td>?ssl_key_size</td><td>0x0B</td><td></td></tr>
<tr><td>are_done</td><td>0xFF</td><td>request_terminator</td></tr>
</table>
<p><code>context</code> $B$H(B <code>servlet_path</code> $B$O8=:_$N(B C $B$N(B
$B%3!<%I$G$O%;%C%H$5$l$F$$$^$;$s!#$^$?!"$[$H$s$I$N(B Java $B$N%3!<%I$G$b!"(B
$B$3$N%U%#!<%k%I$G2?$,Aw$i$l$F$bL5;k$5$l$^$9(B ($B$3$l$i$N%3!<%I$N8e$KJ8;zNs$,(B
$BAw$i$l$k$H2u$l$k$b$N$b$"$j$^$9(B)$B!#(B
$B$3$l$,%P%0$J$N$+!"C1$KL$<BAu$J$N$+!"Nr;KE*7P0^$G;D$C$F$$$k%3!<%I$J$N$+(B
$BJ,$+$j$^$;$s$,!"%3%M%/%7%g%s$NN>B&$H$b$G8+Ev$?$j$^$;$s!#(B</p>
<p><code>remote_user</code> $B$H(B <code>auth_type</code> $B$O$*$=$i$/(B
HTTP $B%l%Y%k$NG'>Z$r;2>H$7$F$$$F!"%j%b!<%H%f!<%6$N%f!<%6L>$HG'>Z$K;HMQ$7$?(B
$B%?%$%W(B ($BNc(B Basic, Digest) $B$K$D$$$F$d$j<h$j$7$^$9!#(B</p>
<p><code>context</code> <code>servlet_path</code> は現在の C の
コードではセットされていません。また、ほとんどの Java のコードでも、
このフィールドで何が送られても無視されます (これらのコードの後に文字列が
送られると壊れるものもあります)。
これがバグなのか、単に未実装なのか、歴史的経緯で残っているコードなのか
分かりませんが、コネクションの両側ともで見当たりません。</p>
<p><code>remote_user</code> <code>auth_type</code> はおそらく
HTTP レベルの認証を参照していて、リモートユーザのユーザ名と認証に使用した
タイプ (例 Basic, Digest) についてやり取りします。</p>
<p><code>query_string</code>, <code>ssl_cert</code>,
<code>ssl_cipher</code>, <code>ssl_session</code>
$B$O(B HTTP $B$H(B HTTPS $B$NBP1~$9$kItJ,$r;2>H$7$^$9!#(B</p>
<p><code>jvm_route</code> $B$O%9%F%#%C%-!<%;%C%7%g%s$N%5%]!<%H!=!=(B
$B%m!<%I%P%i%s%9$7$F$$$kJ#?t$N%5!<%PCf$NFCDj$N(B Tomcat $B%$%s%9%?%s%9$H!"(B
$B%f!<%6$N%;%C%7%g%s$H$rI3IU$1$k5!G=!=!=$K;H$o$l$^$9!#(B</p>
<p>$B$3$N4pK\B0@-0lMw$KL5$$$b$N$K$D$$$F$O!"(B<code>req_attribute</code>
$B%3!<%I(B <code>0x0A</code> $B7PM3$GB0@-$r2?8D$G$bAw$k$3$H$,$G$-$^$9!#(B
$BB0@-$NL>A0$HCM$NJ8;zNs$NAH$r!"$=$l$>$l$3$N%3!<%I$ND>8e$KAw$j$^$9!#(B
$B4D6-JQ?t$O$3$NJ}K!$GEA$($i$l$^$9!#(B</p>
<p>$B:G8e$KB0@-$,A4$FAw?.$5$l$?8e$K!"B0@-$N=*C<$r<($9(B <code>0xFF</code>
$B$,Aw=P$5$l$^$9!#$3$N?.9f$OB0@-$N0lMw$N=*$o$j$r<($9$HF1;~$K!"%j%/%(%9%H(B
$B%Q%1%C%H$N=*C<$r$b<($7$F$$$^$9!#(B</p>
は HTTP と HTTPS の対応する部分を参照します。</p>
<p><code>jvm_route</code> はスティッキーセッションのサポート――
ロードバランスしている複数のサーバ中の特定の Tomcat インスタンスと、
ユーザのセッションとを紐付ける機能――に使われます。</p>
<p>この基本属性一覧に無いものについては、<code>req_attribute</code>
コード <code>0x0A</code> 経由で属性を何個でも送ることができます。
属性の名前と値の文字列の組を、それぞれこのコードの直後に送ります。
環境変数はこの方法で伝えられます。</p>
<p>最後に属性が全て送信された後に、属性の終端を示す <code>0xFF</code>
が送出されます。この信号は属性の一覧の終わりを示すと同時に、リクエスト
パケットの終端をも示しています。</p>
</section>
</section>
<section id="resppacketstruct"><title>$B%l%9%]%s%9%Q%1%C%H9=B$(B</title>
<p>$B%3%s%F%J$,%5!<%P$KAw$jJV$9$3$H$N$G$-$k%a%C%;!<%8(B:</p>
<section id="resppacketstruct"><title>レスポンスパケット構造</title>
<p>コンテナがサーバに送り返すことのできるメッセージ:</p>
<example><pre>
AJP13_SEND_BODY_CHUNK :=
prefix_code 3
@@ -474,19 +474,19 @@ AJP13_GET_BODY_CHUNK :=
prefix_code 6
requested_length (integer)
</pre></example>
<section><title>$B>\:Y(B :</title></section>
<section><title>詳細 :</title></section>
<section><title>Send Body Chunk</title>
<p>$B%A%c%s%/$O4pK\E*$K$O%P%$%J%j%G!<%?$G!"%V%i%&%6$KD>@\Aw$i$l$^$9!#(B</p>
<p>チャンクは基本的にはバイナリデータで、ブラウザに直接送られます。</p>
</section>
<section><title>Send Headers</title>
<p>$B%9%F!<%?%9%3!<%I$H%a%C%;!<%8$,DL>o$N(B HTTP $B$NDL?.$K$O$"$j$^$9(B ($BNc(B
<code>200</code> $B$H(B <code>OK</code>)$B!#%l%9%]%s%9%X%C%@L>$O!"(B
$B%j%/%(%9%H%X%C%@L>$HF1MM$NJ}K!$G%(%s%3!<%I$5$l$^$9!#(B
$B%3!<%I$HJ8;zNs$NH=JLJ}K!$N>\:Y$K4X$7$F$O!">e5-$N(B header_encoding
$B$r;2>H$7$F$/$@$5$$!#(B
$B0lHLE*$J%X%C%@$N%3!<%I$O(B :</p>
<p>ステータスコードとメッセージが通常の HTTP の通信にはあります (例
<code>200</code> <code>OK</code>)。レスポンスヘッダ名は、
リクエストヘッダ名と同様の方法でエンコードされます。
コードと文字列の判別方法の詳細に関しては、上記の header_encoding
を参照してください。
一般的なヘッダのコードは :</p>
<table>
<tr><td>$BL>A0(B</td><td>$B%3!<%I$NCM(B</td></tr>
<tr><td>名前</td><td>コードの値</td></tr>
<tr><td>Content-Type</td><td>0xA001</td></tr>
<tr><td>Content-Language</td><td>0xA002</td></tr>
<tr><td>Content-Length</td><td>0xA003</td></tr>
@@ -499,25 +499,25 @@ AJP13_GET_BODY_CHUNK :=
<tr><td>Status</td><td>0xA00A</td></tr>
<tr><td>WWW-Authenticate</td><td>0xA00B</td></tr>
</table>
<p>$B%3!<%I$+%X%C%@J8;zNs$ND>8e$K$O!"%X%C%@$NCM$,%(%s%3!<%I$5$l$^$9!#(B</p>
<p>コードかヘッダ文字列の直後には、ヘッダの値がエンコードされます。</p>
</section>
<section><title>End Response</title>
<p>$B%j%/%(%9%H=hM}%5%$%/%k$N=*N;$rCN$i$;$^$9!#(B<code>reuse</code> $B%U%i%0$,??(B
<code>(==1)</code> $B$N>l9g!"8=:_;HMQ$7$F$$$k(B TCP $B%3%M%/%7%g%s$O<!$N?7$7$$(B
$B%j%/%(%9%H$K;H$($k$h$&$K$J$j$^$9!#(B<code>reuse</code> $B$,56(B (C $B$N%3!<%I$G$O(B
1 $B0J30$NA4$F(B) $B$N>l9g$O!"%3%M%/%7%g%s$rJD$8$k$3$H$K$J$j$^$9!#(B</p>
<p>リクエスト処理サイクルの終了を知らせます。<code>reuse</code> フラグが真
<code>(==1)</code> の場合、現在使用している TCP コネクションは次の新しい
リクエストに使えるようになります。<code>reuse</code> が偽 (C のコードでは
1 以外の全て) の場合は、コネクションを閉じることになります。</p>
</section>
<section><title>Get Body Chunk</title>
<p>($B%\%G%#$N%5%$%:$,Bg$-$9$.$F:G=i$N%Q%1%C%H$K<}$^$i$J$$>l9g$d!"(B
$B%j%/%(%9%H$,%A%c%s%/E>Aw$5$l$?>l9g$J$I$K$O!"(B) $B%3%s%F%J$O%j%/%(%9%H$+$i$N(B
$B%G!<%?FI$_9~$_MW5a$r$7$^$9!#%5!<%PB&$O$=$l$KBP$7$F!":G>.(B
<code>request_length</code> $B:GBg(B <code>(8186 (8 Kbytes - 6))</code>
$B$NHO0O$G!"L$E>Aw$G;D$C$F$$$k%j%/%(%9%H%\%G%#$NBg$-$5$N%G!<%?$r(B
$BAw$jJV$7$^$9!#(B<br />
$B%\%G%#$K$=$l0J>e%G!<%?$,;D$C$F$$$J$$>l9g(B ($B$D$^$j%5!<%V%l%C%H$,(B
$B%\%G%#$N:G8e$rD6$($FFI$_9~$b$&$H$7$?>l9g(B) $B!"%5!<%P$O(B
$B%Z%$%m!<%ID9(B 0 $B$N(B<em>$B6u%Q%1%C%H(B</em><code>(0x12,0x34,0x00,0x00)</code>
$B$rAw$jJV$7$^$9!#(B</p>
<p>(ボディのサイズが大きすぎて最初のパケットに収まらない場合や、
リクエストがチャンク転送された場合などには、) コンテナはリクエストからの
データ読み込み要求をします。サーバ側はそれに対して、最小
<code>request_length</code> 最大 <code>(8186 (8 Kbytes - 6))</code>
の範囲で、未転送で残っているリクエストボディの大きさのデータを
送り返します。<br />
ボディにそれ以上データが残っていない場合 (つまりサーブレットが
ボディの最後を超えて読み込もうとした場合) 、サーバは
ペイロード長 0 の<em>空パケット</em><code>(0x12,0x34,0x00,0x00)</code>
を送り返します。</p>
</section>
</section>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 395228:659902 (outdated) -->
@@ -23,66 +23,66 @@
<modulesynopsis metafile="mod_proxy_balancer.xml.meta">
<name>mod_proxy_balancer</name>
<description>$BIi2YJ,;6$N$?$a$N(B <module>mod_proxy</module> $B3HD%(B</description>
<description>負荷分散のための <module>mod_proxy</module> 拡張</description>
<status>Extension</status>
<sourcefile>proxy_balancer.c</sourcefile>
<identifier>proxy_balancer_module</identifier>
<compatibility>2.1 $B0J9_(B</compatibility>
<compatibility>2.1 以降</compatibility>
<summary>
<p>$BK\%b%8%e!<%k$K$O(B <module>mod_proxy</module> $B$,(B<em>$BI,MW$G$9(B</em>$B!#(B
<code>HTTP</code>, <code>FTP</code> $B$H(B <code>AJP13</code>
$B%W%m%H%3%k$N%m!<%I%P%i%s%95!G=$r;}$C$F$$$^$9!#(B</p>
<p>本モジュールには <module>mod_proxy</module> が<em>必要です</em>。
<code>HTTP</code>, <code>FTP</code> <code>AJP13</code>
プロトコルのロードバランス機能を持っています。</p>
<p>$B$G$9$+$i!"(B $B%m!<%I%P%i%s%9$rM-8z$K$9$k>l9g(B <module>mod_proxy</module>
$B$H(B <module>mod_proxy_balancer</module> $B$,%5!<%P$KAH$_9~$^$l$F(B
$B$$$J$1$l$P$$$1$^$;$s!#(B</p>
<p>ですから、 ロードバランスを有効にする場合 <module>mod_proxy</module>
<module>mod_proxy_balancer</module> がサーバに組み込まれて
いなければいけません。</p>
<note type="warning"><title>$B7Y9p(B</title>
<note type="warning"><title>警告</title>
<p><a href="mod_proxy.html#access"
>$B0BA4$J%5!<%P$K$9$k(B</a>$B$^$G%W%m%/%75!G=$OM-8z$K$7$J$$$G$/$@$5$$!#(B
$B%*!<%W%s%W%m%-%7%5!<%P$O$"$J$?<+?H$N%M%C%H%o!<%/$K$H$C$F$b!"(B
$B%$%s%?!<%M%C%HA4BN$K$H$C$F$b4m81$G$9!#(B</p>
>安全なサーバにする</a>までプロクシ機能は有効にしないでください。
オープンプロキシサーバはあなた自身のネットワークにとっても、
インターネット全体にとっても危険です。</p>
</note>
</summary>
<seealso><module>mod_proxy</module></seealso>
<section id="scheduler">
<title>$B%m!<%I%P%i%s%5$N%9%1%8%e!<%i$N%"%k%4%j%:%`(B</title>
<p>$B8=;~E@$G$O(B 2 $B<oN`$N%m!<%I%P%i%s%5%9%1%8%e!<%i%"%k%4%j%:%`$+$iA*$Y$^$9!#(B
$B%j%/%(%9%H2s?t$K$h$k$b$N(B <transnote>Request Counting</transnote>
$B$H!"%H%i%U%#%C%/NL$K$h$k$b$N(B <transnote>Weighted Traffic Counting</transnote>
$B$,$"$j$^$9!#%P%i%s%5$N@_Dj(B <code>lbmethod</code> $BCM$G!"$I$A$i$r;H$&$+;XDj$7$^$9!#(B
$B>\:Y$O(B <directive module="mod_proxy">Proxy</directive> $B%G%#%l%/%F%#%V$r(B
$B;2>H$7$F$/$@$5$$!#(B</p>
<title>ロードバランサのスケジューラのアルゴリズム</title>
<p>現時点では 2 種類のロードバランサスケジューラアルゴリズムから選べます。
リクエスト回数によるもの <transnote>Request Counting</transnote>
と、トラフィック量によるもの <transnote>Weighted Traffic Counting</transnote>
があります。バランサの設定 <code>lbmethod</code> 値で、どちらを使うか指定します。
詳細は <directive module="mod_proxy">Proxy</directive> ディレクティブを
参照してください。</p>
</section>
<section id="requests">
<title>Request Counting $B%"%k%4%j%:%`(B</title>
<p><code>lbmethod=byrequests</code> $B$GM-8z$K$J$j$^$9!#(B
$B$3$N%9%1%8%e!<%i$NGX7J$K$"$k9M$(J}$O!"MM!9$J%o!<%+!<$,$=$l$>$l!"(B
$B@_Dj$5$l$F$$$kJ,C4%j%/%(%9%H?t$r$-$A$s$H<u$1<h$l$k$h$&$K!"(B
$B%j%/%(%9%H$r07$&$H$$$&9M$(J}$G$9!#<!$N$h$&$KF0:n$7$^$9(B:</p>
<title>Request Counting アルゴリズム</title>
<p><code>lbmethod=byrequests</code> で有効になります。
このスケジューラの背景にある考え方は、様々なワーカーがそれぞれ、
設定されている分担リクエスト数をきちんと受け取れるように、
リクエストを扱うという考え方です。次のように動作します:</p>
<p><dfn>lbfactor</dfn> $B$O!"(B<em>$B$I$NDxEY%o!<%+!<$K;E;v$r?6$k$+(B</em>
$B$D$^$j(B<em>$B%o!<%+!<$N%/%*!<%?(B</em>$B$r;X$7$^$9!#$3$NCM$O(B "$BJ,C4(B"
$BNL$rI=$9@55,2=$5$l$?CM$G$9!#(B</p>
<p><dfn>lbfactor</dfn> は、<em>どの程度ワーカーに仕事を振るか</em>
つまり<em>ワーカーのクオータ</em>を指します。この値は "分担"
量を表す正規化された値です。</p>
<p><dfn>lbstatus</dfn> $B$O!"(B<em>$B%o!<%+!<$N%/%*!<%?$rK~$?$9$?$a$K(B
$B$I$N$0$i$$5^$.$GF/$+$J$1$l$P$J$i$J$$$+(B</em>$B$r;X$7$^$9!#(B</p>
<p><dfn>lbstatus</dfn> は、<em>ワーカーのクオータを満たすために
どのぐらい急ぎで働かなければならないか</em>を指します。</p>
<p><dfn>$B%o!<%+!<(B</dfn>$B$O%m!<%I%P%i%s%5$N%a%s%P$G!"DL>o$O!"(B
$B%5%]!<%H$5$l$k%W%m%H%3%k$N$&$A$N0l$D$rDs6!$7$F$$$k%j%b!<%H%[%9%H$G$9!#(B
<p><dfn>ワーカー</dfn>はロードバランサのメンバで、通常は、
サポートされるプロトコルのうちの一つを提供しているリモートホストです。
</p>
<p>$B$^$:8D!9$N%o!<%+!<$K%o!<%+!<%/%*!<%?$r3d$j?6$j!"$I$N%o!<%+!<$,:G$b5^$.$G(B
$BF/$+$J$1$l$P$J$i$J$$$+(B (lbstatus $B$,:GBg$N$b$N(B) $B$rD4$Y$^$9!#(B
$B<!$K;E;v$r$9$k$h$&$K$3$N%o!<%+!<$rA*Br$7!"A*Br$7$?%o!<%+!<$N(B lbstatus
$B$rA4BN$K3d$j?6$C$?$V$s$@$1:9$70z$-$^$9!#$G$9$+$i!"(Blbstatus $B$NAmNL$O(B
$B7k2LE*$KJQ2=$7$^$;$s(B(*)$B$7!"%j%/%(%9%H$O4|BTDL$j$KJ,;6$5$l$^$9!#(B</p>
<p>まず個々のワーカーにワーカークオータを割り振り、どのワーカーが最も急ぎで
働かなければならないか (lbstatus が最大のもの) を調べます。
次に仕事をするようにこのワーカーを選択し、選択したワーカーの lbstatus
を全体に割り振ったぶんだけ差し引きます。ですから、lbstatus の総量は
結果的に変化しません(*)し、リクエストは期待通りに分散されます。</p>
<p>$B$"$k%o!<%+!<$,L58z$K$J$C$F$b!"B>$N$b$N$O@5>o$K%9%1%8%e!<%k$5$lB3$1$^$9!#(B
<p>あるワーカーが無効になっても、他のものは正常にスケジュールされ続けます。
</p>
<example><pre><code>for each worker in workers
@@ -94,7 +94,7 @@
candidate lbstatus -= total factor</code></pre>
</example>
<p>$B%P%i%s%5$r<!$N$h$&$K@_Dj$7$?>l9g(B:</p>
<p>バランサを次のように設定した場合:</p>
<table style="data">
<tr><th>worker</th>
@@ -114,8 +114,8 @@ candidate lbstatus -= total factor</code></pre>
<td>0</td></tr>
</table>
<p>$B$=$7$F(B <var>b</var> $B$,L58z$K$J$C$?>l9g!"<!$N$h$&$J%9%1%8%e!<%k$,(B
$B9T$o$l$^$9!#(B</p>
<p>そして <var>b</var> が無効になった場合、次のようなスケジュールが
行われます。</p>
<table style="data">
<tr><th>worker</th>
@@ -141,9 +141,9 @@ candidate lbstatus -= total factor</code></pre>
<tr><td colspan="5">(repeat)</td></tr>
</table>
<p>$B$D$^$j$3$N$h$&$K%9%1%8%e!<%k$5$l$^$9(B: <var>a</var> <var>c</var>
<p>つまりこのようにスケジュールされます: <var>a</var> <var>c</var>
<var>d</var> <var>a</var> <var>c</var> <var>d</var> <var>a</var>
<var>c</var> <var>d</var> ... $B<!$NE@$KCm0U$7$F$/$@$5$$(B:</p>
<var>c</var> <var>d</var> ... 次の点に注意してください:</p>
<table style="data">
<tr><th>worker</th>
@@ -158,7 +158,7 @@ candidate lbstatus -= total factor</code></pre>
<td>25</td></tr>
</table>
<p>$B$3$N5sF0$O!"<!$N@_Dj$HA4$/F1$8$K$J$j$^$9(B:</p>
<p>この挙動は、次の設定と全く同じになります:</p>
<table style="data">
<tr><th>worker</th>
@@ -175,8 +175,8 @@ candidate lbstatus -= total factor</code></pre>
<p>This is because all values of <dfn>lbfactor</dfn> are normalized
with respect to the others. For:</p>
<p><dfn>lbfactor</dfn> $B$OA4$F@55,2=$5$l$?$b$N$G!"(B
$BB>$H$NAjBPCM$@$+$i$G$9!#<!$N@_Dj$G$O(B:</p>
<p><dfn>lbfactor</dfn> は全て正規化されたもので、
他との相対値だからです。次の設定では:</p>
<table style="data">
<tr><th>worker</th>
@@ -189,10 +189,10 @@ candidate lbstatus -= total factor</code></pre>
<td>1</td></tr>
</table>
<p>$B%o!<%+!<(B <var>b</var> $B$O!"J?6Q$7$F!"(B<var>a</var> $B$H(B <var>c</var>
$B$N(B 4 $BG\$N?t$N%j%/%(%9%H$r<u$1;}$D$3$H$K$J$j$^$9!#(B</p>
<p>ワーカー <var>b</var> は、平均して、<var>a</var> <var>c</var>
の 4 倍の数のリクエストを受け持つことになります。</p>
<p>$B<!$N$h$&$JHsBP>N$J@_Dj$G$O!"$3$&$J$k$HM=A[$5$l$k$G$7$g$&(B:</p>
<p>次のような非対称な設定では、こうなると予想されるでしょう:</p>
<table style="data">
<tr><th>worker</th>
@@ -235,23 +235,23 @@ candidate lbstatus -= total factor</code></pre>
<tr><td colspan="3">(repeat)</td></tr>
</table>
<p>$B%9%1%8%e!<%k$O(B 10 $B%9%1%8%e!<%k8e$K7+$jJV$5$l!"(B<var>a</var> 7 $B2s$H(B
<var>b</var> 3 $B2s$G$^$P$i$KA*$P$l$^$9!#(B</p>
<p>スケジュールは 10 スケジュール後に繰り返され、<var>a</var> 7 回と
<var>b</var> 3 回でまばらに選ばれます。</p>
</section>
<section id="traffic">
<title>Weighted Traffic Counting $B%"%k%4%j%:%`(B</title>
<p><code>lbmethod=bytraffic</code> $B$GM-8z$K$J$j$^$9!#(B
$B$3$N%9%1%8%e!<%i$NGX7J$K$"$k9M$(J}$O!"(BRequest Counting
$B$HHs>o$K;w$F$$$^$9$,!"<!$N0c$$$,$"$j$^$9(B:</p>
<title>Weighted Traffic Counting アルゴリズム</title>
<p><code>lbmethod=bytraffic</code> で有効になります。
このスケジューラの背景にある考え方は、Request Counting
と非常に似ていますが、次の違いがあります:</p>
<p><dfn>lbfactor</dfn> $B$O(B <em>$B$I$l$@$1$N%P%$%H?t$N%H%i%U%#%C%/NL$r!"(B
$B$3$N%o!<%+!<$K=hM}$7$F$b$i$$$?$$$+(B</em> $B$rI=$7$^$9!#(B
$B$3$NCM$bF1MM$K@55,2=$5$l$?CM$G!"%o!<%+!<A4BN$N$&$A$G$N(B "$BJ,C4(B"
$BNL$rI=8=$7$F$$$^$9!#%j%/%(%9%H?t$rC1=c$K?t$($kBe$o$j$K!"(B
$B$I$l$@$1$NE>AwNL$r=hM}$7$?$+$r?t$($^$9!#(B</p>
<p><dfn>lbfactor</dfn> は <em>どれだけのバイト数のトラフィック量を、
このワーカーに処理してもらいたいか</em> を表します。
この値も同様に正規化された値で、ワーカー全体のうちでの "分担"
量を表現しています。リクエスト数を単純に数える代わりに、
どれだけの転送量を処理したかを数えます。</p>
<p>$B<!$N$h$&$K%P%i%s%5$r@_Dj$7$?>l9g(B:</p>
<p>次のようにバランサを設定した場合:</p>
<table style="data">
<tr><th>worker</th>
@@ -264,31 +264,31 @@ candidate lbstatus -= total factor</code></pre>
<td>1</td></tr>
</table>
<p><var>b</var> $B$K$O(B <var>a</var> $B$d(B <var>c</var> $B$N(B 2 $BG\(B
$B=hM}$7$F$[$7$$$H$$$&$3$H$K$J$j$^$9!#(B
<var>b</var> $B$O(B 2 $BG\$N(B I/O $B$r=hM}$9$k$H$$$&0UL#$K$J$j!"(B
2 $BG\$N%j%/%(%9%H?t$r=hM}$9$k$H$$$&$3$H$K$O$J$j$^$;$s!#(B
$B$G$9$+$i%j%/%(%9%H$H%l%9%]%s%9$N%5%$%:$,!"(B
$B=E$_IU$1$H?6$jJ,$1$N%"%k%4%j%:%`$K8z$$$F$$$^$9!#(B</p>
<p><var>b</var> には <var>a</var> <var>c</var> の 2 倍
処理してほしいということになります。
<var>b</var> は 2 倍の I/O を処理するという意味になり、
2 倍のリクエスト数を処理するということにはなりません。
ですからリクエストとレスポンスのサイズが、
重み付けと振り分けのアルゴリズムに効いています。</p>
</section>
<section id="enable">
<title>$B%P%i%s%5%^%M!<%8%c$N%5%]!<%H$rM-8z$K$9$k(B</title>
<p>$B$3$N%b%8%e!<%k$O(B <module>mod_status</module> $B$N%5!<%S%9$r(B
<em>$BI,MW$H$7$^$9(B</em>$B!#(B
$B%P%i%s%5%^%M!<%8%c$r;H$&$H!"%P%i%s%5$N%a%s%P!<$NF0E*$J99?7$,(B
$B$G$-$^$9!#%P%i%s%5%^%M!<%8%c$r;H$C$F!"%P%i%s%978?t(B (lbfactor)
$B$rJQ99$7$?$j!"%a%s%P!<$rJQ99$7$?$j!"FCDj$N%a%s%P!<$r(B
$B%*%U%i%$%s%b!<%I$K$7$?$j$G$-$^$9!#(B</p>
<title>バランサマネージャのサポートを有効にする</title>
<p>このモジュールは <module>mod_status</module> のサービスを
<em>必要とします</em>。
バランサマネージャを使うと、バランサのメンバーの動的な更新が
できます。バランサマネージャを使って、バランス係数 (lbfactor)
を変更したり、メンバーを変更したり、特定のメンバーを
オフラインモードにしたりできます。</p>
<p>$B$G$9$+$i!"%m!<%I%P%i%s%54IM}5!G=$r;H$$$?$1$l$P!"(B
<module>mod_status</module> $B$H(B <module>mod_proxy_balancer</module>
$B$r%5!<%P$KAH$_9~$^$J$1$l$P$J$j$^$;$s!#(B</p>
<p>ですから、ロードバランサ管理機能を使いたければ、
<module>mod_status</module> <module>mod_proxy_balancer</module>
をサーバに組み込まなければなりません。</p>
<p>foo.com $B%I%a%$%s$N%V%i%&%6$+$i%m!<%I%P%i%s%54IM}5!G=$r(B
$B;H$($k$h$&$K$9$k$K$O!"<!$N$h$&$J%3!<%I$r(B <code>httpd.conf</code>
$B$KDI2C$7$^$9!#(B</p>
<p>foo.com ドメインのブラウザからロードバランサ管理機能を
使えるようにするには、次のようなコードを <code>httpd.conf</code>
に追加します。</p>
<example>
&lt;Location /balancer-manager&gt;<br />
SetHandler balancer-manager<br />
@@ -299,9 +299,9 @@ candidate lbstatus -= total factor</code></pre>
&lt;/Location&gt;
</example>
<p>$B$3$&$9$k$H!"(B<code>http://your.server.name/balancer-manager</code>
$B$N%Z!<%87PM3$G!"%&%'%V%V%i%&%6$+$i%m!<%I%P%i%s%5%^%M!<%8%c$K(B
$B%"%/%;%9$G$-$k$h$&$K$J$j$^$9!#(B</p>
<p>こうすると、<code>http://your.server.name/balancer-manager</code>
のページ経由で、ウェブブラウザからロードバランサマネージャに
アクセスできるようになります。</p>
</section>
</modulesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -23,27 +23,27 @@
<modulesynopsis metafile="mod_proxy_connect.xml.meta">
<name>mod_proxy_connect</name>
<description><code>CONNECT</code> $B%j%/%(%9%H$r07$&(B
<module>mod_proxy</module> $BMQ$N3HD%(B</description>
<description><code>CONNECT</code> リクエストを扱う
<module>mod_proxy</module> 用の拡張</description>
<status>Extension</status>
<sourcefile>proxy_connect.c</sourcefile>
<identifier>proxy_connect_module</identifier>
<summary>
<p>$BK\%b%8%e!<%k$K$O(B <module>mod_proxy</module> $B$,(B<em>$BI,MW$G$9(B</em>$B!#(B
<code>CONNECT</code> HTTP $B%a%=%C%I$r%5%]!<%H$7$^$9!#(B
$B$3$N%a%=%C%I$O<g$K%W%m%-%7$K(B SSL $B%j%/%(%9%H$rDL$9(B
<transnote>SSL$B%H%s%M%j%s%0(B</transnote>$B$K;H$o$l$^$9!#(B</p>
<p>本モジュールには <module>mod_proxy</module> が<em>必要です</em>。
<code>CONNECT</code> HTTP メソッドをサポートします。
このメソッドは主にプロキシに SSL リクエストを通す
<transnote>SSLトンネリング</transnote>に使われます。</p>
<p><code>CONNECT</code> $B%j%/%(%9%H$r07$($k$h$&$K$9$k$K$O(B
<module>mod_proxy</module> $B$H(B <module>mod_proxy_connect</module>
$B$r%5!<%P$KAH$_9~$`I,MW$,$"$j$^$9!#(B</p>
<p><code>CONNECT</code> リクエストを扱えるようにするには
<module>mod_proxy</module> <module>mod_proxy_connect</module>
をサーバに組み込む必要があります。</p>
<note type="warning"><title>$B7Y9p(B</title>
<note type="warning"><title>警告</title>
<p><a href="mod_proxy.html#access"
>$B0BA4$J%5!<%P$K$9$k(B</a>$B$^$G%W%m%-%75!G=$OM-8z$K$7$J$$$G$/$@$5$$!#(B
$B%*!<%W%s%W%m%-%7%5!<%P$O$"$J$?<+?H$N%M%C%H%o!<%/$K$H$C$F$b!"(B
$B%$%s%?!<%M%C%HA4BN$K$H$C$F$b4m81$G$9!#(B</p>
>安全なサーバにする</a>までプロキシ機能は有効にしないでください。
オープンプロキシサーバはあなた自身のネットワークにとっても、
インターネット全体にとっても危険です。</p>
</note>
</summary>
<seealso><directive module="mod_proxy">AllowCONNECT</directive></seealso>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:658546 (outdated) -->
@@ -23,34 +23,34 @@
<modulesynopsis metafile="mod_setenvif.xml.meta">
<name>mod_setenvif</name>
<description>$B%j%/%(%9%H$NFCD'$K4p$E$$$?4D6-JQ?t$N@_Dj$r2DG=$K$9$k(B</description>
<description>リクエストの特徴に基づいた環境変数の設定を可能にする</description>
<status>Base</status>
<sourcefile>mod_setenvif.c</sourcefile>
<identifier>setenvif_module</identifier>
<summary>
<p><module>mod_setenvif</module>
$B%b%8%e!<%k$O!"%j%/%(%9%H$N$"$kB&LL$,;XDj$5$l$?@55,I=8=(B
$B$K9g$&$+$I$&$+$K$h$C$F4D6-JQ?t$r@_Dj$9$k5!G=$rDs6!$7$^$9!#(B
$B$3$l$i$N4D6-JQ?t$r;HMQ$7$F!"%5!<%P$NB>$NItJ,$,$I$N$h$&$JF0:n$r$9$k$+$r(B
$B7hDj$9$k$3$H$,$G$-$^$9!#(B</p>
モジュールは、リクエストのある側面が指定された正規表現
に合うかどうかによって環境変数を設定する機能を提供します。
これらの環境変数を使用して、サーバの他の部分がどのような動作をするかを
決定することができます。</p>
<p>$B$3$N%b%8%e!<%k$,Ds6!$9$k%G%#%l%/%F%#%V$O!"(B
$B@_Dj%U%!%$%k$K8=$l$k=gHV$KE,MQ$5$l$^$9!#(B
$B$=$l$r;H$C$F!"<!$NNc$N$h$&$K$h$jJ#;($J@_Dj$r$9$k$3$H$,$G$-$^$9!#(B
$B$3$l$O!"%V%i%&%6$,(B mozilla $B$G$O$"$k$1$l$I!"(BMSIE $B$G$O$J$$$H$-$K(B
<code>netscape</code> $B$r@_Dj$7$^$9!#(B</p>
<p>このモジュールが提供するディレクティブは、
設定ファイルに現れる順番に適用されます。
それを使って、次の例のようにより複雑な設定をすることができます。
これは、ブラウザが mozilla ではあるけれど、MSIE ではないときに
<code>netscape</code> を設定します。</p>
<example>
BrowserMatch ^Mozilla netscape<br />
BrowserMatch MSIE !netscape<br />
</example>
</summary>
<seealso><a href="../env.html">Apache $B$N4D6-JQ?t(B</a></seealso>
<seealso><a href="../env.html">Apache の環境変数</a></seealso>
<directivesynopsis>
<name>BrowserMatch</name>
<description>HTTP User-Agent $B$K4p$E$$$F4D6-JQ?t$r@_Dj$9$k(B
<description>HTTP User-Agent に基づいて環境変数を設定する
</description>
<syntax>BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
[[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
@@ -60,17 +60,17 @@
<override>FileInfo</override>
<usage>
<p><directive>BrowserMatch</directive> $B$O(B
<directive module="mod_setenvif">SetEnvIf</directive> $B%G%#%l%/%F%#%V$N(B
$BFCNc$G!"(B<code>User-Agent</code> HTTP $B%j%/%(%9%H%X%C%@$K4p$E$$$F(B
$B4D6-JQ?t$r@_Dj$7$^$9!#0J2<$N(B 2 $B9T$N8z2L$OF1$8$K$J$j$^$9(B:</p>
<p><directive>BrowserMatch</directive>
<directive module="mod_setenvif">SetEnvIf</directive> ディレクティブの
特例で、<code>User-Agent</code> HTTP リクエストヘッダに基づいて
環境変数を設定します。以下の 2 行の効果は同じになります:</p>
<example>
BrowserMatchNoCase Robot is_a_robot<br />
SetEnvIfNoCase User-Agent Robot is_a_robot<br />
</example>
<p>$B$=$NB>$NNc(B:</p>
<p>その他の例:</p>
<example>
BrowserMatch ^Mozilla forms jpeg=yes browser=netscape<br />
BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript<br />
@@ -81,37 +81,37 @@
<directivesynopsis>
<name>BrowserMatchNoCase</name>
<description>HTTP User-Agent $B$K4p$E$$$FBgJ8;z>.J8;z$r6hJL$;$:$K(B
$B4D6-JQ?t$r@_Dj$9$k(B</description>
<description>HTTP User-Agent に基づいて大文字小文字を区別せずに
環境変数を設定する</description>
<syntax>BrowserMatchNoCase <em>regex [!]env-variable</em>[=<em>value</em>]
[[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
<context>.htaccess</context></contextlist>
<override>FileInfo</override>
<compatibility>Apache 1.2 $B0J9_(B
(Apache 1.2 $B$G$O$3$N%G%#%l%/%F%#%V$O$b$&MQ$$$i$l$F$$$J$$(B
mod_browser $B%b%8%e!<%k$K$"$j$^$7$?(B)</compatibility>
<compatibility>Apache 1.2 以降
(Apache 1.2 ではこのディレクティブはもう用いられていない
mod_browser モジュールにありました)</compatibility>
<usage>
<p><directive>BrowserMatchNoCase</directive> $B%G%#%l%/%F%#%V$O(B
$B0UL#E*$K$O(B <directive
module="mod_setenvif">BrowserMatch</directive> $B%G%#%l%/%F%#%V$H(B
$BF1$8$G$9!#$?$@$7!"$3$N%G%#%l%/%F%#%V$OBgJ8;z>.J8;z$r6hJL$7$J$$(B
$B%^%C%A%s%0$r9T$J$$$^$9!#Nc$($P(B:</p>
<p><directive>BrowserMatchNoCase</directive> ディレクティブは
意味的には <directive
module="mod_setenvif">BrowserMatch</directive> ディレクティブと
同じです。ただし、このディレクティブは大文字小文字を区別しない
マッチングを行ないます。例えば:</p>
<example>
BrowserMatchNoCase mac platform=macintosh<br />
BrowserMatchNoCase win platform=windows<br />
</example>
<p><directive>BrowserMatch</directive> $B%G%#%l%/%F%#%V$H(B
<directive>BrowserMatchNoCase</directive> $B%G%#%l%/%F%#%V$O(B
<directive module="mod_setenvif">SetEnvIf</directive> $B%G%#%l%/%F%#%V$H(B
<p><directive>BrowserMatch</directive> ディレクティブと
<directive>BrowserMatchNoCase</directive> ディレクティブは
<directive module="mod_setenvif">SetEnvIf</directive> ディレクティブと
<directive
module="mod_setenvif">SetEnvIfNoCase</directive> $B%G%#%l%/%F%#%V$N(B
$BFCNc$G$9!#0J2<$N(B 2 $B9T$N8z2L$OF1$8$G$9(B:</p>
module="mod_setenvif">SetEnvIfNoCase</directive> ディレクティブの
特例です。以下の 2 行の効果は同じです:</p>
<example>
BrowserMatchNoCase Robot is_a_robot<br />
@@ -122,7 +122,7 @@
<directivesynopsis>
<name>SetEnvIf</name>
<description>$B%j%/%(%9%H$NB0@-$K4p$E$$$F4D6-JQ?t$r@_Dj$9$k(B
<description>リクエストの属性に基づいて環境変数を設定する
</description>
<syntax>SetEnvIf <em>attribute
regex [!]env-variable</em>[=<em>value</em>]
@@ -134,60 +134,60 @@
<usage>
<p><directive>SetEnvIf</directive>
$B%G%#%l%/%F%#%V$O!"%j%/%(%9%H$NB0@-$K4p$E$$$F4D6-JQ?t$rDj5A$7$^$9!#(B
$B:G=i$N0z?t$G;XDj$G$-$k(B <em>attribute</em> $B$O0J2<$N;0$D$N$I$l$+$G$9(B:</p>
ディレクティブは、リクエストの属性に基づいて環境変数を定義します。
最初の引数で指定できる <em>attribute</em> は以下の三つのどれかです:</p>
<ol>
<li>HTTP $B%j%/%(%9%H%X%C%@%U%#!<%k%I(B ($B>\$7$$>pJs$O(B <a
href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC 2616</a> $B$r(B
$B;2>H$7$F$/$@$5$$(B)$B!#Nc$($P!"(B<code>Host</code>,
<li>HTTP リクエストヘッダフィールド (詳しい情報は <a
href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC 2616</a>
参照してください)。例えば、<code>Host</code>,
<code>User-Agent</code>, <code>Referer</code>,
<code>Accept-Language</code> $B$G$9!#%j%/%(%9%H%X%C%@$N=89g$r8=$9$?$a$K(B
$B@55,I=8=$r;H$&$3$H$b$G$-$^$9!#(B</li>
<code>Accept-Language</code> です。リクエストヘッダの集合を現すために
正規表現を使うこともできます。</li>
<li>$B0J2<$N%j%/%(%9%H$N0lItJ,$N$I$l$+(B:
<li>以下のリクエストの一部分のどれか:
<ul>
<li><code>Remote_Host</code> -
$B%j%/%(%9%H$r9T$J$C$F$$$k%/%i%$%"%s%H$N%[%9%HL>(B ($B$b$7$"$l$P(B)</li>
リクエストを行なっているクライアントのホスト名 (もしあれば)</li>
<li><code>Remote_Addr</code> -
$B%j%/%(%9%H$r9T$J$C$F$$$k%/%i%$%"%s%H$N(B IP $B%"%I%l%9(B</li>
リクエストを行なっているクライアントの IP アドレス</li>
<li><code>Server_Addr</code> -
$B%j%/%(%9%H$r<u$1<h$C$?%5!<%P$N(B IP $B%"%I%l%9(B
(2.0.43 $B0J9_$N$_(B)</li>
リクエストを受け取ったサーバの IP アドレス
(2.0.43 以降のみ)</li>
<li><code>Request_Method</code> -
$B;HMQ$5$l$F$$$k%a%=%C%IL>(B (<code>GET</code>, <code>POST</code>
<em>$B$J$I(B</em>)</li>
使用されているメソッド名 (<code>GET</code>, <code>POST</code>
<em>など</em>)</li>
<li><code>Request_Protocol</code> -
$B%j%/%(%9%H$,9T$J$o$l$?%W%m%H%3%k$NL>A0$H%P!<%8%g%s(B
(<em>$BNc$($P(B</em>$B!"(B"HTTP/0.9", "HTTP/1.1" <em>$B$J$I!#(B</em>)</li>
リクエストが行なわれたプロトコルの名前とバージョン
(<em>例えば</em>、"HTTP/0.9", "HTTP/1.1" <em>など。</em>)</li>
<li><code>Request_URI</code> -
URL $B$N%9%-!<%`$H%[%9%H$N8e$NItJ,(B</li>
URL のスキームとホストの後の部分</li>
</ul>
</li>
<li>$B%j%/%(%9%H$H4XO"IU$1$i$l$k4D6-JQ?t$N%j%9%H!#$3$l$K$h$j(B
<directive>SetEnvIf</directive> $B%G%#%l%/%F%#%V$,0JA0$N%^%C%A$N7k2L$r(B
$B;H$&$3$H$,$G$-$k$h$&$K$J$j$^$9!#$3$NJ}K!$N%F%9%H$G$OA0$NItJ,$K$"$k(B
<code>SetEnvIf[NoCase]</code> $B$N7k2L$N$_$r;HMQ2DG=$G$9!#!VA0!W$H$O!"(B
$B$h$j9-$$HO0O$KBP$7$FDj5A$5$l$F$$$k(B ($B%5!<%PA4BN$N$h$&$K(B) $B$+!"8=:_$N%G%#%l%/%F%#%V$N(B
$BHO0O$G$h$jA0$NItJ,$GDj5A$5$l$F$$$k$+!"$H$$$&$3$H$G$9!#(B
$B4D6-JQ?t$G$"$k2DG=@-$O!"%j%/%(%9%H$NFC@-$KBP$9$k%^%C%A$,B8:_$;$:!"(B
<em>attribute</em> $B$K@55,I=8=$,;H$o$l$J$+$C$?$H$-$K$N$_9MN8$5$l$^$9!#(B</li>
<li>リクエストと関連付けられる環境変数のリスト。これにより
<directive>SetEnvIf</directive> ディレクティブが以前のマッチの結果を
使うことができるようになります。この方法のテストでは前の部分にある
<code>SetEnvIf[NoCase]</code> の結果のみを使用可能です。「前」とは、
より広い範囲に対して定義されている (サーバ全体のように) か、現在のディレクティブの
範囲でより前の部分で定義されているか、ということです。
環境変数である可能性は、リクエストの特性に対するマッチが存在せず、
<em>attribute</em> に正規表現が使われなかったときにのみ考慮されます。</li>
</ol>
<p>$BFs$DL\$N0z?t(B (<em>regex</em>) $B$O(B <a
href="http://www.pcre.org/">Perl $B8_49$N@55,I=8=(B</a>$B$G$9!#(B
$B$3$l$O(B POSIX.2 $B$N(B egrep $B7A<0$N@55,I=8=$H;w$F$$$^$9!#(B<em>regex</em> $B$,(B
<em>attribute</em> $B$K%^%C%A$9$k>l9g$O!";D$j$N0z?t$,I>2A$5$l$^$9!#(B</p>
<p>二つ目の引数 (<em>regex</em>) <a
href="http://www.pcre.org/">Perl 互換の正規表現</a>です。
これは POSIX.2 の egrep 形式の正規表現と似ています。<em>regex</em>
<em>attribute</em> にマッチする場合は、残りの引数が評価されます。</p>
<p>$B;D$j$N0z?t$O@_Dj$9$kJQ?t$NL>A0$G!"@_Dj$5$l$kCM$r;XDj$9$k$3$H$b$G$-$^$9!#(B
$B$3$l$O!"(B</p>
<p>残りの引数は設定する変数の名前で、設定される値を指定することもできます。
これは、</p>
<ol>
<li><code><em>varname</em></code></li>
@@ -197,17 +197,17 @@ href="http://www.pcre.org/">Perl $B8_49$N@55,I=8=(B</a>$B$G$9!#(B
<li><code><em>varname</em>=<em>value</em></code></li>
</ol>
<p>$B$N$I$l$+$N7A<0$K$J$j$^$9!#(B</p>
<p>のどれかの形式になります。</p>
<p>$B:G=i$N7A<0$G$O!"CM$O(B "1" $B$K@_Dj$5$l$^$9!#(B
$BFs$DL\$O$b$7CM$,Dj5A$5$l$F$$$l$P$=$l$r<h$j=|$-$^$9!#(B
$B;0$DL\$OJQ?t$r(B <code><em>value</em></code> $B$NM?$($i$l$?CM$K@_Dj$7$^$9!#(B
2.0.51 $B0J9_$G$O!"(B<var>regex</var> $BFb$K(B <code>$1</code>..<code>$9</code>
$B$,B8:_$9$l$P$=$l$rG'<1$7!"(B<var>regex</var> $B$NBP1~$9$k4]3g8L$G0O$^$l$?ItJ,$G(B
$BCV49$7$^$9!#(B</p>
<p>最初の形式では、値は "1" に設定されます。
二つ目はもし値が定義されていればそれを取り除きます。
三つ目は変数を <code><em>value</em></code> の与えられた値に設定します。
2.0.51 以降では、<var>regex</var> 内に <code>$1</code>..<code>$9</code>
が存在すればそれを認識し、<var>regex</var> の対応する丸括弧で囲まれた部分で
置換します。</p>
<example>
<title>$BNc(B:</title>
<title>:</title>
SetEnvIf Request_URI "\.gif$" object_is_image=gif<br />
SetEnvIf Request_URI "\.jpg$" object_is_image=jpg<br />
SetEnvIf Request_URI "\.xbm$" object_is_image=xbm<br />
@@ -219,22 +219,22 @@ href="http://www.pcre.org/">Perl $B8_49$N@55,I=8=(B</a>$B$G$9!#(B
SetEnvIf ^TS* ^[a-z].* HAVE_TS<br />
</example>
<p>$B=i$a$N;0$D$O%j%/%(%9%H$,2hA|$G$"$k$H$-$K4D6-JQ?t(B
<code>object_is_image</code> $B$r@_Dj$7$^$9!#;M$DL\$O(B
$B;2>H85$N%Z!<%8$,%&%'%V%5%$%H(B <code>www.mydomain.com</code> $B$K$"$k$H$-$K(B
<code>intra_site_referral</code> $B$r@_Dj$7$^$9!#(B</p>
<p>初めの三つはリクエストが画像であるときに環境変数
<code>object_is_image</code> を設定します。四つ目は
参照元のページがウェブサイト <code>www.mydomain.com</code> にあるときに
<code>intra_site_referral</code> を設定します。</p>
<p>$B:G8e$NNc$O!"%j%/%(%9%H$K(B "TS" $B$G;O$^$j!"CM$,=89g(B [a-z] $B$N$I$l$+$G(B
$B;O$^$k%X%C%@$,$"$k$H$-$K(B <code>HAVE_TS</code> $B$r@_Dj$7$^$9!#(B</p>
<p>最後の例は、リクエストに "TS" で始まり、値が集合 [a-z] のどれかで
始まるヘッダがあるときに <code>HAVE_TS</code> を設定します。</p>
</usage>
<seealso>$BB>$NNc$O!"(B<a href="../env.html">Apache $B$N4D6-JQ?t(B</a>
<seealso>他の例は、<a href="../env.html">Apache の環境変数</a>
</seealso>
</directivesynopsis>
<directivesynopsis>
<name>SetEnvIfNoCase</name>
<description>$B%j%/%(%9%H$NB0@-$K4p$E$$$FBgJ8;z>.J8;z$r6hJL$;$:$K4D6-JQ?t$r@_Dj$9$k(B</description>
<description>リクエストの属性に基づいて大文字小文字を区別せずに環境変数を設定する</description>
<syntax>SetEnvIfNoCase <em>attribute regex
[!]env-variable</em>[=<em>value</em>]
[[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
@@ -242,23 +242,23 @@ href="http://www.pcre.org/">Perl $B8_49$N@55,I=8=(B</a>$B$G$9!#(B
<context>virtual host</context><context>directory</context>
<context>.htaccess</context></contextlist>
<override>FileInfo</override>
<compatibility>Apache 1.3 $B0J9_(B</compatibility>
<compatibility>Apache 1.3 以降</compatibility>
<usage>
<p><directive>SetEnvIfNoCase</directive> $B$O0UL#E*$K$O(B
<directive module="mod_setenvif">SetEnvIf</directive> $B%G%#%l%/%F%#%V$H(B
$BF1$8$G$9!#0c$$$O!"@55,I=8=$N%^%C%A%s%0$,BgJ8;z>.J8;z$r6hJL$7$J$$$G(B
$B9T$J$o$l$k$3$H$G$9!#Nc$($P(B:</p>
<p><directive>SetEnvIfNoCase</directive> は意味的には
<directive module="mod_setenvif">SetEnvIf</directive> ディレクティブと
同じです。違いは、正規表現のマッチングが大文字小文字を区別しないで
行なわれることです。例えば:</p>
<example>
SetEnvIfNoCase Host Apache\.Org site=apache
</example>
<p>$B$3$l$O(B HTTP $B%j%/%(%9%H%X%C%@$K%U%#!<%k%I(B <code>Host:</code> $B$,(B
$B$"$j!"$=$NCM$,(B <code>Apache.Org</code> $B$d(B <code>apache.org</code>$B!"(B
$B$=$NB>$NBgJ8;z>.J8;z$NAH$_9g$o$;$G$"$C$?$H$-$K(B <code>site</code>
$B4D6-JQ?t$r(B "<code>apache</code>" $B$K@_Dj$7$^$9!#(B</p>
<p>これは HTTP リクエストヘッダにフィールド <code>Host:</code>
あり、その値が <code>Apache.Org</code> <code>apache.org</code>
その他の大文字小文字の組み合わせであったときに <code>site</code>
環境変数を "<code>apache</code>" に設定します。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -23,107 +23,107 @@
<modulesynopsis metafile="mod_so.xml.meta">
<name>mod_so</name>
<description>$B5/F0;~$d:F5/F0;~$K<B9T%3!<%I$H%b%8%e!<%k$r%5!<%P$K%m!<%I$9$k(B
<description>起動時や再起動時に実行コードとモジュールをサーバにロードする
</description>
<status>Extension</status>
<sourcefile>mod_so.c</sourcefile>
<identifier>so_module</identifier>
<compatibility>$B$3$N%b%8%e!<%k$O(B Window $B$G$O(B ($B>o$K4^$^$l$F$$$k(B) Base
$B%b%8%e!<%k$G$9(B</compatibility>
<compatibility>このモジュールは Window では (常に含まれている) Base
モジュールです</compatibility>
<summary>
<p>$B$$$/$D$+$N%*%Z%l!<%F%#%s%0%7%9%F%`$G$O!"%5!<%P$N:F%3%s%Q%$%k$r$9$kBe$o$j$K!"(B
$B$3$N%b%8%e!<%k$r;HMQ$7$F(B
<a href="../dso.html">$BF0E*6&M-%*%V%8%'%/%H(B</a>
(DSO) $B5!9=$K$h$j!"<B9T;~$K(B Apache $B$K%b%8%e!<%k$rFI$_9~$^$;$k$3$H$,(B
$B$G$-$^$9!#(B</p>
<p>いくつかのオペレーティングシステムでは、サーバの再コンパイルをする代わりに、
このモジュールを使用して
<a href="../dso.html">動的共有オブジェクト</a>
(DSO) 機構により、実行時に Apache にモジュールを読み込ませることが
できます。</p>
<p>Unix $B>e$G$O!"FI$_9~$^$l$k%3!<%I$ODL>o$O6&M-%*%V%8%'%/%H%U%!%$%k(B
($BIaDL(B <code>.so</code> $B$H$$$&3HD%;R$,IU$$$F$$$^$9(B) $B$+$i$G$9!#(B
Windows $B>e$G$O$3$N%b%8%e!<%k$N3HD%;R$O(B <code>.so</code> $B$+(B <code>.dll</code>
$B$G$9!#(B</p>
<p>Unix 上では、読み込まれるコードは通常は共有オブジェクトファイル
(普通 <code>.so</code> という拡張子が付いています) からです。
Windows 上ではこのモジュールの拡張子は <code>.so</code> <code>.dll</code>
です。</p>
<note type="warning"><title>$B7Y9p(B</title>
<p>Apache 1.3 $B$N%b%8%e!<%k$rD>@\(B Apache 2.0 $B$G;H$&$3$H$O$G$-$^$;$s(B
$B!=(B $B%b%8%e!<%k$O(B Apache 2.0 $BMQ$KF0E*$K%m!<%I$5$l$k$+!"(B
$BD>@\AH$_9~$^$l$k$?$a$K=$@5$5$l$J$1$l$P$J$j$^$;$s!#(B</p>
<note type="warning"><title>警告</title>
<p>Apache 1.3 のモジュールを直接 Apache 2.0 で使うことはできません
― モジュールは Apache 2.0 用に動的にロードされるか、
直接組み込まれるために修正されなければなりません。</p>
</note>
</summary>
<section><title>Windows $BMQ$N%m!<%I2DG=$J%b%8%e!<%k$r:n@.$9$k(B</title>
<section><title>Windows 用のロード可能なモジュールを作成する</title>
<note><title>$BCm(B</title>
<p>Apache 1.3.15 $B$H(B 2.0 $B$H$G(B Windows $B$N%b%8%e!<%kL>$N7A<0$OJQ99$5$l$^$7$?(B
$B!=(B $B%b%8%e!<%k$O(B mod_foo.so $B$H$$$&L>A0$K$J$j$^$7$?!#(B</p>
<note><title></title>
<p>Apache 1.3.15 と 2.0 とで Windows のモジュール名の形式は変更されました
― モジュールは mod_foo.so という名前になりました。</p>
<p>$B$^$@(B mod_so $B$G(B ApacheModuleFoo.dll $B$H$$$&L>A0$N%b%8%e!<%k$b(B
$B%m!<%I$5$l$^$9$,!"?7$7$$L>A0$NIU$1J}$r;H$&J}$,9%$^$l$^$9!#%b%8%e!<%k$r(B
2.0 $BMQ$K0\?"$7$F$$$k$N$G$"$l$P!"(B2.0 $B$N=,47$K9g$&$h$&$KL>A0$r(B
$B=$@5$7$F$/$@$5$$!#(B</p></note>
<p>まだ mod_so で ApacheModuleFoo.dll という名前のモジュールも
ロードされますが、新しい名前の付け方を使う方が好まれます。モジュールを
2.0 用に移植しているのであれば、2.0 の習慣に合うように名前を
修正してください。</p></note>
<p>Apache $B$N%b%8%e!<%k(B API $B$O(B UNIX $B$H(B Windows $B4V$G$OJQ99$5$l$F$$$^$;$s!#(B
$BB?$/$N%b%8%e!<%k$OA4$/JQ99$J$7!"$b$7$/$O4JC1$JJQ99$K$h$j(B Windows
$B$G<B9T$G$-$k$h$&$K$J$j$^$9!#$?$@$7!"$=$l0J30$N(B Windows $B$K$OL5$$(B Unix
$B%"!<%-%F%/%A%c!<$N5!G=$K0MB8$7$?%b%8%e!<%k$OF0:n$7$^$;$s!#(B</p>
<p>Apache のモジュール API は UNIX と Windows 間では変更されていません。
多くのモジュールは全く変更なし、もしくは簡単な変更により Windows
で実行できるようになります。ただし、それ以外の Windows には無い Unix
アーキテクチャーの機能に依存したモジュールは動作しません。</p>
<p>$B%b%8%e!<%k$,<B:]$KF0:n$9$k$H$-$O!"(B
$BFs$D$NJ}K!$N$I$A$i$+$G%5!<%P$KDI2C$9$k$3$H$,$G$-$^$9!#$^$:!"(BUnix
$B$HF1MM$K%5!<%P$K%3%s%Q%$%k$7$FAH$_9~$`$3$H$,$G$-$^$9!#(BWindows
$BMQ$N(B Apache $B$O(B Unix $BMQ$N(B Apache $B$K$"$k(B <code>Configure</code>
$B%W%m%0%i%`$,$"$j$^$;$s$N$G!"%b%8%e!<%k$N%=!<%9%U%!%$%k$r(B
ApacheCore $B%W%m%8%'%/%H%U%!%$%k$KDI2C$7!"%7%s%\%k$r(B
<code>os\win32\modules.c</code> $B%U%!%$%k$KDI2C$9$kI,MW$,$"$j$^$9!#(B</p>
<p>モジュールが実際に動作するときは、
二つの方法のどちらかでサーバに追加することができます。まず、Unix
と同様にサーバにコンパイルして組み込むことができます。Windows
用の Apache は Unix 用の Apache にある <code>Configure</code>
プログラムがありませんので、モジュールのソースファイルを
ApacheCore プロジェクトファイルに追加し、シンボルを
<code>os\win32\modules.c</code> ファイルに追加する必要があります。</p>
<p>$BFs$DL\$O%b%8%e!<%k$r(B DLL $B$H$7$F%3%s%Q%$%k$9$kJ}K!$G$9!#(B
DLL $B$O6&M-%i%$%V%i%j$G!"<B9T;~$K(B
<p>二つ目はモジュールを DLL としてコンパイルする方法です。
DLL は共有ライブラリで、実行時に
<code><directive>LoadModule</directive></code>
$B%G%#%l%/%F%#%V$K$h$j%5!<%P$KFI$_9~$`$3$H$,$G$-$^$9!#$3$l$i$N%b%8%e!<%k(B
DLL $B$O$=$N$^$^G[I[$9$k$3$H$,2DG=$G!"%5!<%P$r:F%3%s%Q%$%k$9$k$3$H$J$/!"(BWindows
$BMQ$N(B Apache $B$N$9$Y$F$N%$%s%9%H!<%k$G<B9T$9$k$3$H$,$G$-$^$9!#(B</p>
ディレクティブによりサーバに読み込むことができます。これらのモジュール
DLL はそのまま配布することが可能で、サーバを再コンパイルすることなく、Windows
用の Apache のすべてのインストールで実行することができます。</p>
<p>$B%b%8%e!<%k(B DLL $B$r:n@.$9$k$?$a$K$O!"(B
$B%b%8%e!<%k$N:n@.$K>.$5$JJQ99$r9T$J$&I,MW$,$"$j$^$9!#(B
$B$D$^$j!"%b%8%e!<%k$N%l%3!<%I(B ($B$3$l$O8e$G:n@.$5$l$^$9!#(B
$B0J2<$r;2>H$7$F$/$@$5$$(B) $B$,(B DLL $B$+$i%(%/%9%]!<%H$5$l$J$1$l$P$J$j$^$;$s!#(B
$B$3$l$r9T$J$&$K$O!"(B<code>AP_MODULE_DECLARE_DATA</code> (Apache
$B$N%X%C%@%U%!%$%k$GDj5A$5$l$F$$$^$9(B) $B$r%b%8%e!<%k$N%b%8%e!<%k%l%3!<%I(B
$BDj5A$NItJ,$KDI2C$7$F$/$@$5$$!#$?$H$($P!"%b%8%e!<%k$K(B</p>
<p>モジュール DLL を作成するためには、
モジュールの作成に小さな変更を行なう必要があります。
つまり、モジュールのレコード (これは後で作成されます。
以下を参照してください) が DLL からエクスポートされなければなりません。
これを行なうには、<code>AP_MODULE_DECLARE_DATA</code> (Apache
のヘッダファイルで定義されています) をモジュールのモジュールレコード
定義の部分に追加してください。たとえば、モジュールに</p>
<example>
module foo_module;
</example>
<p>$B$,$"$k$H$9$k$H!"$=$l$r<!$N$b$N$GCV$-49$($F$/$@$5$$!#(B</p>
<p>があるとすると、それを次のもので置き換えてください。</p>
<example>
module AP_MODULE_DECLARE_DATA foo_module;
</example>
<p>Unix $B>e$G$b$3$N%b%8%e!<%k$r(B
$BJQ99L5$7$G;H$$B3$1$i$l$k$h$&$K!"$3$N%^%/%m$O(B Windows
$B>e$G$N$_8zNO$r;}$A$^$9!#(B<code>.DEF</code>
$B%U%!%$%k$NJ}$rNI$/CN$C$F$$$k$H$$$&>l9g$O!"(B
$BBe$o$j$K$=$l$r;H$C$F%b%8%e!<%k%l%3!<%I$r(B
$B%(%/%9%]!<%H$9$k$3$H$b$G$-$^$9!#(B</p>
<p>$B$5$"!"$"$J$?$N%b%8%e!<%k$N(B DLL $B$r:n@.$7$^$7$g$&!#$3$l$r!"(B
libhttpd.lib $B6&M-%i%$%V%i%j$,%3%s%Q%$%k$5$l$?$H$-$K:n@.$5$l$?(B
ibhttpd.lib $B%(%/%9%]!<%H%i%$%V%i%j$H%j%s%/$7$F$/$@$5$$!#$3$N;~$K!"(B
Apache $B$N%X%C%@%U%!%$%k$,@5$7$$0LCV$K$"$k$h$&$K!"(B
$B%3%s%Q%$%i$N@_Dj$rJQ$($kI,MW$,$"$k$+$b$7$l$^$;$s!#(B
$B$3$N%i%$%V%i%j$O%5!<%P%k!<%H$N(B modules $B%G%#%l%/%H%j$K$"$j$^$9!#(B
$B%S%k%I4D6-$,@5$7$/@_Dj$5$l$k$h$&$K!"4{B8$N%b%8%e!<%kMQ$N(B .dsp $B$r(B
$B<h$C$F$/$k$N$,0lHVNI$$$G$7$g$&!#$b$7$/$O!"$"$J$?$N(B .dsp $B$H(B
$B%3%s%Q%$%i$H%j%s%/$N%*%W%7%g%s$rHf3S$9$k!"$H$$$&$b$N$G$bNI$$$G$9!#(B</p>
<p>Unix 上でもこのモジュールを
変更無しで使い続けられるように、このマクロは Windows
上でのみ効力を持ちます。<code>.DEF</code>
ファイルの方を良く知っているという場合は、
代わりにそれを使ってモジュールレコードを
エクスポートすることもできます。</p>
<p>さあ、あなたのモジュールの DLL を作成しましょう。これを、
libhttpd.lib 共有ライブラリがコンパイルされたときに作成された
ibhttpd.lib エクスポートライブラリとリンクしてください。この時に、
Apache のヘッダファイルが正しい位置にあるように、
コンパイラの設定を変える必要があるかもしれません。
このライブラリはサーバルートの modules ディレクトリにあります。
ビルド環境が正しく設定されるように、既存のモジュール用の .dsp を
取ってくるのが一番良いでしょう。もしくは、あなたの .dsp と
コンパイラとリンクのオプションを比較する、というものでも良いです。</p>
<p>$B$3$l$G(B DLL $BHG$N%b%8%e!<%k$,:n@.$5$l$F$$$k$O$:$G$9!#(B
$B%5!<%P%k!<%H$N(B <code>modules</code>
$B%G%#%l%/%H%j$K%b%8%e!<%k$rCV$$$F!"(B
<p>これで DLL 版のモジュールが作成されているはずです。
サーバルートの <code>modules</code>
ディレクトリにモジュールを置いて、
<code><directive>LoadModule</directive></code>
$B%G%#%l%/%F%#%V$r;H$C$FFI$_9~$s$G$/$@$5$$!#(B</p>
ディレクティブを使って読み込んでください。</p>
</section>
<directivesynopsis>
<name>LoadFile</name>
<description>$B;XDj$5$l$?%*%V%8%'%/%H%U%!%$%k$d%i%$%V%i%j$r%j%s%/$9$k(B</description>
<description>指定されたオブジェクトファイルやライブラリをリンクする</description>
<syntax>LoadFile <em>filename</em> [<em>filename</em>] ...</syntax>
<contextlist>
<context>server config</context>
@@ -131,13 +131,13 @@
<usage>
<p>LoadFile $B%G%#%l%/%F%#%V$O!"%5!<%P$,5/F0$5$l$?$H$-$d:F5/F0$5$l$?$H$-$K!"(B
$B;XDj$5$l$?%*%V%8%'%/%H%U%!%$%k$d%i%$%V%i%j$r%j%s%/$7$^$9!#(B
$B$3$l$O%b%8%e!<%k$,F0:n$9$k$?$a$KI,MW$K$J$k$+$b$7$l$J$$DI2C$N(B
$B%3!<%I$rFI$_9~$`$?$a$K;HMQ$5$l$^$9!#(B<em>Filename</em> $B$O@dBP%Q%9$+!"(B<a
href="core.html#serverroot">ServerRoot</a> $B$+$i$NAjBP%Q%9$G$9!#(B</p>
<p>LoadFile ディレクティブは、サーバが起動されたときや再起動されたときに、
指定されたオブジェクトファイルやライブラリをリンクします。
これはモジュールが動作するために必要になるかもしれない追加の
コードを読み込むために使用されます。<em>Filename</em> は絶対パスか、<a
href="core.html#serverroot">ServerRoot</a> からの相対パスです。</p>
<p>$BNc(B:</p>
<p>:</p>
<example>LoadFile libexec/libxmlparse.so</example>
@@ -146,8 +146,8 @@
<directivesynopsis>
<name>LoadModule</name>
<description>$B%*%V%8%'%/%H%U%!%$%k$d%i%$%V%i%j$r%j%s%/$7!";HMQ%b%8%e!<%k$N(B
$B%j%9%H$KDI2C$9$k(B</description>
<description>オブジェクトファイルやライブラリをリンクし、使用モジュールの
リストに追加する</description>
<syntax>LoadModule <em>module filename</em></syntax>
<contextlist>
<context>server config</context>
@@ -155,20 +155,20 @@
<usage>
<p>LoadModule $B%G%#%l%/%F%#%V$O(B <em>filename</em>
$B$H$$$&%*%V%8%'%/%H%U%!%$%k$*$h$S%i%$%V%i%j$r%j%s%/$7!"(B<em>module</em>
$B$H$$$&L>A0$N%b%8%e!<%k$N9=B$$r%"%/%F%#%V$J%b%8%e!<%k$N%j%9%H$KDI2C$7$^$9!#(B
<em>Module</em> $B$O%U%!%$%kCf$N(B <code>module</code>
$B7?$N30ItJQ?t$NL>A0$G!"%b%8%e!<%k$N%I%-%e%a%s%H$K(B
<p>LoadModule ディレクティブは <em>filename</em>
というオブジェクトファイルおよびライブラリをリンクし、<em>module</em>
という名前のモジュールの構造をアクティブなモジュールのリストに追加します。
<em>Module</em> はファイル中の <code>module</code>
型の外部変数の名前で、モジュールのドキュメントに
<a href="module-dict.html#moduleidentifier"
>$B%b%8%e!<%k<1JL;R(B</a>$B$H$7$F=q$+$l$F$$$k$b$N$G$9!#Nc(B :</p>
>モジュール識別子</a>として書かれているものです。例 :</p>
<example>
LoadModule status_module modules/mod_status.so
</example>
<p>$B$3$l$O(B ServerRoot $B$N(B modules $B%5%V%G%#%l%/%H%j$+$i;XDj$5$l$?L>A0$N(B
$B%b%8%e!<%k$r%m!<%I$7$^$9!#(B</p>
<p>これは ServerRoot modules サブディレクトリから指定された名前の
モジュールをロードします。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 395228:420990 (outdated) -->
@@ -23,9 +23,9 @@
<modulesynopsis metafile="mod_speling.xml.meta">
<name>mod_speling</name>
<description>$B%f!<%6$,F~NO$7$?$G$"$m$&4V0c$C$?(B URL $B$r!"(B
$BBgJ8;z>.J8;z$N6hJL$rL5;k$9$k$3$H$H0l$D0J2<$NDV$j4V0c$$$r5vMF$9$k$3$H$G(B
$B=$@5$r;n$_$k(B</description>
<description>ユーザが入力したであろう間違った URL を、
大文字小文字の区別を無視することと一つ以下の綴り間違いを許容することで
修正を試みる</description>
<status>Extension</status>
<sourcefile>mod_speling.c</sourcefile>
<identifier>speling_module</identifier>
@@ -33,38 +33,38 @@
<summary>
<p>$B%j%/%(%9%H$NDV$j$,4V0c$C$F$$$?$j!"(B
$BBgJ8;z>.J8;z$,0c$C$F$$$?$j$9$k$?$a$K!"(BApache $B$N%3%"%5!<%P$,(B
$B%I%-%e%a%s%H$X$N%j%/%(%9%H$X$N1~Ez$r@5$7$/Ds6!$G$-$J$$$3$H$,$"$j$^$9!#(B
$B$3$N%b%8%e!<%k$O!"B>$N$9$Y$F$N%b%8%e!<%k$,$"$-$i$a$?8e$G$"$C$?$H$7$F$b!"(B
$B%j%/%(%9%H$K9g$&%I%-%e%a%s%H$r8+$D$1$h$&$H$9$k$3$H$K$h$j$3$NLdBj$N(B
$B2r7h$r;n$_$^$9!#$3$N%b%8%e!<%k$O%j%/%(%9%H$5$l$?%G%#%l%/%H%j$K$"$k(B
$B$=$l$>$l$N%I%-%e%a%s%H$NL>A0$H!"%j%/%(%9%H$5$l$?%I%-%e%a%s%H$NL>A0$H$r(B
<strong>$BBgJ8;z>.J8;z$N6hJL$rL5;k$7(B</strong>$B!"(B<strong>$B0lJ8;z$^$G$N(B
$BDV$j$N4V0c$$(B</strong> ($BJ8;z$NA^F~(B/$B>JN,(B/$BNY9g$&J8;z$NCV49!"4V0c$C$?J8;z(B)
$B$r5v2D$7$FHf3S$9$k$3$H$K$h$j!"L\E*$rC#@.$7$h$&$H$7$^$9!#(B
$B$3$NJ}K!$G%j%/%(%9%H$K9g$&%I%-%e%a%s%H$N0lMw$,:n@.$5$l$^$9!#(B</p>
<p>リクエストの綴りが間違っていたり、
大文字小文字が違っていたりするために、Apache のコアサーバが
ドキュメントへのリクエストへの応答を正しく提供できないことがあります。
このモジュールは、他のすべてのモジュールがあきらめた後であったとしても、
リクエストに合うドキュメントを見つけようとすることによりこの問題の
解決を試みます。このモジュールはリクエストされたディレクトリにある
それぞれのドキュメントの名前と、リクエストされたドキュメントの名前とを
<strong>大文字小文字の区別を無視し</strong>、<strong>一文字までの
綴りの間違い</strong> (文字の挿入/省略/隣合う文字の置換、間違った文字)
を許可して比較することにより、目的を達成しようとします。
この方法でリクエストに合うドキュメントの一覧が作成されます。</p>
<p>$B%G%#%l%/%H%j$r%9%-%c%s$7$?8e$K!"(B</p>
<p>ディレクトリをスキャンした後に、</p>
<ul>
<li>$BE,@Z$J%I%-%e%a%s%H$,8+$D$+$i$J$+$C$?>l9g!"(B
Apache $B$O$$$D$b$HF1$8$h$&$K=hM}$r$7!"(B
$B!V%I%-%e%a%s%H$,8+$D$+$i$J$$!W$H$$$&%(%i!<$rJV$7$^$9!#(B</li>
<li>適切なドキュメントが見つからなかった場合、
Apache はいつもと同じように処理をし、
「ドキュメントが見つからない」というエラーを返します。</li>
<li>$B%j%/%(%9%H$K!V$[$H$s$I!W9g$&%I%-%e%a%s%H$,0l$D$@$18+$D$+$C$?>l9g!"(B
$B$=$l$,%j%@%$%l%/%H1~Ez$H$7$FJV$5$l$^$9!#(B</li>
<li>リクエストに「ほとんど」合うドキュメントが一つだけ見つかった場合、
それがリダイレクト応答として返されます。</li>
<li>$B$h$/;w$?%I%-%e%a%s%H$,J#?t8+$D$+$C$?>l9g!"(B
$B$=$N%j%9%H$,%/%i%$%"%s%H$KJV$5$l!"(B
$B%/%i%$%"%s%H$,@5$7$$8uJd$rA*Br$G$-$k$h$&$K$7$^$9!#(B</li>
<li>よく似たドキュメントが複数見つかった場合、
そのリストがクライアントに返され、
クライアントが正しい候補を選択できるようにします。</li>
</ul>
</summary>
<directivesynopsis>
<name>CheckSpelling</name>
<description>spelling $B%b%8%e!<%k$r;HMQ$9$k$h$&$K$9$k(B</description>
<description>spelling モジュールを使用するようにする</description>
<syntax>CheckSpelling on|off</syntax>
<default>CheckSpelling Off</default>
<contextlist>
@@ -74,43 +74,43 @@
<context>.htaccess</context>
</contextlist>
<override>Options</override>
<compatibility>CheckSpelling $B$O(B Apache 1.1 $B$G$OJLG[I[$N%b%8%e!<%k$G!"(B
$BBgJ8;z>.J8;z$N4V0c$$$N$_$N5!G=$G$7$?!#(BApache 1.3 $B$G(B Apache $B$NG[I[$K(B
$B4^$^$l$k$h$&$K$J$j$^$7$?!#(BApache 1.3.2 $B$h$jA0$G$O(B <code>CheckSpelling</code>
$B%G%#%l%/%F%#%V$O!V%5!<%P!W$H!V%P!<%A%c%k%[%9%H!W%3%s%F%-%9%H$G$N$_(B
$B;HMQ2DG=$G$7$?(B</compatibility>
<compatibility>CheckSpelling Apache 1.1 では別配布のモジュールで、
大文字小文字の間違いのみの機能でした。Apache 1.3 で Apache の配布に
含まれるようになりました。Apache 1.3.2 より前では <code>CheckSpelling</code>
ディレクティブは「サーバ」と「バーチャルホスト」コンテキストでのみ
使用可能でした</compatibility>
<usage>
<p>$B$3$N%G%#%l%/%F%#%V$ODV$jMQ$N%b%8%e!<%k$r;HMQ$9$k$+$I$&$+$r(B
$B7h$a$^$9!#;HMQ;~$K$O!"0J2<$N$3$H$r3P$($F$*$$$F$/$@$5$$(B</p>
<p>このディレクティブは綴り用のモジュールを使用するかどうかを
決めます。使用時には、以下のことを覚えておいてください</p>
<ul>
<li>$BF1;~$K$?$/$5$s$NDV$j$ND{@5$r9T$J$o$J$1$l$P$J$i$J$$$H$-$O!"(B
$B$=$N$?$a$K9T$J$o$l$k%G%#%l%/%H%j$N%9%-%c%s$,%5!<%P$N@-G=$K(B
$B1F6A$rM?$($^$9!#(B</li>
<li>同時にたくさんの綴りの訂正を行なわなければならないときは、
そのために行なわれるディレクトリのスキャンがサーバの性能に
影響を与えます。</li>
<li>$B%I%-%e%a%s%H$NCf$KDV$j$N!VD{@5!W$K$h$j(B
$B0U?^$;$:9g$C$F$7$^$&$h$&$J=EMW$J%U%!%$%k$,$J$$$h$&$K$7$F$/$@$5$$!#(B
<li>ドキュメントの中に綴りの「訂正」により
意図せず合ってしまうような重要なファイルがないようにしてください。
</li>
<li>$B%b%8%e!<%k$O%f!<%6L>$NDV$j$N4V0c$$(B
(<code>http://my.host/~apahce/</code> $B$N$h$&$K(B)
$B$rD{@5$9$k$3$H$O$G$-$^$;$s!#(B
$BD{@5$G$-$k$N$O%U%!%$%kL>$H%G%#%l%/%H%jL>$@$1$G$9!#(B</li>
<li>モジュールはユーザ名の綴りの間違い
(<code>http://my.host/~apahce/</code> のように)
を訂正することはできません。
訂正できるのはファイル名とディレクトリ名だけです。</li>
<li>$BDV$j$ND{@5$OB8:_$9$k%U%!%$%k$K87L)$KE,MQ$5$l$^$9$N$G!"(B
<li>綴りの訂正は存在するファイルに厳密に適用されますので、
<code>&lt;Location /status&gt;</code>
$B$O%M%4%7%(!<%7%g%s$N7k2L$N%U%!%$%k(B "<code>/stats.html</code>"
$B$H$7$F4V0c$C$F07$o$l$k$+$b$7$l$^$;$s!#(B</li>
はネゴシエーションの結果のファイル "<code>/stats.html</code>"
として間違って扱われるかもしれません。</li>
</ul>
<!-- XXX: is that really true?! -nd -->
<p><a href="mod_dav.html">DAV</a> $B$,M-8z$J%G%#%l%/%H%j$G$O(B
<module>mod_speling</module> $B$OM-8z$K$7$J$$$G$/$@$5$$!#(B
$B?7$7$/:n@.$7$?%j%=!<%9L>$r4{$KB8:_$9$k%U%!%$%kL>$K!V=$@5!W$7$h$&$H$9$k!"(B
$BNc$($P!"?75,%I%-%e%a%s%H(B <code>doc43.html</code> $B$,4{$KB8:_$9$k(B
<code>doc34.html</code> $B$K%j%@%$%l%/%H$5$l$F!"(B
$B4|BT$H$O0c$&5sF0$K$J$k$+$i$G$9!#(B</p>
<p><a href="mod_dav.html">DAV</a> が有効なディレクトリでは
<module>mod_speling</module> は有効にしないでください。
新しく作成したリソース名を既に存在するファイル名に「修正」しようとする、
例えば、新規ドキュメント <code>doc43.html</code> が既に存在する
<code>doc34.html</code> にリダイレクトされて、
期待とは違う挙動になるからです。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<modulesynopsis metafile="mod_status.xml.meta">
@@ -22,54 +22,54 @@
-->
<name>mod_status</name>
<description>$B%5!<%P$N3hF0>u67$H@-G=$K4X$9$k>pJs$rDs6!$9$k(B</description>
<description>サーバの活動状況と性能に関する情報を提供する</description>
<status>Base</status>
<sourcefile>mod_status.c</sourcefile>
<identifier>status_module</identifier>
<summary>
<p>$B$3$N(B Status $B%b%8%e!<%k$K$h$j%5!<%P4IM}<T$O%5!<%P$,$I$N$/$i$$(B
$B$N@-G=$GF0:n$7$F$$$k$+$rCN$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B
$B8=;~E@$G$N%5!<%P$NE}7W>pJs$rFI$_$d$9$$7A<0$G8=$7$?(B HTML $B%Z!<%8$,(B
$BI=<($5$l$^$9!#I,MW$G$"$l$P!"$3$N%Z!<%8$O<+F0E*$K%j%U%l%C%7%e$5$;$k(B
$B$3$H$b$G$-$^$9(B ($B8_49@-$N$"$k%V%i%&%6$r;HMQ$7$F$$$k>l9g(B)$B!#(B
$BJL$K!"8=;~E@$G$N%5!<%P$N>uBV$rC1=c$J5!3#FI$_<h$j2DG=$J%j%9%H$G(B
$B8=$9%Z!<%8$b$"$j$^$9!#(B</p>
<p>この Status モジュールによりサーバ管理者はサーバがどのくらい
の性能で動作しているかを知ることができるようになります。
現時点でのサーバの統計情報を読みやすい形式で現した HTML ページが
表示されます。必要であれば、このページは自動的にリフレッシュさせる
こともできます (互換性のあるブラウザを使用している場合)。
別に、現時点でのサーバの状態を単純な機械読み取り可能なリストで
現すページもあります。</p>
<p>$BI=<($5$l$k>pJs$O(B:</p>
<p>表示される情報は:</p>
<ul>
<li>$B%j%/%(%9%H$r07$C$F$$$k%o!<%+!<$N?t(B</li>
<li>リクエストを扱っているワーカーの数</li>
<li>$B%"%$%I%k(B ($BLuCm(B: $B%j%/%(%9%H$r07$C$F$$$J$$(B) $B%o!<%+!<$N?t(B</li>
<li>アイドル (訳注: リクエストを扱っていない) ワーカーの数</li>
<li>$B3F%o!<%+!<$N>uBV!"%o!<%+!<$,07$C$?%j%/%(%9%H$N?t!"(B
$B%o!<%+!<$,Aw$C$?Am%P%$%H?t(B (*)</li>
<li>各ワーカーの状態、ワーカーが扱ったリクエストの数、
ワーカーが送った総バイト数 (*)</li>
<li>$BAm%"%/%;%9?t$HAm%P%$%H?t(B (*)</li>
<li>総アクセス数と総バイト数 (*)</li>
<li>$B%5!<%P$,5/F0$b$7$/$O:F5/F0$5$l$?;~9o$HF0:n$7$F$$$k;~4V(B</li>
<li>サーバが起動もしくは再起動された時刻と動作している時間</li>
<li>$BJ?6Q$N(B 1 $BIC$"$?$j$N%j%/%(%9%H?t!"(B1 $BIC$"$?$j$NAw$i$l$?%P%$%H?t!"(B
$B%j%/%(%9%H$"$?$j$N%P%$%H?t(B (*)</li>
<li>平均の 1 秒あたりのリクエスト数、1 秒あたりの送られたバイト数、
リクエストあたりのバイト数 (*)</li>
<li>$B3F%o!<%+!<$H(B Apache $BA4BN$G;HMQ$5$l$F$$$k(B CPU $B$N3d9g(B (*)</li>
<li>各ワーカーと Apache 全体で使用されている CPU の割合 (*)</li>
<li>$B8=;~E@$N%[%9%H$H=hM}$5$l$F$$$k%j%/%(%9%H(B (*)</li>
<li>現時点のホストと処理されているリクエスト (*)</li>
</ul>
<p>"(*)" $B$NIU$$$F$$$k>pJs$rI=<($9$k$?$a$K$O%3%s%Q%$%k;~$N%*%W%7%g%s(B
$B$r;HMQ$9$kI,MW$,$"$j$^$9!#$3$l$i$NE}7W>pJs$rF@$k$?$a$KI,MW$J(B
$B%3!<%I$OI8=`$N(B Apache $B$K$O4^$^$l$F$$$^$;$s!#(B</p>
<p>"(*)" の付いている情報を表示するためにはコンパイル時のオプション
を使用する必要があります。これらの統計情報を得るために必要な
コードは標準の Apache には含まれていません。</p>
</summary>
<section id="enable">
<title>Status $B$r;HMQ2DG=$K$9$k(B</title>
<title>Status を使用可能にする</title>
<p>foo.com $B%I%a%$%s$+$i$N%V%i%&%6$N$_$KBP$7$F(B
$B%9%F!<%?%9$NJs9p$r;HMQ2DG=$K$9$k$K$O(B
$B0J2<$N%3!<%I$r(B <code>httpd.conf</code> $B@_Dj%U%!%$%k$KDI2C$7$^$9(B</p>
<p>foo.com ドメインからのブラウザのみに対して
ステータスの報告を使用可能にするには
以下のコードを <code>httpd.conf</code> 設定ファイルに追加します</p>
<example>
&lt;Location /server-status&gt;<br />
SetHandler server-status<br />
@@ -80,37 +80,37 @@
&lt;/Location&gt;
</example>
<p>$B$3$l$G!"%5!<%P$NE}7W>pJs$r%&%'%V%V%i%&%6$r;H$C$F(B
<code>http://your.server.name/server-status</code> $B$r%"%/%;%9$9$k$3$H$K$h$j(B
$BCN$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B</p>
<p>これで、サーバの統計情報をウェブブラウザを使って
<code>http://your.server.name/server-status</code> をアクセスすることにより
知ることができるようになります。</p>
</section>
<section id="autoupdate">
<title>$B<+F099?7(B</title>
<p>$B%V%i%&%6$,!V%j%U%l%7%e!W5!G=$r%5%]!<%H$7$F$$$l$P!"%9%F!<%?%9%Z!<%8$r(B
$B<+F0E*$K99?7$9$k$h$&$K$G$-$^$9!#(BN $BICKh$K99?7$5$;$k$?$a$K$O(B
<title>自動更新</title>
<p>ブラウザが「リフレシュ」機能をサポートしていれば、ステータスページを
自動的に更新するようにできます。N 秒毎に更新させるためには
<code>http://your.server.name/server-status?refresh=N</code>
$B$H$$$&%Z!<%8$r%"%/%;%9$7$F$/$@$5$$!#(B</p>
というページをアクセスしてください。</p>
</section>
<section id="machinereadable">
<title>$B5!3#FI$_<h$j2DG=$J%9%F!<%?%9%U%!%$%k(B</title>
<p><code>http://your.server.name/server-status?auto</code> $B$r(B
$B%"%/%;%9$9$k$3$H$K$h$j!"%9%F!<%?%9%U%!%$%k$N5!3#FI$_<h$j2DG=$J%P!<%8%g%s$r(B
$BF@$k$3$H$,$G$-$^$9!#$3$l$O<+F0E*$K<B9T$5$l$k$H$-$KJXMx$G$9!#(B
Apache $B$N(B <code>/support</code> $B%G%#%l%/%H%j$K$"$k(B
Perl $B%W%m%0%i%`(B <code>log_server_status</code> $B$r8+$F$/$@$5$$!#(B</p>
<title>機械読み取り可能なステータスファイル</title>
<p><code>http://your.server.name/server-status?auto</code>
アクセスすることにより、ステータスファイルの機械読み取り可能なバージョンを
得ることができます。これは自動的に実行されるときに便利です。
Apache <code>/support</code> ディレクトリにある
Perl プログラム <code>log_server_status</code> を見てください。</p>
<note>
<strong><module>mod_status</module> $B$,%5!<%P$KAH$_9~$^$l$F$$$k(B
$B>l9g!"%O%s%I%i$N5!G=$O%G%#%l%/%H%j(B<em>$BKh(B</em>$B$N%U%!%$%k(B
(<em>$B$9$J$o$A(B</em>$B!"(B<code>.htaccess</code>) $B$b4^$`(B<em>$B$9$Y$F(B</em>$B$N(B
$B@_Dj%U%!%$%k$G;HMQ2DG=$K$J$k$3$H$K$OCm0U$r$7$F$*$/I,MW$,$"$j$^$9!#(B
$B$3$l$O!"%5%$%H$K$h$C$F$O%;%-%e%j%F%#$K4X$9$kK>$^$7$/$J$$7k2L$r(B
$B$b$?$i$9$3$H$,$"$k$+$b$7$l$^$;$s!#(B</strong>
<strong><module>mod_status</module> がサーバに組み込まれている
場合、ハンドラの機能はディレクトリ<em>毎</em>のファイル
(<em>すなわち</em>、<code>.htaccess</code>) も含む<em>すべて</em>の
設定ファイルで使用可能になることには注意をしておく必要があります。
これは、サイトによってはセキュリティに関する望ましくない結果を
もたらすことがあるかもしれません。</strong>
</note>
</section>
@@ -118,16 +118,16 @@
<directivesynopsis>
<name>ExtendedStatus</name>
<description>$B3F%j%/%(%9%H$KBP$7$F3HD%%9%F!<%?%9>pJs$rJ]B8$9$k(B</description>
<description>各リクエストに対して拡張ステータス情報を保存する</description>
<syntax>ExtendedStatus On|Off</syntax>
<default>ExtendedStatus Off</default>
<contextlist><context>server config</context></contextlist>
<compatibility>ExtendedStatus $B$O(B Apache 1.3.2 $B0J9_$G$N$_;HMQ2DG=(B</compatibility>
<compatibility>ExtendedStatus Apache 1.3.2 以降でのみ使用可能</compatibility>
<usage>
<p>$B$3$N@_Dj$O%5!<%PA4BN$KBP$7$FE,MQ$5$l!"%P!<%A%c%k%[%9%HKh$K(B
$BJQ99$9$k$3$H$O$G$-$^$;$s!#3HD%%9%F!<%?%9>pJs$N<}=8$O%5!<%P$N(B
$BF0:n$rCY$/$9$k$3$H$,$"$j$^$9!#(B</p>
<p>この設定はサーバ全体に対して適用され、バーチャルホスト毎に
変更することはできません。拡張ステータス情報の収集はサーバの
動作を遅くすることがあります。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -23,39 +23,39 @@
<modulesynopsis metafile="mod_suexec.xml.meta">
<name>mod_suexec</name>
<description>$B;XDj$5$l$?%f!<%6$H%0%k!<%W$G(B CGI $B%9%/%j%W%H$r<B9T$9$k(B</description>
<description>指定されたユーザとグループで CGI スクリプトを実行する</description>
<status>Extension</status>
<sourcefile>mod_suexec.c</sourcefile>
<identifier>suexec_module</identifier>
<compatibility>Apache 2.0 $B0J9_$G;HMQ2DG=(B</compatibility>
<compatibility>Apache 2.0 以降で使用可能</compatibility>
<summary>
<p>$B$3$N%b%8%e!<%k$H(B <program>suexec</program> $B%5%]!<%H%W%m%0%i%`(B
$B$K$h$j!"(BCGI $B%9%/%j%W%H$,;XDj$5$l$?%f!<%6$H%0%k!<%W$G(B
$B<B9T$5$l$k$h$&$K$G$-$^$9!#(B</p>
<p>このモジュールと <program>suexec</program> サポートプログラム
により、CGI スクリプトが指定されたユーザとグループで
実行されるようにできます。</p>
</summary>
<seealso><a href="../suexec.html">SuEXEC $B%5%]!<%H(B</a></seealso>
<seealso><a href="../suexec.html">SuEXEC サポート</a></seealso>
<directivesynopsis>
<name>SuexecUserGroup</name>
<description>CGI $B%W%m%0%i%`$N%f!<%6%Q!<%_%C%7%g%s!"%0%k!<%W%Q!<%_%C%7%g%s(B</description>
<description>CGI プログラムのユーザパーミッション、グループパーミッション</description>
<syntax>SuexecUserGroup <em>User Group</em></syntax>
<contextlist><context>server config</context>
<context>virtual host</context></contextlist>
<compatibility>SuexecUserGroup $B$O(B 2.0 $B0J9_$G$N$_;HMQ2DG=!#(B</compatibility>
<compatibility>SuexecUserGroup は 2.0 以降でのみ使用可能。</compatibility>
<usage>
<p><directive>SuexecUserGroup</directive> $B%G%#%l%/%F%#%V$O(B CGI $B%W%m%0%i%`(B
$B$,<B9T$5$l$k%f!<%6$H%0%k!<%W$r;XDj$G$-$k$h$&$K$7$^$9!#(BCGI $B0J30$N(B
$B%j%/%(%9%H$O(B User $B%G%#%l%/%F%#%V$G;XDj$5$l$?%f!<%6$N$^$^$G=hM}$5$l$^$9!#(B
$B$3$N%G%#%l%/%F%#%V$O(B Apache 1.3 $B$K$*$1$k(B VirtualHosts $B$NCf$G(B
User $B%G%#%l%/%F%#%V$H(B Group $B%G%#%l%/%F%#%V$r;H$&MQK!$NBe$o$j$K$J$j$^$9!#(B</p>
<p><directive>SuexecUserGroup</directive> ディレクティブは CGI プログラム
が実行されるユーザとグループを指定できるようにします。CGI 以外の
リクエストは User ディレクティブで指定されたユーザのままで処理されます。
このディレクティブは Apache 1.3 における VirtualHosts の中で
User ディレクティブと Group ディレクティブを使う用法の代わりになります。</p>
<example>
<title>$BNc(B</title>
<title></title>
SuexecUserGroup nobody nogroup
</example>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -23,176 +23,176 @@
<modulesynopsis metafile="mod_unique_id.xml.meta">
<name>mod_unique_id</name>
<description>$B$=$l$>$l$N%j%/%(%9%H$KBP$9$k0l0U$J<1JL;R$NF~$C$?4D6-JQ?t$r(B
$BDs6!$9$k(B</description>
<description>それぞれのリクエストに対する一意な識別子の入った環境変数を
提供する</description>
<status>Extension</status>
<sourcefile>mod_unique_id.c</sourcefile>
<identifier>unique_id_module</identifier>
<summary>
<p>$B$3$N%b%8%e!<%k$OHs>o$K@)8B$5$l$?>r7o2<$G!"(B
$B$=$l$>$l$N%j%/%(%9%H$K!V$9$Y$F!W$N%j%/%(%9%H$KBP$7$F(B
$B0l0U$K7h$^$k$3$H$,J]>Z$5$l$F$$$kKbK!$N%H!<%/%s$rDs6!$7$^$9!#(B
$B$3$N0l0U$J<1JL;R$O!"E,@Z$K@_Dj$5$l$?%/%i%9%?$G$OJ#?t$N(B
$B%^%7%s$N4V$G$5$($b0l0U$K$J$j$^$9!#$=$l$>$l$N%j%/%(%9%H$KBP$7$F4D6-JQ?t(B
<code>UNIQUE_ID</code> $B$K<1JL;R$,@_Dj$5$l$^$9!#(B
$B0l0U$J<1JL;R$,JXMx$JM}M3$O$$$m$$$m$"$j$^$9$,!"(B
$B$3$N%I%-%e%a%s%H$NL\E*$+$i$O30$l$k$?$a!"$3$3$G$O@bL@$7$^$;$s!#(B</p>
<p>このモジュールは非常に制限された条件下で、
それぞれのリクエストに「すべて」のリクエストに対して
一意に決まることが保証されている魔法のトークンを提供します。
この一意な識別子は、適切に設定されたクラスタでは複数の
マシンの間でさえも一意になります。それぞれのリクエストに対して環境変数
<code>UNIQUE_ID</code> に識別子が設定されます。
一意な識別子が便利な理由はいろいろありますが、
このドキュメントの目的からは外れるため、ここでは説明しません。</p>
</summary>
<section id="theory">
<title>$BM}O@(B</title>
<title>理論</title>
<p>$B$^$:$O$8$a$K!"(BApache $B%5!<%P$,(B Unix
$B%^%7%s$G$I$N$h$&$KF0:n$r$9$k$+$r4JC1$K@bL@$7$^$9!#(B
$B$3$N5!G=$O8=;~E@$G$O(B Windows NT $B$G$O%5%]!<%H$5$l$F$$$^$;$s!#(B
Unix $B%^%7%s$G$O(B Apache $B$O$$$/$D$+$N;R%W%m%;%9$r:n@.$7!"(B
$B$=$N;R%W%m%;%9$,0l$D$:$D%j%/%(%9%H$r=hM}$7$^$9!#$=$l$>$l$N;R%W%m%;%9$O!"(B
$B@8B84|4VCf$KJ#?t$N%j%/%(%9%H$r07$&$3$H$,$G$-$^$9!#(B
$B$3$N5DO@$G$O;R%W%m%;%94V$G$O0l@Z%G!<%?$r6&M-$7$J$$$3$H$K$7$^$9!#(B
$B0J8e!"$3$N;R%W%m%;%9$N$3$H$r(B <dfn>httpd $B%W%m%;%9(B</dfn> $B$H8F$S$^$9!#(B</p>
<p>まずはじめに、Apache サーバが Unix
マシンでどのように動作をするかを簡単に説明します。
この機能は現時点では Windows NT ではサポートされていません。
Unix マシンでは Apache はいくつかの子プロセスを作成し、
その子プロセスが一つずつリクエストを処理します。それぞれの子プロセスは、
生存期間中に複数のリクエストを扱うことができます。
この議論では子プロセス間では一切データを共有しないことにします。
以後、この子プロセスのことを <dfn>httpd プロセス</dfn> と呼びます。</p>
<p>$B$"$J$?$N%&%'%V%5%$%H$K$O$"$J$?$,4IM}$9$k$$$/$D$+$N%^%7%s$,$"$k$H$7$^$9!#(B
$B$=$l$i$r$^$H$a$F%/%i%9%?$H8F$V$3$H$K$7$^$9!#$=$l$>$l$N%^%7%s$OJ#?t$N(B
Apache $B$r<B9T$9$k$3$H$b$G$-$^$9!#(B
$B$3$l$i$9$Y$F$r$^$H$a$?$b$N$,!V1'Ch!W$G$"$k$H9M$($i$l$^$9!#(B
$B$$$/$D$+$N2>Dj$N2<$G!"%/%i%9%?$N%^%7%s4V$,$?$/$5$sDL?.$r$9$k$3$H$J$/!"(B
$B$3$N1'Ch$NCf$G$=$l$>$l$N%j%/%(%9%H$K0l0U$J<1JL;R$r@8@.$G$-$k$3$H$r<($7$^$9!#(B
<p>あなたのウェブサイトにはあなたが管理するいくつかのマシンがあるとします。
それらをまとめてクラスタと呼ぶことにします。それぞれのマシンは複数の
Apache を実行することもできます。
これらすべてをまとめたものが「宇宙」であると考えられます。
いくつかの仮定の下で、クラスタのマシン間がたくさん通信をすることなく、
この宇宙の中でそれぞれのリクエストに一意な識別子を生成できることを示します。
</p>
<p>$B%/%i%9%?$K$"$k%^%7%s$O0J2<$NMW5a$r8+$?$5$J$1$l$P$J$j$^$;$s!#(B
($B%^%7%s$,0l$D$@$1$@$H$7$F$b!"(BNTP $B$G;~7W$r9g$o$;$kJ}$,NI$$$G$9!#(B)</p>
<p>クラスタにあるマシンは以下の要求を見たさなければなりません。
(マシンが一つだけだとしても、NTP で時計を合わせる方が良いです。)</p>
<ul>
<li>NTP $B$dB>$N%M%C%H%o!<%/>e$G;~4V$r9g$o$;$k%W%m%H%3%k$K$h$C$F(B
$B3F%^%7%s$N;~4V$NF14|$,<h$i$l$F$$$k$3$H!#(B</li>
<li>NTP や他のネットワーク上で時間を合わせるプロトコルによって
各マシンの時間の同期が取られていること。</li>
<li>$B%b%8%e!<%k$,%[%9%HL>$r0z$$$F0c$&(B IP
$B%"%I%l%9$r<u$1<h$k$3$H$,$G$-$k$h$&$K!"(B
$B%/%i%9%?$N$=$l$>$l$N%^%7%s$N%[%9%HL>$,0c$&$3$H!#(B</li>
<li>モジュールがホスト名を引いて違う IP
アドレスを受け取ることができるように、
クラスタのそれぞれのマシンのホスト名が違うこと。</li>
</ul>
<p>$B%*%Z%l!<%F%#%s%0%7%9%F%`$K$*$$$F$O!"(Bpid ($B%W%m%;%9(B ID) $B$,(B
32 $B%S%C%H$NHO0OFb$G$"$k$3$H$r2>Dj$7$^$9!#%*%Z%l!<%F%#%s%0%7%9%F%`$N(B
pid $B$,(B 32 $B%S%C%H$rD6$($k>l9g$O!"4JC1$J=$@5$G$O$"$j$^$9$,!"(B
$B%3!<%I$rJQ99$9$kI,MW$,$"$j$^$9!#(B</p>
<p>オペレーティングシステムにおいては、pid (プロセス ID) が
32 ビットの範囲内であることを仮定します。オペレーティングシステムの
pid が 32 ビットを超える場合は、簡単な修正ではありますが、
コードを変更する必要があります。</p>
<p>$B$3$l$i$N2>Dj$,K~$?$5$l$F$$$k$H!"$"$k;~E@$K$*$$$F!"(B
$B%/%i%9%?Fb$N$I$N%^%7%s$N$I$N(B httpd
$B%W%m%;%9$G$b!"0l0U$KF1Dj$9$k$3$H$,$G$-$^$9!#$3$l$O%^%7%s$N(B IP
$B%"%I%l%9$H(B httpd $B%W%m%;%9$N(B pid $B$G==J,$K9T$J$&$3$H$,$G$-$^$9!#(B
$B$G$9$+$i!"%j%/%(%9%H$K0l0U$J<1JL;R$r@8@.$9$k$?$a$K$O!"(B
$B;~9o$r6hJL$9$kI,MW$,$"$k$@$1$G$9!#(B</p>
<p>これらの仮定が満たされていると、ある時点において、
クラスタ内のどのマシンのどの httpd
プロセスでも、一意に同定することができます。これはマシンの IP
アドレスと httpd プロセスの pid で十分に行なうことができます。
ですから、リクエストに一意な識別子を生成するためには、
時刻を区別する必要があるだけです。</p>
<p>$B;~9o$r6hJL$9$k$?$a$K!"(BUnix $B$N%?%$%`%9%?%s%W(B (UTC $B$N(B 1970 $BG/(B
1 $B7n(B 1 $BF|$+$i$NIC?t(B) $B$H!"(B16 $B%S%C%H$N%+%&%s%?$r;H$$$^$9!#(B
$B%?%$%`%9%?%s%W$NN3EY$O0lIC$G$9$N$G!"0lIC4V$N(B 65536
$B$^$G$NCM$rI=8=$9$k$?$a$K%+%&%s%?$r;HMQ$7$^$9!#;M$D$NCM(B
<em>( ip_addr, pid, time_stamp, counter )</em> $B$G3F(B httpd
$B%W%m%;%9$G0lIC$N4V$K(B 65536 $B%j%/%(%9%H$r?t$($"$2$k$3$H$,$G$-$^$9!#(B
$B;~4V$,7P$D$H(B pid $B$,:FMxMQ$5$l$k$H$$$&LdBj$,$"$j$^$9$,!"(B
$B$3$NLdBj$r2r7h$9$k$?$a$K%+%&%s%?$,;HMQ$5$l$^$9!#(B</p>
<p>時刻を区別するために、Unix のタイムスタンプ (UTC の 1970 年
1 月 1 日からの秒数) と、16 ビットのカウンタを使います。
タイムスタンプの粒度は一秒ですので、一秒間の 65536
までの値を表現するためにカウンタを使用します。四つの値
<em>( ip_addr, pid, time_stamp, counter )</em> で各 httpd
プロセスで一秒の間に 65536 リクエストを数えあげることができます。
時間が経つと pid が再利用されるという問題がありますが、
この問題を解決するためにカウンタが使用されます。</p>
<p>httpd $B$N;R%W%m%;%9$,:n@.$5$l$k$H!"%+%&%s%?$O(B
($B$=$N;~E@$N%^%$%/%mIC(B $B!`(B 10) modulo 65536 $B$G=i4|2=$5$l$^$9(B
($B$3$N<0$O$$$/$D$+$N%7%9%F%`$K$"$k!"%^%$%/%mIC$N(B
$B%?%$%^$N2<0L%S%C%H$,0[$J$k$H$$$&LdBj$r2r7h$9$k$?$a$KA*$P$l$^$7$?(B)$B!#(B
$B0l0U$J<1JL;R$,@8@.$5$l$?$H$-!";HMQ$5$l$k%?%$%`%9%?%s%W$O(B
$B%&%'%V%5!<%P$K%j%/%(%9%H$,E~Ce$7$?;~9o$K$J$j$^$9!#(B
$B%+%&%s%?$O<1JL;R$,@8@.$5$l$k$?$S$KA}2C$7$^$9(B
($B$"$U$l$?>l9g$O(B 0 $B$KLa$j$^$9(B)$B!#(B</p>
<p>httpd の子プロセスが作成されると、カウンタは
(その時点のマイクロ秒 ÷ 10) modulo 65536 で初期化されます
(この式はいくつかのシステムにある、マイクロ秒の
タイマの下位ビットが異なるという問題を解決するために選ばれました)。
一意な識別子が生成されたとき、使用されるタイムスタンプは
ウェブサーバにリクエストが到着した時刻になります。
カウンタは識別子が生成されるたびに増加します
(あふれた場合は 0 に戻ります)。</p>
<p>$B%+!<%M%k$O%W%m%;%9$r%U%)!<%/$9$k$H!"$=$l$>$l$N%W%m%;%9$N$?$a$K(B
pid $B$r@8@.$7$^$9!#(Bpid $B$O7+$jJV$5$l$k$3$H$,5v2D$5$l$F$$$^$9(B
(pid $B$NCM$OB?$/$N(B Unix $B$G$O(B 16 $B%S%C%H$G$9$,!"?7$7$$%7%9%F%`$G$O(B
32 $B%S%C%H$K3HD%$5$l$F$$$^$9(B)$B!#(B
$B$G$9$+$i!"$"$kDxEY$N;~4V$,7P2a$9$k$HF1$8(B pid $B$,:F$S;HMQ$5$l$^$9!#(B
$B$7$+$7!"0lICFb$K:F;HMQ$5$l$J$1$l$P!"(B
$B;M$D$NCM$N0l0U@-$OJ]$?$l$^$9!#$D$^$j!"2f!9$O%7%9%F%`$,0lIC4V(B
$B$K(B 65536 $B8D$N%W%m%;%9$r5/F0$7$J$$$H2>Dj$7$F$$$^$9(B ($B$$$/$D$+$N(B Unix
$B$G$O(B 32768 $B%W%m%;%9$G$9$,!"$=$l$G$9$i$[$H$s$I$"$jF@$J$$$G$7$g$&(B)$B!#(B</p>
<p>カーネルはプロセスをフォークすると、それぞれのプロセスのために
pid を生成します。pid は繰り返されることが許可されています
(pid の値は多くの Unix では 16 ビットですが、新しいシステムでは
32 ビットに拡張されています)。
ですから、ある程度の時間が経過すると同じ pid が再び使用されます。
しかし、一秒内に再使用されなければ、
四つの値の一意性は保たれます。つまり、我々はシステムが一秒間
に 65536 個のプロセスを起動しないと仮定しています (いくつかの Unix
では 32768 プロセスですが、それですらほとんどあり得ないでしょう)。</p>
<p>$B2?$i$+$NM}M3$G!"F1$8;~9o$,7+$jJV$5$l$?$H$7$^$7$g$&!#(B
$B$D$^$j!"%7%9%F%`$N;~7W$,68$C$F$$$F!"$b$&0lEY2a5n$N;~9o$K$J$C$F$7$^$C$?(B
($B$b$7$/$O?J$_$9$.$F$$$?$H$-$K!"(B
$B@5$7$$;~9o$KLa$7$?$?$a$K:F$S>-Mh$N;~9o$K$J$C$F$7$^$C$?(B) $B$H$7$^$9!#(B
$B$3$N>l9g!"(Bpid $B$H%?%$%`%9%?%s%W$,:F;HMQ$5$l$k$3$H$,4JC1$K<($5$l$^$9!#(B
$B%+%&%s%?=i4|2=MQ$N4X?t$O!"$3$NLdBj$N2sHr$r<j=u$1$7$h$&$HA*Br$5$l$F$$$^$9!#(B
$BK\Ev$O%+%&%s%?$N=i4|2=$r$9$k$?$a$K%i%s%@%`$J?t;z$r;H$$$?$$$N$G$9$,!"(B
$B$[$H$s$I$N%7%9%F%`$G$O4JC1$K;HMQ$G$-$k?t$OL5$$$3$H$KCm0U$7$F$/$@$5$$(B
(<em>$B$9$J$o$A(B</em>$B!"(Brand ()$B$O;H$($^$;$s!#(Brand () $B$K$O(B seed
$B$rM?$($kI,MW$,$"$j!"(Bseed $B$K$O;~9o$r;H$($^$;$s!#0lICC10L$G$O!"(B
$B$=$N;~9o$O$9$G$K7+$jJV$5$l$F$$$k$+$i$G$9(B)$B!#(B
$B$3$l$O!"40`z$JBP:v$G$O$"$j$^$;$s!#(B</p>
<p>何らかの理由で、同じ時刻が繰り返されたとしましょう。
つまり、システムの時計が狂っていて、もう一度過去の時刻になってしまった
(もしくは進みすぎていたときに、
正しい時刻に戻したために再び将来の時刻になってしまった) とします。
この場合、pid とタイムスタンプが再使用されることが簡単に示されます。
カウンタ初期化用の関数は、この問題の回避を手助けしようと選択されています。
本当はカウンタの初期化をするためにランダムな数字を使いたいのですが、
ほとんどのシステムでは簡単に使用できる数は無いことに注意してください
(<em>すなわち</em>、rand ()は使えません。rand () には seed
を与える必要があり、seed には時刻を使えません。一秒単位では、
その時刻はすでに繰り返されているからです)。
これは、完璧な対策ではありません。</p>
<p>$B$3$NBP:v$O$I$N$/$i$$8z2L$,$"$k$G$7$g$&$+(B?
$B$3$3$G$O!"%^%7%s72$NCf$N0l$D$O:GBg$G0lIC$K(B 500
$B%j%/%(%9%H$r07$&$H2>Dj$7$^$9(B ($B$3$l$r=q$$$F$$$k;~E@$G$OBEEv$J>e8B$G$9!#(B
$BDL>o%7%9%F%`$,$9$k$3$H$O@EE*$J%U%!%$%k$r<h$j$@$9$@$1$G$O$"$j$^$;$s$+$i(B)$B!#(B
$B$=$l$r9T$J$&$?$a$K!"$=$N%^%7%s$OJB9T$7$FMh$k%/%i%$%"%s%H$N?t$K(B
$B1~$8$??t$N;R%W%m%;%9$rMW5a$7$^$9!#(B
$B$7$+$7$J$,$i!"Ha4QE*$K9M$($F!"0l$D$N;R%W%m%;%9$,0lIC$K(B 500
$B%j%/%(%9%H$r07$($k$H$7$^$9!#$=$&$9$k$H!"(B($B0lIC$N@:EY$K$*$$$F(B)
$B;~9o$,F1$8;~$r7+$jJV$9$H!"$3$N;R%W%m%;%9$,%+%&%s%?$NCM$r:F$S;H$$!"(B
$B0l0U@-$,2u$l$k2DG=@-$,(B 1.5% $B$"$j$^$9!#(B
$B$3$l$OHs>o$KHa4QE*$JNc$G!"<B@$3&$NCM$G$O!"$[$H$s$I5/$3$j$=$&$K$"$j$^$;$s!#(B
$B$=$l$G$b$3$l$,5/$3$k2DG=@-$N$"$k$h$&$J%7%9%F%`$J$i!"(B
($B%W%m%0%i%`%3!<%I$rJT=8$7$F(B)
$B%+%&%s%?$r(B 32 $B%S%C%H$K$9$k$N$,NI$$$G$7$g$&!#(B
<p>この対策はどのくらい効果があるでしょうか?
ここでは、マシン群の中の一つは最大で一秒に 500
リクエストを扱うと仮定します (これを書いている時点では妥当な上限です。
通常システムがすることは静的なファイルを取りだすだけではありませんから)。
それを行なうために、そのマシンは並行して来るクライアントの数に
応じた数の子プロセスを要求します。
しかしながら、悲観的に考えて、一つの子プロセスが一秒に 500
リクエストを扱えるとします。そうすると、(一秒の精度において)
時刻が同じ時を繰り返すと、この子プロセスがカウンタの値を再び使い、
一意性が壊れる可能性が 1.5% あります。
これは非常に悲観的な例で、実世界の値では、ほとんど起こりそうにありません。
それでもこれが起こる可能性のあるようなシステムなら、
(プログラムコードを編集して)
カウンタを 32 ビットにするのが良いでしょう。
</p>
<p>$B%5%^!<%?%$%`$K$h$j;~7W$,!VLa$5$l$k!W$3$H$r5$$K$7$F$$$k?M$,(B
$B$$$k$+$b$7$l$^$;$s!#$3$3$G;HMQ$5$l$k;~4V$O(B UTC $B$G$"$j!"(B
$B$=$l$O!V>o$K!W?J$`$N$G$3$3$G$OLdBj$K$J$j$^$;$s!#(Bx86 $B>e$N(B Unix
$B$O$3$N>r7o$rK~$?$9$?$a$KE,@Z$J@_Dj$,I,MW$+$b$7$l$J$$$3$H$K(B
$BCm0U$7$F$/$@$5$$!#%^%6!<%\!<%I$N;~7W$O(B UTC $B$K$J$C$F$$$F!"(B
$BB>$N;~4V$O$=$3$+$iE,@Z$KJd@5$5$l$k$3$H$r2>Dj$G$-$k$h$&$K(B
$B@_Dj$5$l$J$1$l$P$J$j$^$;$s!#$=$N$h$&$J>l9g$G$5$(!"(BNTP
$B$r;H$C$F$$$k$J$i$P%j%V!<%H8e$K$9$0@5$7$$(B UTC $B$N;~4V$K$J$k$G$7$g$&!#(B</p>
<p>サマータイムにより時計が「戻される」ことを気にしている人が
いるかもしれません。ここで使用される時間は UTC であり、
それは「常に」進むのでここでは問題になりません。x86 上の Unix
はこの条件を満たすために適切な設定が必要かもしれないことに
注意してください。マザーボードの時計は UTC になっていて、
他の時間はそこから適切に補正されることを仮定できるように
設定されなければなりません。そのような場合でさえ、NTP
を使っているならばリブート後にすぐ正しい UTC の時間になるでしょう。</p>
<p><code>UNIQUE_ID</code> $B4D6-JQ?t$O(B 112 $B%S%C%H(B (32 $B%S%C%H(B IP
$B%"%I%l%9!"(B32 $B%S%C%H(B pid, 32 $B%S%C%H%?%$%`%9%?%s%W!"(B16
$B%S%C%H%+%&%s%?$N;M$D$NAH(B) $B$r%"%k%U%!%Y%C%H(B <code>[A-Za-z0-9@-]</code>
$B$rMQ$$$F(B MIME $B$N(B base64 $BId9f2=$HF1MM$NJ}K!$K$h$jId9f2=$7!"(B19
$B$NJ8;z$r@8@.$9$k$3$H$K$h$j:n@.$5$l$^$9!#(BMIME $B$N(B base64
$B$N%"%k%U%!%Y%C%H$O<B:]$O(B <code>[A-Za-z0-9+/]</code> $B$G$9$,!"(B
<code>+</code> $B$H(B <code>/</code> $B$H$O(B URL
$B$G$OFCJL$JId9f2=$,I,MW$J$N$G!"$"$^$jK>$^$7$/$"$j$^$;$s!#(B
$BA4$F$NCM$O%M%C%H%o!<%/%P%$%H%*!<%@$GId9f2=$5$l$^$9$N$G!"(B
$BId9f$O0c$C$?%P%$%H%*!<%@$N%"!<%-%F%/%A%c4V$GHf3S2DG=$G$9!#(B
$B<B:]$NId9f2=$N=gHV$O(B: $B%?%$%`%9%?%s%W!"(BIP $B%"%I%l%9!"(Bpid,
$B%+%&%s%?$G$9!#$3$N=g$K$OL\E*$,$"$j$^$9$,!"(B
$B%"%W%j%1!<%7%g%s$OId9f$r2r@O$9$k$Y$-$G$O$J$$$3$H$r6/D4$7$F$*$-$^$9!#(B
$B%"%W%j%1!<%7%g%s$OId9f2=$5$l$?(B <code>UNIQUE_ID</code>
$BA4BN$rF)2aE*$J%H!<%/%s$H$7$F07$&$Y$-$G$9!#(B
<code>UNIQUE_ID</code> $B$OB>$N(B <code>UNIQUE_ID</code>
$B$H$NEy2A@-$rD4$Y$k$?$a$@$1$K$N$_;HMQ$G$-$^$9!#(B</p>
<p><code>UNIQUE_ID</code> 環境変数は 112 ビット (32 ビット IP
アドレス、32 ビット pid, 32 ビットタイムスタンプ、16
ビットカウンタの四つの組) をアルファベット <code>[A-Za-z0-9@-]</code>
を用いて MIME の base64 符号化と同様の方法により符号化し、19
の文字を生成することにより作成されます。MIME の base64
のアルファベットは実際は <code>[A-Za-z0-9+/]</code> ですが、
<code>+</code> <code>/</code> とは URL
では特別な符号化が必要なので、あまり望ましくありません。
全ての値はネットワークバイトオーダで符号化されますので、
符号は違ったバイトオーダのアーキテクチャ間で比較可能です。
実際の符号化の順番は: タイムスタンプ、IP アドレス、pid,
カウンタです。この順には目的がありますが、
アプリケーションは符号を解析するべきではないことを強調しておきます。
アプリケーションは符号化された <code>UNIQUE_ID</code>
全体を透過的なトークンとして扱うべきです。
<code>UNIQUE_ID</code> は他の <code>UNIQUE_ID</code>
との等価性を調べるためだけにのみ使用できます。</p>
<p>$B$3$N=gHV$O>-Mh!"4{B8$N(B <code>UNIQUE_ID</code>
$B$N%G!<%?%Y!<%9$H$N>WFM$r?4G[$9$k$3$H$J$/Id9f$rJQ99$9$k$3$H$,(B
$B2DG=$K$J$k$h$&$KA*Br$7$F$$$^$9!#(B
$B?7$7$$Id9f$O%?%$%`%9%?%s%W$r:G=i$NMWAG$H$7$F;D$9$N$,K>$^$7$/!"(B
$B$=$l0J30$OF1$8%"%k%U%!%Y%C%H$H%S%C%HD9$r;H$&$3$H$,$G$-$^$9!#(B
$B%?%$%`%9%?%s%W$OK\<AE*$KA}2C7ONs$G$9$N$G!"(B
$B%/%i%9%?$NA4$F$N%^%7%s$,%j%/%(%9%H$H%5!<%P5!G=$rDd;_$7$F!"(B
$B8E$$Id9f2=J}<0$r;HMQ$9$k$N$r$d$a$k(B<em>$B%U%i%0IC(B</em>$B$,$"$l$P==J,$G$9!#(B
$B$=$N8e$O!"%j%/%(%9%H$r:F3+$7!"(B
$B?7$7$$Id9f$rH/9T$9$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B</p>
<p>この順番は将来、既存の <code>UNIQUE_ID</code>
のデータベースとの衝突を心配することなく符号を変更することが
可能になるように選択しています。
新しい符号はタイムスタンプを最初の要素として残すのが望ましく、
それ以外は同じアルファベットとビット長を使うことができます。
タイムスタンプは本質的に増加系列ですので、
クラスタの全てのマシンがリクエストとサーバ機能を停止して、
古い符号化方式を使用するのをやめる<em>フラグ秒</em>があれば十分です。
その後は、リクエストを再開し、
新しい符号を発行することができるようになります。</p>
<p>$B2f!9$O$3$l$,!"(B
$B$3$NLdBj$KBP$9$kHf3SE*0\?"@-$N9b$$2r7hK!$@$H9M$($F$$$^$9!#(B
Windows NT $B$N$h$&$J%^%k%A%9%l%C%I$N%7%9%F%`$K3HD%$9$k$3$H$,$G$-$^$9$7!"(B
$B>-MhI,MW$K$J$l$P$5$i$KA}$d$9$3$H$b$G$-$^$9!#(B
ID $B$OI,MW$K1~$8$FD9$/$9$k$3$H$,$G$-$^$9$N$G!"@8@.$5$l$?(B ID
$B$O<B<A>e!"L58B$KM-8z$G$9!#$^$?!"%/%i%9%?$N%^%7%s4V$NDL?.$b;v<B>eI,MW$J$/(B
(NTP $B$K$h$kF14|$N$_$,I,MW$G!"$3$l$O%*!<%P%X%C%I$O$"$^$j$"$j$^$;$s(B)$B!"(Bhttpd
$B%W%m%;%94V$NDL?.$bI,MW$"$j$^$;$s(B ($BDL?.$O%+!<%M%k$K$h$j3d$jEv$F$i$l$?(B
pid $B$NCM$K$h$j0EL[$NFb$K9T$J$o$F$$$^$9(B)$B!#(B
$B$5$i$K8B$i$l$?>u672<$G$O!"(BID $B$O$5$i$KC;$/$9$k$3$H$,$G$-$^$9$,!"(B
$B$h$jB?$/$N>pJs$r2>Dj$9$kI,MW$,$G$F$-$^$9(B ($BNc$($P!"(B32 $B%S%C%H(B
IP $B%"%I%l%9$O$I$N%5%$%H$K$*$$$F$b2a>j$J>pJs$G$9$,!"(B
$B$=$l$NBe$o$j$K$J$k0\?"@-$N$"$k$b$N$O$"$j$^$;$s(B)$B!#(B</p>
<p>我々はこれが、
この問題に対する比較的移植性の高い解決法だと考えています。
Windows NT のようなマルチスレッドのシステムに拡張することができますし、
将来必要になればさらに増やすこともできます。
ID は必要に応じて長くすることができますので、生成された ID
は実質上、無限に有効です。また、クラスタのマシン間の通信も事実上必要なく
(NTP による同期のみが必要で、これはオーバヘッドはあまりありません)、httpd
プロセス間の通信も必要ありません (通信はカーネルにより割り当てられた
pid の値により暗黙の内に行なわています)。
さらに限られた状況下では、ID はさらに短くすることができますが、
より多くの情報を仮定する必要がでてきます (例えば、32 ビット
IP アドレスはどのサイトにおいても過剰な情報ですが、
それの代わりになる移植性のあるものはありません)。</p>
</section>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990:657842 (outdated) -->
@@ -23,81 +23,81 @@
<modulesynopsis metafile="mod_userdir.xml.meta">
<name>mod_userdir</name>
<description>$B%f!<%6@lMQ$N%G%#%l%/%H%j$rDs6!(B
<description>ユーザ専用のディレクトリを提供
</description>
<status>Base</status>
<sourcefile>mod_userdir.c</sourcefile>
<identifier>userdir_module</identifier>
<summary>
<p>$B$3$N%b%8%e!<%k$O!"(B
<p>このモジュールは、
<code>http://example.com/~user/</code>
$B9=J8$r;H$C$F%f!<%6@lMQ%G%#%l%/%H%j$K%"%/%;%9$G$-$k$h$&$K$7$^$9!#(B</p>
構文を使ってユーザ専用ディレクトリにアクセスできるようにします。</p>
</summary>
<seealso><a href="../urlmapping.html">URL $B$+$i(B
$B%U%!%$%k%7%9%F%`$X$N%^%C%T%s%0(B</a></seealso>
<seealso><a href="../urlmapping.html">URL から
ファイルシステムへのマッピング</a></seealso>
<seealso><a href="../howto/public_html.html">public_html
$B%A%e!<%H%j%"%k(B</a></seealso>
チュートリアル</a></seealso>
<directivesynopsis>
<name>UserDir</name>
<description>$B%f!<%6@lMQ%G%#%l%/%H%j$N0LCV(B</description>
<description>ユーザ専用ディレクトリの位置</description>
<syntax>UserDir <em>directory-filename</em></syntax>
<contextlist><context>server config</context>
<context>virtual host</context></contextlist>
<usage>
<p><directive>UserDir</directive> $B%G%#%l%/%F%#%V$O!"(B
$B%f!<%6$N%I%-%e%a%s%H$X$N%j%/%(%9%H$r<u$1$?;~$K;H$&(B
$B%f!<%6$N%[!<%`%G%#%l%/%H%jCf$N!"<B:]$N%G%#%l%/%H%j$r(B
$B@_Dj$7$^$9!#(B
<em>directory-filename</em> $B$K$O<!$N$I$l$+$r;XDj$7$^$9(B:</p>
<p><directive>UserDir</directive> ディレクティブは、
ユーザのドキュメントへのリクエストを受けた時に使う
ユーザのホームディレクトリ中の、実際のディレクトリを
設定します。
<em>directory-filename</em> には次のどれかを指定します:</p>
<ul>
<li>$B%G%#%l%/%H%jL>$+2<$K<($9$h$&$J%Q%?!<%s!#(B</li>
<li>ディレクトリ名か下に示すようなパターン。</li>
<li><code>disabled</code> $B%-!<%o!<%I!#(B
<code>enabled</code> $B%-!<%o!<%I(B ($B2<5-;2>H(B) $B$GL@<(E*$K(B
$B;XDj$5$l$?%f!<%60J30$N(B
<em>$BA4$F$N(B</em>$B%f!<%6L>(B-$B%G%#%l%/%H%jJQ49$r(B
$B$7$J$$$h$&$K$7$^$9!#(B</li>
<li><code>disabled</code> キーワード。
<code>enabled</code> キーワード (下記参照) で明示的に
指定されたユーザ以外の
<em>全ての</em>ユーザ名-ディレクトリ変換を
しないようにします。</li>
<li><code>disabled</code> $B%-!<%o!<%I$H!"%9%Z!<%96h@Z$j$N%f!<%6L>%j%9%H!#(B
$B$3$N%j%9%HCf$K4^$^$l$k%f!<%6L>$KBP$7$F$O!"$?$H$((B
<code>enabled</code> $B@a$K$"$C$?$H$7$F$b!"(B
<em>$B7h$7$F(B</em>$B%G%#%l%/%H%jJQ49$O9T$o$l$^$;$s!#(B</li>
<li><code>disabled</code> キーワードと、スペース区切りのユーザ名リスト。
このリスト中に含まれるユーザ名に対しては、たとえ
<code>enabled</code> 節にあったとしても、
<em>決して</em>ディレクトリ変換は行われません。</li>
<li><code>enebled</code> $B%-!<%o!<%I$H%9%Z!<%96h@Z$j$N%f!<%6L>%j%9%H!#(B
$BA4BN$G$OJQ49$,L58z$K$J$C$F$$$?$H$$$?$H$7$F$b!"(B
$B$3$l$i$N%f!<%6L>$K$O%G%#%l%/%H%jJQ49$,9T$o$l$^$9!#(B
$B$?$@$7!"(B<code>disabled</code> $B@a$K$b$"$l$PJQ49$O$5$l$^$;$s!#(B
<li><code>enebled</code> キーワードとスペース区切りのユーザ名リスト。
全体では変換が無効になっていたといたとしても、
これらのユーザ名にはディレクトリ変換が行われます。
ただし、<code>disabled</code> 節にもあれば変換はされません。
</li>
</ul>
<p>$B$b$7(B <code>enabled</code> $B$b(B <code>disabled</code>
$B%-!<%o!<%I$b(B <code>UserDir</code> $B$K8=$o$l$F$$$J$1$l$P!"(B
$B0z?t$O%U%!%$%kL>%Q%?!<%s$H$7$F07$o$l!"(B
$BL>A0$+$i%G%#%l%/%H%j$X$NJQ49$N;XDj$r9T$J$&;~$K;H$o$l$^$9!#(B
<p>もし <code>enabled</code> <code>disabled</code>
キーワードも <code>UserDir</code> に現われていなければ、
引数はファイル名パターンとして扱われ、
名前からディレクトリへの変換の指定を行なう時に使われます。
<code>http://www.foo.com/~bob/one/two.html</code>
$B$X$N%j%/%(%9%H$O<!$N$h$&$KJQ49$5$l$^$9(B:</p>
へのリクエストは次のように変換されます:</p>
<table>
<tr><th>UserDir $B%G%#%l%/%F%#%V(B</th>
<th>$BJQ498e$N%Q%9(B</th></tr>
<tr><th>UserDir ディレクティブ</th>
<th>変換後のパス</th></tr>
<tr><td>UserDir public_html</td><td>~bob/public_html/one/two.html</td></tr>
<tr><td>UserDir /usr/web</td><td>/usr/web/bob/one/two.html</td></tr>
<tr><td>UserDir /home/*/www</td><td>/home/bob/www/one/two.html</td></tr>
</table>
<p>$B<!$N%G%#%l%/%F%#%V$O%/%i%$%"%s%H$KBP$7$F%j%@%$%l%/%H$r(B
$BAw?.$7$^$9(B:</p>
<p>次のディレクティブはクライアントに対してリダイレクトを
送信します:</p>
<table>
<tr><th>UserDir $B%G%#%l%/%F%#%V(B</th>
<th>$BJQ498e$N%Q%9(B</th></tr>
<tr><th>UserDir ディレクティブ</th>
<th>変換後のパス</th></tr>
<tr><td>UserDir http://www.foo.com/users</td><td>http://www.foo.com/users/bob/one/two.html</td></tr>
<tr><td>UserDir
http://www.foo.com/*/usr</td><td>http://www.foo.com/bob/usr/one/two.html</td></tr>
@@ -106,63 +106,63 @@ http://www.foo.com/~*/</td><td>http://www.foo.com/~bob/one/two.html</td></tr>
</table>
<note>
<strong>$B$3$N%G%#%l%/%F%#%V$r;H$&$H$-$OCm0U$7$F$/$@$5$$(B;
"<code>UserDir ./</code>" $B$O(B
"<code>/~root</code>" $B$+$i(B "<code>/</code>" $B$X%^%C%W$7$^$9$,!"(B
$B$3$l$OK>$^$7$$F0:n$G$O$J$$$G$7$g$&!#(B
"<code>UserDir disabled root</code>" $B@k8@$r(B
$B@_Dj$NCf$K4^$a$F$*$/$3$H$r6/$/$*A&$a$7$^$9!#(B
$BDI2C>pJs$K(B <directive module="core">Directory</directive>
$B%G%#%l%/%F%#%V$d(B
<a href="../misc/security_tips.html">$B%;%-%e%j%F%#(B
Tips</a> $B$N%Z!<%8$b$4Mw2<$5$$!#(B</strong>
<strong>このディレクティブを使うときは注意してください;
"<code>UserDir ./</code>"
"<code>/~root</code>" から "<code>/</code>" へマップしますが、
これは望ましい動作ではないでしょう。
"<code>UserDir disabled root</code>" 宣言を
設定の中に含めておくことを強くお薦めします。
追加情報に <directive module="core">Directory</directive>
ディレクティブや
<a href="../misc/security_tips.html">セキュリティ
Tips</a> のページもご覧下さい。</strong>
</note>
<p>$BDI2C$NNc(B:</p>
<p>追加の例:</p>
<p>$B>/?t$N%f!<%6$N$_$,(B <code>UserDir</code>
$B%G%#%l%/%H%j$rMxMQ$7!"$=$l0J30$K$OMxMQ$5$;$?$/$J$$>l9g$O(B
$B<!$r;H$$$^$7$g$&(B:</p>
<p>少数のユーザのみが <code>UserDir</code>
ディレクトリを利用し、それ以外には利用させたくない場合は
次を使いましょう:</p>
<example>
UserDir disabled<br />
UserDir enabled user1 user2 user3
</example>
<p>$BBgItJ,$N%f!<%6$O(B <code>UserDir</code> $B%G%#%l%/%H%j$rMxMQ$9$k$1$l$I!"(B
$B>/?t$N?M$OIT5v2D$K$7$?$$>l9g$O!"<!$r;H$$$^$7$g$&(B:</p>
<p>大部分のユーザは <code>UserDir</code> ディレクトリを利用するけれど、
少数の人は不許可にしたい場合は、次を使いましょう:</p>
<example>
UserDir enabled<br />
UserDir disabled user4 user5 user6
</example>
<p>$BB>$N%f!<%6%G%#%l%/%H%j$r;XDj$9$k$3$H$b$G$-$^$9!#(B
$B<!$N$h$&$J%3%^%s%I$r;H$&$H(B:</p>
<p>他のユーザディレクトリを指定することもできます。
次のようなコマンドを使うと:</p>
<example>
Userdir public_html /usr/web http://www.foo.com/
</example>
<p>http://www.foo.com/~bob/one/two.html $B$X$N%j%/%(%9%H$O$^$:(B
~bob/public_html/one/two.html $B$N%Z!<%8$rD4$Y!"$=$N<!$K(B
/usr/web/bob/one/two.html $B$rD4$Y!":G8e$K(B http://www.foo.com/bob/one/two.html
$B$X$N%j%@%$%l%/%H$rAw$j$^$9!#(B</p>
<p>http://www.foo.com/~bob/one/two.html へのリクエストはまず
~bob/public_html/one/two.html のページを調べ、その次に
/usr/web/bob/one/two.html を調べ、最後に http://www.foo.com/bob/one/two.html
へのリダイレクトを送ります。</p>
<p>$B%j%@%$%l%/%H$r2C$($k>l9g$O!"%j%9%H$N:G8e$NA*Br;h$G$J$1$l$P$J$j$^$;$s!#(B
Apache $B$O%j%@%$%l%/%H$,@.8y$9$k$+$I$&$+$r7h$a$k$3$H$O$G$-$^$;$s$N$G!"(B
$B%j%9%H$NA0$NJ}$K%j%@%$%l%/%H$r=q$/$H!"$=$l$,I,$:;HMQ$5$l$kA*Br;h$K(B
$B$J$C$F$7$^$$$^$9!#(B</p>
<p>リダイレクトを加える場合は、リストの最後の選択肢でなければなりません。
Apache はリダイレクトが成功するかどうかを決めることはできませんので、
リストの前の方にリダイレクトを書くと、それが必ず使用される選択肢に
なってしまいます。</p>
<p>2.1.4 $B0J9_$G$O!"%f!<%6%G%#%l%/%H%jCV495!G=$O%G%U%)%k%H$G$O5/F0$7$^$;$s!#(B
$B$=$l0JA0$N%P!<%8%g%s$G$O!"(B<directive module="mod_userdir">UserDir</directive>
$B%G%#%l%/%F%#%V$,B8:_$7$J$1$l$P!"(B<code>UserDir public_html</code>
$B$G$"$k$H2>Dj$5$l$F$$$^$7$?!#(B</p>
<p>2.1.4 以降では、ユーザディレクトリ置換機能はデフォルトでは起動しません。
それ以前のバージョンでは、<directive module="mod_userdir">UserDir</directive>
ディレクティブが存在しなければ、<code>UserDir public_html</code>
であると仮定されていました。</p>
</usage>
<seealso><a href="../howto/public_html.html">public_html
$B%A%e!<%H%j%"%k(B</a></seealso>
チュートリアル</a></seealso>
</directivesynopsis>
</modulesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:420993 (outdated) -->
@@ -22,21 +22,21 @@
<modulesynopsis metafile="mod_version.xml.meta">
<name>mod_version</name>
<description>$B%P!<%8%g%s0MB8$N@_Dj(B</description>
<description>バージョン依存の設定</description>
<status>Extension</status>
<sourcefile>mod_version.c</sourcefile>
<identifier>version_module</identifier>
<compatibility>$B%P!<%8%g%s(B 2.1 $B0J9_(B</compatibility>
<compatibility>バージョン 2.1 以降</compatibility>
<summary>
<p>$BMM!9$J%P!<%8%g%s$N(B httpd $B$N0[$J$k@_Dj$r07$&$3$H$K$J$k!"(B
$B%F%9%H%9%$!<%H$dBg5,LO%M%C%H%o!<%/$G$N;HMQ$N$?$a$K@_7W$5$l$F$$$^$9!#(B
$B$3$N%b%8%e!<%k$O?7$7$$%3%s%F%J(B $B!=(B <directive
type="section" module="mod_version">IfVersion</directive> $B$r(B
$BDs6!$7$^$9!#$3$l$r;H$&$H!"?t;z$NHf3S$d@55,I=8=$K$h$k=@Fp$J(B
$B%P!<%8%g%s%A%'%C%/$,$G$-$k$h$&$K$J$j$^$9!#(B</p>
<p>様々なバージョンの httpd の異なる設定を扱うことになる、
テストスイートや大規模ネットワークでの使用のために設計されています。
このモジュールは新しいコンテナ ― <directive
type="section" module="mod_version">IfVersion</directive>
提供します。これを使うと、数字の比較や正規表現による柔軟な
バージョンチェックができるようになります。</p>
<example><title>$BNc(B</title>
<example><title></title>
&lt;IfVersion 2.1.0&gt;<br />
<indent>
# current httpd version is exactly 2.1.0<br />
@@ -50,12 +50,12 @@
&lt;/IfVersion&gt;
</example>
<p>$B>\:Y$O0J2<$rFI$s$G$/$@$5$$!#(B</p>
<p>詳細は以下を読んでください。</p>
</summary>
<directivesynopsis type="section">
<name>IfVersion</name>
<description>$B%P!<%8%g%s0MB8$N@_Dj$rF~$l$k(B</description>
<description>バージョン依存の設定を入れる</description>
<syntax>&lt;IfVersion [[!]<var>operator</var>] <var>version</var>&gt; ...
&lt;/IfVersion&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
@@ -63,30 +63,30 @@
<override>All</override>
<usage>
<p><directive type="section">IfVersion</directive> $B$O(B <program>httpd</program> $B$N%P!<%8%g%s(B
$B$,4p=`$rK~$?$7$?$H$-$K$N$_<B9T$5$;$?$$%G%#%l%/%F%#%V$r0O$_$^$9!#(B
$BDL>o$N(B ($B?tCM(B) $BHf3S$N$H$-$O(B <var>version</var> $B0z?t$O(B
<code><var>major</var>[.<var>minor</var>[.<var>patch</var>]]</code> $B$H$$$&(B
$B7A<0!"Nc$($P!"(B<code>2.1.0</code> $B$d(B <code>2.2</code> $B$H$J$j$^$9!#(B
<var>minor</var> $B$H(B <var>patch</var> $B$O>JN,2DG=$G$9!#>JN,$5$l$?>l9g$O!"(B
0 $B$r;XDj$7$?$b$N$H$_$J$5$l$^$9!#Hf3S$K$O<!$N?tCM(B <var>operator</var> $B$r(B
$B;XDj$G$-$^$9(B:</p>
<p><directive type="section">IfVersion</directive> <program>httpd</program> のバージョン
が基準を満たしたときにのみ実行させたいディレクティブを囲みます。
通常の (数値) 比較のときは <var>version</var> 引数は
<code><var>major</var>[.<var>minor</var>[.<var>patch</var>]]</code> という
形式、例えば、<code>2.1.0</code> <code>2.2</code> となります。
<var>minor</var> <var>patch</var> は省略可能です。省略された場合は、
0 を指定したものとみなされます。比較には次の数値 <var>operator</var>
指定できます:</p>
<table style="zebra" border="1">
<tr><th><var>operator</var></th><th>$B@bL@(B</th></tr>
<tr><td><code>=</code> $B$H(B <code>==</code></td>
<td>$BF1$8(B httpd $B%P!<%8%g%s(B</td></tr>
<tr><th><var>operator</var></th><th>説明</th></tr>
<tr><td><code>=</code> <code>==</code></td>
<td>同じ httpd バージョン</td></tr>
<tr><td><code>&gt;</code></td>
<td>$B$h$jBg$-$$(B httpd $B%P!<%8%g%s(B</td></tr>
<td>より大きい httpd バージョン</td></tr>
<tr><td><code>&gt;=</code></td>
<td>$B;XDj0J>e$N(B httpd $B%P!<%8%g%s(B</td></tr>
<td>指定以上の httpd バージョン</td></tr>
<tr><td><code>&lt;</code></td>
<td>$B;XDjL$K~$N(B httpd $B%P!<%8%g%s(B</td></tr>
<td>指定未満の httpd バージョン</td></tr>
<tr><td><code>&lt;=</code></td>
<td>$B;XDj0J2<$N(B httpd $B%P!<%8%g%s(B</td></tr>
<td>指定以下の httpd バージョン</td></tr>
</table>
<example><title>$BNc(B</title>
<example><title></title>
&lt;IfVersion >= 2.1&gt;<br />
<indent>
# this happens only in versions greater or<br />
@@ -95,20 +95,20 @@
&lt;/IfVersion&gt;
</example>
<p>$B?tCMHf3S$K2C$($F!"(Bhttp $B$N%P!<%8%g%sHV9f$KBP$7$F@55,I=8=$K$h$k(B
$B%^%C%A%s%0$,$G$-$^$9!#Fs<oN`$N=q$-J}$,$"$j$^$9(B:</p>
<p>数値比較に加えて、http のバージョン番号に対して正規表現による
マッチングができます。二種類の書き方があります:</p>
<table style="zebra" border="1">
<tr><th><var>operator</var></th><th>$B@bL@(B</th></tr>
<tr><th><var>operator</var></th><th>説明</th></tr>
<tr><td><code>=</code> or <code>==</code></td>
<td><var>version</var> $B$O(B
<code>/<var>regex</var>/</code> $B7A<0(B</td></tr>
<td><var>version</var>
<code>/<var>regex</var>/</code> 形式</td></tr>
<tr><td><code>~</code></td>
<td><var>version</var> $B$O(B
<code><var>regex</var></code> $B7A<0(B</td></tr>
<td><var>version</var>
<code><var>regex</var></code> 形式</td></tr>
</table>
<example><title>$BNc(B</title>
<example><title></title>
&lt;IfVersion = /^2.1.[01234]$/&gt;<br />
<indent>
# e.g. workaround for buggy versions
@@ -116,8 +116,8 @@
&lt;/IfVersion&gt;
</example>
<p>$B%^%C%A%s%0$NH]Dj$rI=8=$9$k$?$a$K!"$9$Y$F$N%*%Z%l!<%?$OA0$K(B
$B46C2Id(B (<code>!</code>)$B$rIU$1$k$3$H$,$G$-$^$9(B:</p>
<p>マッチングの否定を表現するために、すべてのオペレータは前に
感嘆符 (<code>!</code>)を付けることができます:</p>
<example>
&lt;IfVersion !~ ^2.1.[01234]$&gt;<br />
@@ -127,8 +127,8 @@
&lt;/IfVersion&gt;
</example>
<p><var>operator</var> $B$,>JN,$5$l$?$H$-$O(B <code>=</code> $B$H(B
$B$_$J$5$l$^$9!#(B</p>
<p><var>operator</var> が省略されたときは <code>=</code>
みなされます。</p>
</usage>
</directivesynopsis>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -22,88 +22,88 @@
<manualpage metafile="module-dict.xml.meta">
<title>Apache $B%b%8%e!<%k$N2r@b$G;HMQ$9$kMQ8l(B</title>
<title>Apache モジュールの解説で使用する用語</title>
<summary>
<p>$B$3$NJ8=q$O(B Apache $B$N3F(B <a href="./">$B%b%8%e!<%k(B</a> $B$r@bL@$9$k$?$a$K(B
$B;H$o$l$F$$$kMQ8l$r@bL@$7$^$9!#(B</p>
<p>この文書は Apache の各 <a href="./">モジュール</a> を説明するために
使われている用語を説明します。</p>
</summary>
<section id="Description"><title>$B@bL@(B</title>
<section id="Description"><title>説明</title>
<p>$B%b%8%e!<%k$NL\E*$NC;$$@bL@!#(B</p>
<p>モジュールの目的の短い説明。</p>
</section>
<section id="Status"><title>$B%9%F!<%?%9(B</title>
<section id="Status"><title>ステータス</title>
<p>$B$3$l$O!"$=$N%b%8%e!<%k$,(B Apache
$B%&%'%V%5!<%P$K$I$l$/$i$$L)@\$KAH$_9~$^$l$F$$$k$+$r<($7$^$9!#(B
$B8@$$49$($l$P!"%b%8%e!<%k$rAH$_9~$_!"$=$N5!G=$rMxMQ$9$k$?$a$K!"(B
$B%5!<%P$r:F%3%s%Q%$%k$9$kI,MW$,$"$k$+$b$7$l$J$$$H$$$&$3$H$r<($7$^$9!#(B
$B$3$NB0@-$,<h$jF@$kCM$O0J2<$N$b$N$G$9(B:</p>
<p>これは、そのモジュールが Apache
ウェブサーバにどれくらい密接に組み込まれているかを示します。
言い換えれば、モジュールを組み込み、その機能を利用するために、
サーバを再コンパイルする必要があるかもしれないということを示します。
この属性が取り得る値は以下のものです:</p>
<dl>
<dt>MPM</dt>
<dd>$B%9%F!<%?%9$,(B "MPM" $B$N%b%8%e!<%k$O(B<a
href="../mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B</a>$B$G$9!#(B
$BB>$N<oN`$N%b%8%e!<%k$H$O0c$C$F!"(BApache $B$O>o$K(B MPM $B$r0l$D$@$1(B
$B;HMQ$7B3$1$^$9!#$3$N<oN`$N%b%8%e!<%k$O4pK\E*$J%j%/%(%9%H$N07$$$H(B
$B%G%#%9%Q%C%A$r9T$J$$$^$9!#(B</dd>
<dd>ステータスが "MPM" のモジュールは<a
href="../mpm.html">マルチプロセッシングモジュール</a>です。
他の種類のモジュールとは違って、Apache は常に MPM を一つだけ
使用し続けます。この種類のモジュールは基本的なリクエストの扱いと
ディスパッチを行ないます。</dd>
<dt>Base</dt>
<dd>$B%9%F!<%?%9$,(B &quot;Base&quot;
$B$N%b%8%e!<%k$O!"%G%U%)%k%H$G%3%s%Q%$%k$5$l$F$o$6$o$6@_Dj$+$i(B
$B%b%8%e!<%k$r:o=|$7$F$$$J$$8B$j!"DL>o$OMxMQ2DG=$G$9!#(B
<dd>ステータスが &quot;Base&quot;
のモジュールは、デフォルトでコンパイルされてわざわざ設定から
モジュールを削除していない限り、通常は利用可能です。
</dd>
<dt>Extension</dt>
<dd>$B%9%F!<%?%9$,(B &quot;Extension&quot; $B$N%b%8%e!<%k$O!"(B
$B%G%U%)%k%H$G$O%3%s%Q%$%k$5$l$:!"%5!<%P$K$bFI$_9~$^$l$^$;$s!#(B
$B$=$N%b%8%e!<%k$H$=$N5!G=$rM-8z$K$9$k$K$O!"(B
$B%5!<%P$r%S%k%I$9$k$?$a$N@_Dj$rJQ99$7$F!"(BApache
$B$r:F%3%s%Q%$%k$9$kI,MW$,$"$j$^$9!#(B</dd>
<dd>ステータスが &quot;Extension&quot; のモジュールは、
デフォルトではコンパイルされず、サーバにも読み込まれません。
そのモジュールとその機能を有効にするには、
サーバをビルドするための設定を変更して、Apache
を再コンパイルする必要があります。</dd>
<dt>Experimental</dt>
<dd>$B%9%F!<%?%9$,(B &quot;Experimental&quot; $B$N%b%8%e!<%k$O!"(B
Apache $BG[I[J*$KF1:-$5$l$F$$$^$9$,!"(B
$B;HMQ$9$k>l9g$O<+8J@UG$$G9T$J$&I,MW$,$"$j$^$9!#(B
$B$=$N%b%8%e!<%k$O!"%I%-%e%a%s%H$b40@.$K8~$1$F:n@.Cf$G$9$7!"(B
$B%5%]!<%H$5$l$k$F$$$k$H$O8B$j$^$;$s!#(B</dd>
<dd>ステータスが &quot;Experimental&quot; のモジュールは、
Apache 配布物に同梱されていますが、
使用する場合は自己責任で行なう必要があります。
そのモジュールは、ドキュメントも完成に向けて作成中ですし、
サポートされるているとは限りません。</dd>
<dt>External</dt>
<dd>$B%9%F!<%?%9$,(B &quot;External&quot; $B$N%b%8%e!<%k$O!"4pK\(B Apache
$BG[I[$KF1:-$5$l$^$;$s(B (&quot;$B%5!<%I%Q!<%F%#!<%b%8%e!<%k(B&quot;)$B!#(B
$B$=$N$?$a!"2f!9$K@UG$$O$"$j$^$;$s$7!"(B
$B$=$N%b%8%e!<%k$N%5%]!<%H$b$7$F$$$^$;$s!#(B</dd>
<dd>ステータスが &quot;External&quot; のモジュールは、基本 Apache
配布に同梱されません (&quot;サードパーティーモジュール&quot;)。
そのため、我々に責任はありませんし、
そのモジュールのサポートもしていません。</dd>
</dl>
</section>
<section id="SourceFile"><title>$B%=!<%9%U%!%$%k(B</title>
<section id="SourceFile"><title>ソースファイル</title>
<p>$B$3$l$OC1=c$K!"(B
$B$=$N%b%8%e!<%k$KI,MW$J%3!<%I$r4^$`%=!<%9%U%!%$%k$NL>A0$rNs5s$7$?$b$N$G$9!#(B
$B$3$l$O!"(B<directive module="core" type="section">IfModule</directive>
$B%G%#%l%/%F%#%V$G;HMQ$5$l$kL>A0$G$b$"$j$^$9!#(B
<p>これは単純に、
そのモジュールに必要なコードを含むソースファイルの名前を列挙したものです。
これは、<directive module="core" type="section">IfModule</directive>
ディレクティブで使用される名前でもあります。
</p>
</section>
<section id="ModuleIdentifier"><title>$B%b%8%e!<%k<1JL;R(B</title>
<section id="ModuleIdentifier"><title>モジュール識別子</title>
<p>$B$3$NJ8;zNs$O!"%b%8%e!<%k$NF0E*FI$_9~$_$r9T$J$&$H$-$K;HMQ$9$k(B <directive
<p>この文字列は、モジュールの動的読み込みを行なうときに使用する <directive
module="mod_so">LoadModule</directive>
$B%G%#%l%/%F%#%V$K$*$$$F;HMQ$5$l$k%b%8%e!<%k$N<1JL;R$G$9!#(B
$B>\$7$/=q$/$H!"%=!<%9%U%!%$%kFb$N(B module $B%?%$%W$N30ItJQ?t$NL>A0$G$9!#(B
ディレクティブにおいて使用されるモジュールの識別子です。
詳しく書くと、ソースファイル内の module タイプの外部変数の名前です。
</p>
</section>
<section id="Compatibility"><title>$B8_49@-(B</title>
<section id="Compatibility"><title>互換性</title>
<p>$B$"$k%b%8%e!<%k$,(B Apache $B%P!<%8%g%s(B 2
$B$NG[I[$K4^$^$l$F$$$J$+$C$?>l9g!"(B
$B$=$N%b%8%e!<%k$,F3F~$5$l$?%P!<%8%g%s$,$3$3$K=q$+$l$F$$$^$9!#(B
$B$^$?!"%b%8%e!<%k$,FCDj$N%W%i%C%H%U%)!<%`$K$N$_B8:_$9$k$H$-$b(B
$B>\:Y$O$3$3$K=q$+$l$F$$$^$9!#(B</p>
<p>あるモジュールが Apache バージョン 2
の配布に含まれていなかった場合、
そのモジュールが導入されたバージョンがここに書かれています。
また、モジュールが特定のプラットフォームにのみ存在するときも
詳細はここに書かれています。</p>
</section>
</manualpage>

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -24,17 +24,17 @@
<name>mpm_winnt</name>
<description>Windows NT
$B8~$1$K:GE,2=$5$l$?%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B</description>
向けに最適化されたマルチプロセッシングモジュール</description>
<status>MPM</status>
<sourcefile>mpm_winnt.c</sourcefile>
<identifier>mpm_winnt_module</identifier>
<summary>
<p>$B$3$N%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)
$B$O(B Windows NT $B$G$N%G%U%)%k%H$K$J$j$^$9!#(B
$B0l$D$N@)8fMQ%W%m%;%9$rMQ$$!"$3$l$,0l$D$N;R%W%m%;%9$r5/F0$7!"(B
$B$=$7$F;R%W%m%;%9$,%j%/%(%9%H$r<h$j07$&$?$a$K%9%l%C%I$r(B
$B5/F0$7$^$9!#(B</p>
<p>このマルチプロセッシングモジュール (MPM)
Windows NT でのデフォルトになります。
一つの制御用プロセスを用い、これが一つの子プロセスを起動し、
そして子プロセスがリクエストを取り扱うためにスレッドを
起動します。</p>
</summary>
<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
@@ -62,20 +62,20 @@
<directivesynopsis>
<name>Win32DisableAcceptEx</name>
<description>$B%M%C%H%o!<%/@\B3$N<u$1IU$1$K(B accept() $B$r(BAcceptEx $B$NBe$o$j$K;H$&(B</description>
<description>ネットワーク接続の受け付けに accept() AcceptEx の代わりに使う</description>
<syntax>Win32DisableAcceptEx</syntax>
<default>AcceptEx() $B$O%G%U%)%k%H$GM-8z$K$J$C$F$$$^$9!#(BAcceptEx() $B$rL58z$K$9$k(B
$B$?$a$K$3$N%G%#%l%/%F%#%V$r;H$$$^$9!#(B</default>
<default>AcceptEx() はデフォルトで有効になっています。AcceptEx() を無効にする
ためにこのディレクティブを使います。</default>
<contextlist><context>server config</context></contextlist>
<compatibility>2.0.49 $B%P!<%8%g%s0J9_$G;HMQ2DG=(B</compatibility>
<compatibility>2.0.49 バージョン以降で使用可能</compatibility>
<usage>
<p>AcceptEx() $B$O(B Microsoft WinSock v2 API $B$G!">l9g$K$h$C$F$O(B
BSD $B7A<0$N(B <code>accept()</code> API $B$h$j$b$h$$@-G=$rH/4x$7$^$9!#(B
$B$h$/;H$o$l$F$$$k(B Windows $B@=IJ$NCf$G!"FC$K%&%#%k%9%9%-%c%J$d(B VPN $B%Q%C%1!<%8(B
$B$NCf$K$O!"%P%0$,860x$G(B <code>AcceptEx()</code> $B$NE,@Z$JF0:n$rK8$2$k$b$N$,$"$j$^$9!#(B
$B0J2<$N$h$&$J%(%i!<$KAx6x$7$?>l9g$O!"$3$N%G%#%l%/%F%#%V$r;HMQ$7$F(B
<code>AcceptEx()</code> $B$r;HMQ$7$J$$$h$&$K$7$F$/$@$5$$!#(B</p>
<p>AcceptEx() Microsoft WinSock v2 API で、場合によっては
BSD 形式の <code>accept()</code> API よりもよい性能を発揮します。
よく使われている Windows 製品の中で、特にウィルススキャナや VPN パッケージ
の中には、バグが原因で <code>AcceptEx()</code> の適切な動作を妨げるものがあります。
以下のようなエラーに遭遇した場合は、このディレクティブを使用して
<code>AcceptEx()</code> を使用しないようにしてください。</p>
<example>
[error] (730038)An operation was attempted on something that is

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -23,76 +23,76 @@
<modulesynopsis metafile="prefork.xml.meta">
<name>prefork</name>
<description>$B%9%l%C%I$r;H$o$:!"@h9T$7$F(B fork $B$r9T$J$&%&%'%V%5!<%P$r<BAu(B
<description>スレッドを使わず、先行して fork を行なうウェブサーバを実装
</description>
<status>MPM</status>
<sourcefile>prefork.c</sourcefile>
<identifier>mpm_prefork_module</identifier>
<summary>
<p>$B$3$N%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM) $B$O!"(B
Unix $B>e$G$N(B Apache 1.3 $B$N%G%U%)%k%H$N5sF0$HHs>o$K$h$/;w$?J}K!$G(B
$B%j%/%(%9%H$r=hM}$9$k!"%9%l%C%I$r;H$o$:!"@h9T$7$F(B fork $B$r9T$J$&(B
$B%&%'%V%5!<%P$r<BAu$7$F$$$^$9!#(B
$B%9%l%C%I%;!<%U$G$J$$%i%$%V%i%j$H$N8_49@-$r$H$k$?$a$K!"(B
$B%9%l%C%I$rHr$1$kI,MW$N$"$k%5%$%H$G$O!"$3$N%b%8%e!<%k$N;HMQ$,E,@Z$G$7$g$&!#(B
$B$"$k%j%/%(%9%H$GH/@8$7$?LdBj$,B>$N%j%/%(%9%H$K1F6A$7$J$$$h$&$K!"(B
$B8D!9$N%j%/%(%9%H$rC1N%$9$k$N$K$b!":GE,$J(B MPM $B$G$9!#(B</p>
<p>このマルチプロセッシングモジュール (MPM) は、
Unix 上での Apache 1.3 のデフォルトの挙動と非常によく似た方法で
リクエストを処理する、スレッドを使わず、先行して fork を行なう
ウェブサーバを実装しています。
スレッドセーフでないライブラリとの互換性をとるために、
スレッドを避ける必要のあるサイトでは、このモジュールの使用が適切でしょう。
あるリクエストで発生した問題が他のリクエストに影響しないように、
個々のリクエストを単離するのにも、最適な MPM です。</p>
<p>$B$3$N(B MPM $B$OHs>o$K<+N'E*$J$N$G!"$3$N(B MPM $B$N@_Dj%G%#%l%/%F%#%V$r(B
$BD4@0$9$kI,MW$O$[$H$s$I$J$$$G$7$g$&!#$b$C$H$b=EMW$J$3$H$O!"(B
<p>この MPM は非常に自律的なので、この MPM の設定ディレクティブを
調整する必要はほとんどないでしょう。もっとも重要なことは、
<directive module="mpm_common">MaxClients</directive>
$B$,!"M=A[$5$l$kF1;~%j%/%(%9%H?t$r==J,07$($k$0$i$$$OBg$-$$$1$l$I$b!"(B
$BA4%W%m%;%9$K==J,$JJ*M}%a%b%j$,3N<B$K9T$-EO$kDxEY$K$O>.$5$$CM$K$9$k!"(B
$B$H$$$&$3$H$G$9!#(B</p>
が、予想される同時リクエスト数を十分扱えるぐらいは大きいけれども、
全プロセスに十分な物理メモリが確実に行き渡る程度には小さい値にする、
ということです。</p>
</summary>
<seealso><a href="../bind.html">Apache
$B$,;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj(B</a></seealso>
が使用するアドレスとポートの設定</a></seealso>
<section id="how-it-works"><title>$BF0:nJ}K!(B</title>
<p>$B0l$D$N%3%s%H%m!<%k%W%m%;%9$,!"(B
$B%3%M%/%7%g%s$KBP$7$F(B listen $B$7$F!"$7$+$k$Y$-;~$K1~Ez$9$k(B
$B;R%W%m%;%9$r5/F0$7$^$9!#(BApache $B$O>o$K4v$D$+$N(B<dfn>$B%9%Z%"(B</dfn>
$B$+%"%$%I%k$J%5!<%P%W%m%;%9$r0];}$7$F$$$F!"$=$l$i$OF~$C$F$-$?(B
$B%j%/%(%9%H$K1~Ez$G$-$k$h$&$KBT5!$7$F$$$^$9!#(B
$B$3$N$h$&$K$7$F%/%i%$%"%s%H$O!"%j%/%(%9%H$,1~Ez$5$l$kA0$K!"(B
$B?7$7$$;R%W%m%;%9$,(B fork $B$5$l$k$N$rBT$?$J$/$F$b$h$$$h$&$K(B
$B$J$C$F$$$^$9!#(B</p>
<section id="how-it-works"><title>動作方法</title>
<p>一つのコントロールプロセスが、
コネクションに対して listen して、しかるべき時に応答する
子プロセスを起動します。Apache は常に幾つかの<dfn>スペア</dfn>
かアイドルなサーバプロセスを維持していて、それらは入ってきた
リクエストに応答できるように待機しています。
このようにしてクライアントは、リクエストが応答される前に、
新しい子プロセスが fork されるのを待たなくてもよいように
なっています。</p>
<p>$B?F%W%m%;%9$,%j%/%(%9%H$K1~Ez$9$k$N;R%W%m%;%9$r(B
$B$I$N$h$&$K@8@.$9$k$+$O!"(B
<p>親プロセスがリクエストに応答するの子プロセスを
どのように生成するかは、
<directive module="mpm_common">StartServers</directive>,
<directive module="prefork">MinSpareServers</directive>,
<directive module="prefork">MaxSpareServers</directive>,
<directive module="mpm_common">MaxClients</directive>
$B$GD4@0$7$^$9!#0lHLE*$K!"(BApache $B$OHs>o$K<+N'E*$J$N$G!"(B
$BBgDq$N%5%$%H$G$O$3$l$i$N%G%#%l%/%F%#%V$r%G%U%)%k%HCM$+$iD4@0$9$k(B
$BI,MW$O$J$$$G$7$g$&!#(B
$BF1;~$K(B 256 $B$rD6$($k%j%/%(%9%H$K1~Ez$7$J$$$H$$$1$J$$%5%$%H$G$O!"(B
で調整します。一般的に、Apache は非常に自律的なので、
大抵のサイトではこれらのディレクティブをデフォルト値から調整する
必要はないでしょう。
同時に 256 を超えるリクエストに応答しないといけないサイトでは、
<directive module="mpm_common">MaxClients</directive>
$B$rA}$d$9I,MW$,$"$k$G$7$g$&!#(B
$B0lJ}!"%a%b%j$N8B$i$l$F$$$k%5%$%H$G$O!"%9%i%C%7%s%0(B
($B%a%b%j$H%G%#%9%/4V$G2?EY$b%9%o%C%W(B) $B$,5/$3$k$N$rKI$0$?$a$K(B
を増やす必要があるでしょう。
一方、メモリの限られているサイトでは、スラッシング
(メモリとディスク間で何度もスワップ) が起こるのを防ぐために
<directive module="mpm_common">MaxClients</directive>
$B$r8:$i$9I,MW$,$"$k$G$7$g$&!#%W%m%;%9@8@.$N%A%e!<%K%s%0$K4X$9$k(B
$B>\$7$$>pJs$O!"(B<a
href="../misc/perf-tuning.html">$B@-G=$K4X$9$k%R%s%H(B</a>
$B$K$"$j$^$9!#(B</p>
を減らす必要があるでしょう。プロセス生成のチューニングに関する
詳しい情報は、<a
href="../misc/perf-tuning.html">性能に関するヒント</a>
にあります。</p>
<p>$BDL>o(B Unix $B$G$O?F%W%m%;%9$O(B 80 $BHV%]!<%H$K%P%$%s%I$9$k$?$a$K(B
<code>root</code> $B$G5/F0$5$l$^$9$,!";R%W%m%;%9$d%9%l%C%I$O(B
$B$b$C$HDc$$8"8B$N%f!<%6$G(B Apache $B$K$h$C$F5/F0$5$l$^$9!#(B
<directive module="mpm_common">User</directive> $B$H(B
<p>通常 Unix では親プロセスは 80 番ポートにバインドするために
<code>root</code> で起動されますが、子プロセスやスレッドは
もっと低い権限のユーザで Apache によって起動されます。
<directive module="mpm_common">User</directive>
<directive module="mpm_common">Group</directive>
$B%G%#%l%/%F%#%V$O(B
Apache $B$N;R%W%m%;%9$N8"8B$r@_Dj$9$k$N$KMQ$$$i$l$^$9!#(B
$B;R%W%m%;%9$O%/%i%$%"%s%H$KAw$k%3%s%F%s%DA4$F$rFI$a$J$$$H$$$1$^$;$s$,!"(B
$B2DG=$J8B$jI,MW:G>.8B$N8"8B$N$_$r;}$C$F$$$k$h$&$K$9$k$Y$-$G$9!#(B</p>
ディレクティブは
Apache の子プロセスの権限を設定するのに用いられます。
子プロセスはクライアントに送るコンテンツ全てを読めないといけませんが、
可能な限り必要最小限の権限のみを持っているようにするべきです。</p>
<p><directive module="mpm_common">MaxRequestsPerChild</directive>
$B$O!"8E$$%W%m%;%9$rDd;_$7$F?7$7$$%W%m%;%9$r5/F0$9$k$3$H$K$h$C$F!"(B
$B$I$NDxEY$NIQEY$G%5!<%P$,%W%m%;%9$r%j%5%$%/%k$9$k$+$r@)8f$7$^$9!#(B</p>
は、古いプロセスを停止して新しいプロセスを起動することによって、
どの程度の頻度でサーバがプロセスをリサイクルするかを制御します。</p>
</section>
<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
@@ -130,23 +130,23 @@
<directivesynopsis>
<name>MaxSpareServers</name>
<description>$B%"%$%I%k$J;R%5!<%P%W%m%;%9$N:GBg8D?t(B</description>
<description>アイドルな子サーバプロセスの最大個数</description>
<syntax>MaxSpareServers <var>number</var></syntax>
<default>MaxSpareServers 10</default>
<contextlist><context>server config</context></contextlist>
<usage>
<p><directive>MaxSpareServers</directive> $B%G%#%l%/%F%#%V$O!"(B
<em>$B%"%$%I%k$J(B</em>$B;R%5!<%P%W%m%;%9$N4uK>:GBg8D?t$r@_Dj$7$^$9!#(B
$B%"%$%I%k%W%m%;%9$H$O!"%j%/%(%9%H$r07$C$F$$$J$$%W%m%;%9$G$9!#(B
<directive>MaxSpareServers</directive> $B$h$j$bB?$$?t$,%"%$%I%k$G$"$l$P!"(B
$B?F%W%m%;%9$OD62a%W%m%;%9$r(B kill $B$7$^$9!#(B</p>
<p><directive>MaxSpareServers</directive> ディレクティブは、
<em>アイドルな</em>子サーバプロセスの希望最大個数を設定します。
アイドルプロセスとは、リクエストを扱っていないプロセスです。
<directive>MaxSpareServers</directive> よりも多い数がアイドルであれば、
親プロセスは超過プロセスを kill します。</p>
<p>$BHs>o$K:.$s$G$$$k%5%$%H$G$N$_!"$3$N%Q%i%a!<%?$r%A%e!<%K%s%0$9$k$Y$-$G$9!#(B
$B$3$N%Q%i%a!<%?$rBg$-$/$9$k$H$$$&$3$H$O!"BgDq$N>l9g$O0-$$H/A[$G$9!#(B
<p>非常に混んでいるサイトでのみ、このパラメータをチューニングするべきです。
このパラメータを大きくするということは、大抵の場合は悪い発想です。
<directive module="prefork">MinSpareServers</directive>
$B0J2<$K@_Dj$7$?>l9g!"(B<directive>MinSpareServers</directive>
<code>+1</code> $B$K<+F0D4@0$5$l$^$9!#(B</p>
以下に設定した場合、<directive>MinSpareServers</directive>
<code>+1</code> に自動調整されます。</p>
</usage>
<seealso><directive module="prefork">MinSpareServers</directive></seealso>
<seealso><directive module="mpm_common">StartServers</directive></seealso>
@@ -154,20 +154,20 @@
<directivesynopsis>
<name>MinSpareServers</name>
<description>$B%"%$%I%k$J;R%5!<%P%W%m%;%9$N:G>.8D?t(B</description>
<description>アイドルな子サーバプロセスの最小個数</description>
<syntax>MinSpareServers <var>number</var></syntax>
<default>MinSpareServers 5</default>
<contextlist><context>server config</context></contextlist>
<usage>
<p><directive>MaxSpareServers</directive> $B%G%#%l%/%F%#%V$O!"(B
<em>$B%"%$%I%k$J(B</em>$B;R%5!<%P%W%m%;%9$N4uK>:G>.8D?t$r@_Dj$7$^$9!#(B
$B%"%$%I%k%W%m%;%9$H$O!"%j%/%(%9%H$r07$C$F$$$J$$%W%m%;%9$G$9!#(B
<directive>MinSpareServers</directive> $B$h$j$b>/$J$$?t$,%"%$%I%k$G$"$l$P!"(B
$B?F%W%m%;%9$O:G9b$G(B 1 $BIC$K$D$-(B 1 $B8D$N3d9g$G?7$7$$;R%W%m%;%9$r@8@.$7$^$9!#(B</p>
<p><directive>MaxSpareServers</directive> ディレクティブは、
<em>アイドルな</em>子サーバプロセスの希望最小個数を設定します。
アイドルプロセスとは、リクエストを扱っていないプロセスです。
<directive>MinSpareServers</directive> よりも少ない数がアイドルであれば、
親プロセスは最高で 1 秒につき 1 個の割合で新しい子プロセスを生成します。</p>
<p>$BHs>o$K:.$s$G$$$k%5%$%H$G$N$_!"$3$N%Q%i%a!<%?$r%A%e!<%K%s%0$9$k$Y$-$G$9!#(B
$B$3$N%Q%i%a!<%?$rBg$-$/$9$k$H$$$&$3$H$O!"BgDq$N>l9g$O0-$$H/A[$G$9!#(B</p>
<p>非常に混んでいるサイトでのみ、このパラメータをチューニングするべきです。
このパラメータを大きくするということは、大抵の場合は悪い発想です。</p>
</usage>
<seealso><directive module="prefork">MaxSpareServers</directive></seealso>
<seealso><directive module="mpm_common">StartServers</directive></seealso>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE quickreference SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 395228:636495 (outdated) -->
@@ -21,21 +21,21 @@
-->
<quickreference metafile="quickreference.xml.meta">
<title>$B%G%#%l%/%F%#%V(B $B%/%$%C%/%j%U%!%l%s%9(B</title>
<title>ディレクティブ クイックリファレンス</title>
<summary>
<p>$B%G%#%l%/%F%#%V(B $B%/%$%C%/%j%U%!%l%s%9$G$O!"3F(B Apache $B@_Dj%G%#%l%/%F%#%V$N(B
$B;HMQJ}K!!"%G%U%)%k%HCM!"%9%F!<%?%9$H%3%s%F%-%9%H$r<($7$F$$$^$9!#(B
$B3F%G%#%l%/%F%#%V$N!"$h$j>\$7$$>pJs$K4X$7$F$O(B
<a href="directive-dict.html">$B%G%#%l%/%F%#%V<-=q(B</a>$B$r(B
$B$4Mw2<$5$$!#(B</p>
<p>ディレクティブ クイックリファレンスでは、各 Apache 設定ディレクティブの
使用方法、デフォルト値、ステータスとコンテキストを示しています。
各ディレクティブの、より詳しい情報に関しては
<a href="directive-dict.html">ディレクティブ辞書</a>を
ご覧下さい。</p>
<p>$BBh(B 1 $BNsL\$O%G%#%l%/%F%#%V$NL>A0$H;HMQJ}K!$G$9!#(B
$BBh(B 2 $BNsL\$O(B ($B$b$7$"$l$P(B) $B%G%U%)%k%HCM$H$J$C$F$$$^$9!#(B
$B%G%U%)%k%HCM$,D9$9$.$FI=<($7$-$l$J$$>l9g$O!":G=i$NJ8;zNs$N8e$m$K(B
$B!V(B + $B!W$,B3$-$^$9!#(B</p>
<p>第 1 列目はディレクティブの名前と使用方法です。
第 2 列目は (もしあれば) デフォルト値となっています。
デフォルト値が長すぎて表示しきれない場合は、最初の文字列の後ろに
「 + 」が続きます。</p>
<p>$BBh(B 3, 4 $BNs$O!"2<$NI=$NCm<a$K=>$C$F!"(B
$B%G%#%l%/%F%#%V$N;HMQ$G$-$k%3%s%F%-%9%H$H!"(B
$B%G%#%l%/%F%#%V$N%9%F!<%?%9$,<($5$l$F$$$^$9!#(B</p>
<p>第 3, 4 列は、下の表の注釈に従って、
ディレクティブの使用できるコンテキストと、
ディレクティブのステータスが示されています。</p>
</summary>
</quickreference>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 151408:431460 (outdated) -->
@@ -23,100 +23,100 @@
<modulesynopsis metafile="worker.xml.meta">
<name>worker</name>
<description>$B%^%k%A%9%l%C%I$H%^%k%A%W%m%;%9$N%O%$%V%j%C%I7?(B
$B%&%'%V%5!<%P$r<BAu$7$?%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B</description>
<description>マルチスレッドとマルチプロセスのハイブリッド型
ウェブサーバを実装したマルチプロセッシングモジュール</description>
<status>MPM</status>
<sourcefile>worker.c</sourcefile>
<identifier>mpm_worker_module</identifier>
<summary>
<p>$B$3$N%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)
$B$O!"%^%k%A%9%l%C%I$H%^%k%A%W%m%;%9$N%O%$%V%j%C%I7?%5!<%P$r(B
$B<BAu$7$F$$$^$9!#%j%/%(%9%H$N1~Ez$K%9%l%C%I$r;H$&$H!"(B
$B%W%m%;%9%Y!<%9$N%5!<%P$h$j$b>/$J$$%7%9%F%`;q8;$G!"(B
$BB?$/$N%j%/%(%9%H$K1~Ez$9$k$3$H$,$G$-$^$9!#(B
$B$5$i$K!"B?$/$N%9%l%C%I$r;}$C$?J#?t$N%W%m%;%9$r0];}$9$k$3$H$G!"(B
$B%W%m%;%9%Y!<%9$N%5!<%P$N;}$D0BDj@-$rJ];}$7$F$$$^$9!#(B</p>
<p>このマルチプロセッシングモジュール (MPM)
は、マルチスレッドとマルチプロセスのハイブリッド型サーバを
実装しています。リクエストの応答にスレッドを使うと、
プロセスベースのサーバよりも少ないシステム資源で、
多くのリクエストに応答することができます。
さらに、多くのスレッドを持った複数のプロセスを維持することで、
プロセスベースのサーバの持つ安定性を保持しています。</p>
<p>$B$3$N(B MPM $B$r@)8f$9$k$N$K;H$o$l$k:G$b=EMW$J%G%#%l%/%F%#%V$O!"(B
<directive module="mpm_common">ThreadsPerChild</directive> $B$H(B
<directive module="mpm_common">MaxClients</directive> $B$G$9!#(B
<directive module="mpm_common">ThreadsPerChild</directive> $B$O(B
$B3F;R%W%m%;%9$GMQ0U$5$l$k%9%l%C%I?t$r@)8f$7$F!"(B
<directive module="mpm_common">MaxClients</directive> $B$O(B
$B5/F0$5$l$k%9%l%C%I$NAm?t$N:GBgCM$r@)8B$7$^$9!#(B</p>
<p>この MPM を制御するのに使われる最も重要なディレクティブは、
<directive module="mpm_common">ThreadsPerChild</directive>
<directive module="mpm_common">MaxClients</directive> です。
<directive module="mpm_common">ThreadsPerChild</directive>
各子プロセスで用意されるスレッド数を制御して、
<directive module="mpm_common">MaxClients</directive>
起動されるスレッドの総数の最大値を制限します。</p>
</summary>
<seealso><a href="../bind.html">Apache
$B$N;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj(B</a></seealso>
の使用するアドレスとポートの設定</a></seealso>
<section id="how-it-works"><title>$BF0:nJ}K!(B</title>
<p>$B0l$D$N@)8fMQ%W%m%;%9(B ($B?F(B) $B$,;R%W%m%;%9$r5/F0$7$^$9!#(B
$B;R%W%m%;%9$O(B
<section id="how-it-works"><title>動作方法</title>
<p>一つの制御用プロセス (親) が子プロセスを起動します。
子プロセスは
<directive module="mpm_common">ThreadsPerChild</directive>
$B%G%#%l%/%F%#%V$G;XDj$5$l$?0lDj?t$N%5!<%P%9%l%C%I$H@\B3$r(B
listen $B$9$k%9%l%C%I$r0l$D:n$j$^$9!#(B
Listener $B%9%l%C%I$O@\B3$,Mh$?$H$-$K%5!<%P%W%m%;%9$KEO$7$^$9!#(B</p>
ディレクティブで指定された一定数のサーバスレッドと接続を
listen するスレッドを一つ作ります。
Listener スレッドは接続が来たときにサーバプロセスに渡します。</p>
<p>Apache $B$O(B<dfn>$B%9%Z%"$N(B</dfn>$B!"$D$^$j%"%$%I%k$J%5!<%P%9%l%C%I$N(B
$B%W!<%k$r>o$K0];}$7$F$$$F!"$=$l$i$OF~$C$F$/$k%j%/%(%9%H$K(B
$BEz$($i$l$k$h$&$KBT5!$7$F$$$^$9!#(B
$B$3$N$h$&$K$7$F!"%/%i%$%"%s%H$O%j%/%(%9%H$N1~Ez$,F@$i$l$k$h$&$K$J$k$?$a$K(B
$B?7$7$$%9%l%C%I$d%W%m%;%9$,@8@.$5$l$k$N$r(B
$BBT$?$J$/$F$b$h$$$h$&$K$J$C$F$$$^$9!#(B
$B5/F0=i4|;~$N%W%m%;%9Am?t$O!"(B
<p>Apache は<dfn>スペアの</dfn>、つまりアイドルなサーバスレッドの
プールを常に維持していて、それらは入ってくるリクエストに
答えられるように待機しています。
このようにして、クライアントはリクエストの応答が得られるようになるために
新しいスレッドやプロセスが生成されるのを
待たなくてもよいようになっています。
起動初期時のプロセス総数は、
<directive module="mpm_common">StartServers</directive>
$B%G%#%l%/%F%#%V$G@_Dj$5$l$^$9!#$=$N8e$N2TF/Cf$K!"(B
Apache $B$OA4%W%m%;%9$N%"%$%I%k%9%l%C%I$N9g7W?t$r8+@Q$b$C$F!"(B
<directive module="mpm_common">MinSpareThreads</directive> $B$H(B
ディレクティブで設定されます。その後の稼働中に、
Apache は全プロセスのアイドルスレッドの合計数を見積もって、
<directive module="mpm_common">MinSpareThreads</directive>
<directive module="mpm_common">MaxSpareThreads</directive>
$B$G;XDj$5$l$?HO0O$NCf$K$3$N?t$,<}$^$k$h$&$K(B fork $B$7$?$j(B
kill $B$7$?$j$7$^$9!#$3$NA`:n$OHs>o$K<+N'E*$J$N$G!"(B
$B$3$l$i$N%G%#%l%/%F%#%V$r%G%U%)%k%HCM$+$iJQ99$9$kI,MW$O(B
$B$a$C$?$K$J$$$G$7$g$&!#(B
$BF1;~$K1~Ez$9$k$3$H$N$G$-$k%/%i%$%"%s%H?t$N:GBg?t(B
($B$D$^$jA4%W%m%;%9Cf$NAm%9%l%C%I?t$N:GBgCM(B) $B$O(B
で指定された範囲の中にこの数が収まるように fork したり
kill したりします。この操作は非常に自律的なので、
これらのディレクティブをデフォルト値から変更する必要は
めったにないでしょう。
同時に応答することのできるクライアント数の最大数
(つまり全プロセス中の総スレッド数の最大値) は
<directive module="mpm_common">MaxClients</directive>
$B%G%#%l%/%F%#%V$G7hDj$5$l$^$9!#(B
$B3hF0Cf$N;R%W%m%;%9?t$N:GBgCM$O(B
<directive module="mpm_common">MaxClients</directive> $B$r(B
<directive module="mpm_common">ThreadsPerChild</directive> $B$G3d$C$?(B
$B$b$N$K$J$j$^$9!#(B</p>
ディレクティブで決定されます。
活動中の子プロセス数の最大値は
<directive module="mpm_common">MaxClients</directive>
<directive module="mpm_common">ThreadsPerChild</directive> で割った
ものになります。</p>
<p>$B3hF0Cf$N;R%W%m%;%9$N?t$H;R%W%m%;%9Cf$N%5!<%P%9%l%C%I$N?t$N1[$($i$l$J$$(B
$B>e8B$r@_Dj$9$k%G%#%l%/%F%#%V$,Fs$D$"$j$^$9!#$3$l$i$O%5!<%P$r(B
$B40A4$KDd;_$7$F!":F5/F0$9$k$3$H$G$7$+JQ99$9$k$3$H$O$G$-$^$;$s!#(B
<p>活動中の子プロセスの数と子プロセス中のサーバスレッドの数の越えられない
上限を設定するディレクティブが二つあります。これらはサーバを
完全に停止して、再起動することでしか変更することはできません。
<directive module="mpm_common">ServerLimit
</directive> $B$O3hF0Cf$N;R%W%m%;%9$N1[$($i$l$J$$>e8B$r@_Dj$7!"(B
<directive module="mpm_common">MaxClients</directive> $B%G%#%l%/%F%#%V(B
$B$NCM$r(B <directive module="mpm_common">
ThreadsPerChild</directive> $B$NCM$G3d$C$?CM0J>e$G$"$k(B
$BI,MW$,$"$j$^$9!#(B<directive module="mpm_common">ThreadLimit</directive> $B$O(B
$B%5!<%P%9%l%C%I$N1[$($i$l$J$$>e8B$G!"(B<directive
module="mpm_common">ThreadsPerChild</directive> $B%G%#%l%/%F%#%V$N(B
$BCM0J>e$G$"$kI,MW$,$"$j$^$9!#%G%U%)%k%H0J30$NCM$r;XDj$9$k>l9g$O(B
$BB>$N(B <module>worker</module> $B%G%#%l%/%F%#%V$h$j$bA0$K=q$+$l$F$$$k(B
$BI,MW$,$"$j$^$9!#(B</p>
</directive> は活動中の子プロセスの越えられない上限を設定し、
<directive module="mpm_common">MaxClients</directive> ディレクティブ
の値を <directive module="mpm_common">
ThreadsPerChild</directive> の値で割った値以上である
必要があります。<directive module="mpm_common">ThreadLimit</directive>
サーバスレッドの越えられない上限で、<directive
module="mpm_common">ThreadsPerChild</directive> ディレクティブの
値以上である必要があります。デフォルト以外の値を指定する場合は
他の <module>worker</module> ディレクティブよりも前に書かれている
必要があります。</p>
<p>$B3hF0Cf$N;R%W%m%;%972$K2C$($F!">/$J$/$H$b0l$D$N%5!<%P%9%l%C%I$,(B
$B4{B8$N%/%i%$%"%s%H$+$i$N@\B3$r07$C$F$$$k=*N;$7$h$&$H$7$F$$$k(B
$B;R%W%m%;%9$,$"$k2DG=@-$,$"$j$^$9!#=*N;Cf$N%W%m%;%9$O(B <directive
module="mpm_common">MaxClients</directive> $B$G;XDj$5$l$??t$^$G(B
$BB8:_$G$-$^$9$,!"<B:]$K4|BT$5$l$k?t$O$:$C$H>/$J$/$J$j$^$9!#$3$N(B
$B?6Iq$$$O3F;R%W%m%;%9$r=*N;$5$;$J$$$h$&$K$9$k$3$H$G2sHr$G$-$^$9!#(B
$B$3$l$O0J2<$NMM$K$7$F<B8=$G$-$^$9!#(B</p>
<p>活動中の子プロセス群に加えて、少なくとも一つのサーバスレッドが
既存のクライアントからの接続を扱っている終了しようとしている
子プロセスがある可能性があります。終了中のプロセスは <directive
module="mpm_common">MaxClients</directive> で指定された数まで
存在できますが、実際に期待される数はずっと少なくなります。この
振舞いは各子プロセスを終了させないようにすることで回避できます。
これは以下の様にして実現できます。</p>
<ul>
<li><directive module="mpm_common">
MaxRequestsPerChild</directive> $B$NCM$r(B 0 $B$K@_Dj$9$k(B</li>
MaxRequestsPerChild</directive> の値を 0 に設定する</li>
<li><directive module="mpm_common">
MaxSpareThreads</directive> $B$NCM$r(B
MaxSpareThreads</directive> の値を
<directive module="mpm_common">MaxClients</directive>
$B$HF1$8CM$K$9$k(B</li>
と同じ値にする</li>
</ul>
<p><module>worker</module> MPM $B$NE57?E*$J%W%m%;%9!&%9%l%C%I@)8f$N(B
$B@_Dj$G$O!"<!$N$h$&$K$J$j$^$9!#(B</p>
<p><module>worker</module> MPM の典型的なプロセス・スレッド制御の
設定では、次のようになります。</p>
<example>
ServerLimit 16<br />
@@ -127,21 +127,21 @@
ThreadsPerChild 25
</example>
<p>$BDL>o(B Unix $B$G$O?F%W%m%;%9$O(B 80 $BHV%]!<%H$K%P%$%s%I$9$k$?$a$K(B
<code>root</code> $B$G5/F0$5$l$^$9$,!";R%W%m%;%9$d%9%l%C%I$O(B
$B$b$C$HDc$$8"8B$N%f!<%6$G(B Apache $B$K$h$C$F5/F0$5$l$^$9!#(B
<directive module="mpm_common">User</directive> $B$H(B
<directive module="mpm_common">Group</directive> $B%G%#%l%/%F%#%V$O(B
Apache $B$N;R%W%m%;%9$N8"8B$r@_Dj$9$k$N$KMQ$$$i$l$^$9!#(B
$B;R%W%m%;%9$O%/%i%$%"%s%H$KAw$k%3%s%F%s%DA4$F$rFI$a$J$$$H$$$1$^$;$s$,!"(B
$B2DG=$J8B$jI,MW:G>.8B$N8"8B$N$_$r;}$C$F$$$k$h$&$K$9$k$Y$-$G$9!#(B
$B$5$i$K!"(B<program>suexec</program>
$B$,;HMQ$5$l$F$$$J$$8B$j!"$3$l$i$N%G%#%l%/%F%#%V$O(B
CGI $B%9%/%j%W%H$G7Q>5$5$l$k8"8B$b@_Dj$7$^$9!#(B</p>
<p>通常 Unix では親プロセスは 80 番ポートにバインドするために
<code>root</code> で起動されますが、子プロセスやスレッドは
もっと低い権限のユーザで Apache によって起動されます。
<directive module="mpm_common">User</directive>
<directive module="mpm_common">Group</directive> ディレクティブは
Apache の子プロセスの権限を設定するのに用いられます。
子プロセスはクライアントに送るコンテンツ全てを読めないといけませんが、
可能な限り必要最小限の権限のみを持っているようにするべきです。
さらに、<program>suexec</program>
が使用されていない限り、これらのディレクティブは
CGI スクリプトで継承される権限も設定します。</p>
<p><directive module="mpm_common">MaxRequestsPerChild</directive>
$B$O!"8E$$%W%m%;%9$rDd;_$7$F?7$7$$%W%m%;%9$r5/F0$9$k$3$H$K$h$C$F!"(B
$B$I$NDxEY$NIQEY$G%5!<%P$,%W%m%;%9$r%j%5%$%/%k$9$k$+$r@)8f$7$^$9!#(B</p>
は、古いプロセスを停止して新しいプロセスを起動することによって、
どの程度の頻度でサーバがプロセスをリサイクルするかを制御します。</p>
</section>
<directivesynopsis location="mpm_common"><name>AcceptMutex</name>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -22,87 +22,87 @@
<manualpage metafile="mpm.xml.meta">
<title>$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)</title>
<title>マルチプロセッシングモジュール (MPM)</title>
<summary>
<p>$B$3$NJ8=q$G$O%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k$,$I$N$h$&$J$b$N$G!"(B
Apache HTTP $B%5!<%P$G$I$N$h$&$K;HMQ$5$l$k$+$K$D$$$F2r@b$7$F$$$^$9!#(B</p>
<p>この文書ではマルチプロセッシングモジュールがどのようなもので、
Apache HTTP サーバでどのように使用されるかについて解説しています。</p>
</summary>
<section id="introduction"><title>$B$O$8$a$K(B</title>
<section id="introduction"><title>はじめに</title>
<p>Apache HTTP $B%5!<%P$O0[$J$kI}9-$$4D6-!"B?<oB?MM$J%W%i%C%H%[!<%`$G(B
$BF0:n$9$k$h$&$K!"%Q%o%U%k$G=@Fp@-$KIY$s$@@_7W$K$J$C$F$$$^$9!#(B
$B0[$J$k%W%i%C%H%[!<%`!&0[$J$k4D6-$G$O$7$P$7$P!"(B
$B0[$J$k5!G=$,I,MW$K$J$C$?$j!"(B
$BF1$85!G=$G$b8zN($N$?$a$K0[$J$k<BAu$,I,MW$K$J$C$?$j$7$^$9!#(B
Apache $B$G$O%b%8%e!<%k2=$5$l$?@_7W$K$h$jI}9-$$4D6-$KE,1~$7$F$-$^$7$?!#(B
$B$3$N@_7W$N$*$+$2$G!"4IM}<T$O(B
$B%3%s%Q%$%k;~$^$?$O<B9T;~$K$I$N%b%8%e!<%k$r%m!<%I$9$k$+A*$V$3$H$K$h$C$F!"(B
$B$I$N5!G=$r%5!<%P$K<h$j9~$`$+A*Br$9$k$3$H$,$G$-$^$9!#(B</p>
<p>Apache HTTP サーバは異なる幅広い環境、多種多様なプラットホームで
動作するように、パワフルで柔軟性に富んだ設計になっています。
異なるプラットホーム・異なる環境ではしばしば、
異なる機能が必要になったり、
同じ機能でも効率のために異なる実装が必要になったりします。
Apache ではモジュール化された設計により幅広い環境に適応してきました。
この設計のおかげで、管理者は
コンパイル時または実行時にどのモジュールをロードするか選ぶことによって、
どの機能をサーバに取り込むか選択することができます。</p>
<p>Apache 2.0 $B$G$O!"(B
$B$3$N%b%8%e!<%k2=$5$l$?@_7W$r%5!<%P$N4pK\5!G=$K$^$G3HD%$7$^$7$?!#(B
$B%5!<%P$K$O@:A*$5$l$?%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)
$B$,IU$$$F$-$F!"$3$l$i$O%^%7%s$N%M%C%H%o!<%/%]!<%H$r%P%$%s%I$7$?$j!"(B
$B%j%/%(%9%H$r<u$1IU$1$?$j!"%j%/%(%9%H$r07$&$h$&;R%W%m%;%9$K3d$jEv$F$?$j!"(B
$B$H$$$C$?Lr3d$r;}$A$^$9!#(B</p>
<p>Apache 2.0 では、
このモジュール化された設計をサーバの基本機能にまで拡張しました。
サーバには精選されたマルチプロセッシングモジュール (MPM)
が付いてきて、これらはマシンのネットワークポートをバインドしたり、
リクエストを受け付けたり、リクエストを扱うよう子プロセスに割り当てたり、
といった役割を持ちます。</p>
<p>$B%b%8%e!<%k2=$5$l$?@_7W$r%5!<%P$N$3$N%l%Y%k$^$G3HD%$9$k$3$H$G(B
$BFs$D$N=EMW$JMxE@$,@8$^$l$^$9(B:</p>
<p>モジュール化された設計をサーバのこのレベルまで拡張することで
二つの重要な利点が生まれます:</p>
<ul>
<li>Apache $B$OI}9-$$%*%Z%l!<%F%#%s%0%7%9%F%`$r(B
$B$h$jH~$7$/8zN(E*$K%5%]!<%H$G$-$^$9!#(B
$BFC$K(B Windows $BHG$N(B Apache $B$O?oJ,8zN(E*$K$J$j$^$7$?!#(B
$B$J$<$J$i(B <module>mpm_winnt</module>
$B$K$h$C$F!"(BApache 1.3 $B$GMQ$$$i$l$F$$$?(B POSIX
$B%l%$%d$NBe$o$j$K%M%$%F%#%V$N%M%C%H%o!<%/5!G=$r(B
$BMxMQ$G$-$k$+$i$G$9!#(B
$BFCJL2=$5$l$?(B MPM
$B$r<BAu$7$?B>$N%*%Z%l!<%F%#%s%0%7%9%F%`$G$b!"(B
$BF1MM$K$3$NMxE@$O@8$^$l$^$9!#(B</li>
<li>Apache は幅広いオペレーティングシステムを
より美しく効率的にサポートできます。
特に Windows 版の Apache は随分効率的になりました。
なぜなら <module>mpm_winnt</module>
によって、Apache 1.3 で用いられていた POSIX
レイヤの代わりにネイティブのネットワーク機能を
利用できるからです。
特別化された MPM
を実装した他のオペレーティングシステムでも、
同様にこの利点は生まれます。</li>
<li>$B%5!<%P$OFCDj$N%5%$%H8~$1$K!"$h$j>e<j$K%+%9%?%^%$%:$G$-$^$9!#(B
$BNc$($P!"Hs>o$KBg$-$J%9%1!<%i%S%j%F%#$rI,MW$H$9$k%5%$%H$G$O!"(B
<module>worker</module> $B$d(B <module>event</module> $B$H$$$C$?%9%l%C%I2=$5$l$?(B
MPM $B$rMxMQ$G$-$k0lJ}$G!"0BDj@-$d8E$$%=%U%H%&%'%"$H$N8_49@-$r(B
$BI,MW$H$9$k%5%$%H$G$O(B <module>prefork</module>
$B$,MxMQ$G$-$^$9!#(B</li>
<li>サーバは特定のサイト向けに、より上手にカスタマイズできます。
例えば、非常に大きなスケーラビリティを必要とするサイトでは、
<module>worker</module> <module>event</module> といったスレッド化された
MPM を利用できる一方で、安定性や古いソフトウェアとの互換性を
必要とするサイトでは <module>prefork</module>
が利用できます。</li>
</ul>
<p>$B%f!<%6%l%Y%k$G$O!"(BMPM $B$OB>$N(B Apache
$B%b%8%e!<%k$HF1Ey$K8+$($^$9!#(B
$B<g$J0c$$$O!"$$$D$G$bM#0l$N(B MPM
$B$,%m!<%I$5$l$J$1$l$P$J$i$J$$$H$$$&E@$G$9!#(B
$BMxMQ2DG=$J(B MPM $B$O(B
<a href="mod/">module $B%$%s%G%C%/%9(B</a>$B$K$"$j$^$9!#(B</p>
<p>ユーザレベルでは、MPM は他の Apache
モジュールと同等に見えます。
主な違いは、いつでも唯一の MPM
がロードされなければならないという点です。
利用可能な MPM は
<a href="mod/">module インデックス</a>にあります。</p>
</section>
<section id="choosing"><title>MPM $B$rA*$V(B</title>
<section id="choosing"><title>MPM を選ぶ</title>
<p>MPM $B$O@_DjCf$KA*Br$7$F!"%5!<%PFbIt$K%3%s%Q%$%k$5$l$J$1$l$P(B
$B$J$j$^$;$s!#(B
$B%3%s%Q%$%i$O!"%9%l%C%I$,;HMQ$5$l$F$$$k>l9g$KMM!9$J5!G=$r:GE,2=$G$-$^$9$,!"(B
$B$=$N$?$a$K$O$=$b$=$b%9%l%C%I$,;H$o$l$F$$$k$H$$$&$3$H$rCN$kI,MW$,$"$j$^$9!#(B</p>
<p>MPM は設定中に選択して、サーバ内部にコンパイルされなければ
なりません。
コンパイラは、スレッドが使用されている場合に様々な機能を最適化できますが、
そのためにはそもそもスレッドが使われているということを知る必要があります。</p>
<p>$BK>$_$N(B MPM $B$r<B:]$KA*$V$?$a$K$O!"(B<program>configure</program> $B%9%/%j%W%H$G(B
<code>--with-mpm=<em>NAME</em></code> $B0z?t$rMQ$$$F$/$@$5$$!#(B
<em>NAME</em> $B$OK>$_$N(B MPM $B$NL>A0$G$9!#(B</p>
<p>望みの MPM を実際に選ぶためには、<program>configure</program> スクリプトで
<code>--with-mpm=<em>NAME</em></code> 引数を用いてください。
<em>NAME</em> は望みの MPM の名前です。</p>
<p>$B%5!<%P%3%s%Q%$%k8e$O!"$I$N(B MPM $B$,A*Br$5$l$?$+$r(B
<code>./httpd -l</code> $B$G3N$+$a$k$3$H$,$G$-$^$9!#(B
$B$3$N%3%^%s%I$O!"(BMPM
$B$r4^$a!"%5!<%P$K%3%s%Q%$%k$GAH$_9~$^$l$?%b%8%e!<%kA4$F$r(B
$BNs5s$7$^$9!#(B</p>
<p>サーバコンパイル後は、どの MPM が選択されたかを
<code>./httpd -l</code> で確かめることができます。
このコマンドは、MPM
を含め、サーバにコンパイルで組み込まれたモジュール全てを
列挙します。</p>
</section>
<section id="defaults"><title>MPM $B%G%U%)%k%HCM(B</title>
<section id="defaults"><title>MPM デフォルト値</title>
<p>$B<!I=$KMM!9$J(B OS $B8~$1$N%G%U%)%k%H$N(B MPM $B0lMw$r7G:\$7$F$$$^$9!#(B
$B%3%s%Q%$%k;~$K0U?^E*$KB>$rA*Br$7$J$1$l$P!"<+F0E*$K$3$l$i$N(B MPM
$B$,A*Br$5$l$^$9!#(B</p>
<p>次表に様々な OS 向けのデフォルトの MPM 一覧を掲載しています。
コンパイル時に意図的に他を選択しなければ、自動的にこれらの MPM
が選択されます。</p>
<table>
<columnspec><column width=".2"/><column width=".2"/></columnspec>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -22,217 +22,217 @@
<manualpage metafile="new_features_2_0.xml.meta">
<title>Apache 2.0 $B$N?75!G=$N35MW(B</title>
<title>Apache 2.0 の新機能の概要</title>
<summary>
<p>$B$3$NJ8=q$G$O!"(BApache HTTP $B%5!<%P%P!<%8%g%s(B 1.3 $B$H(B 2.0
$B$N<g$J0c$$$K$D$$$F5-=R$7$F$$$^$9!#(B</p>
<p>この文書では、Apache HTTP サーババージョン 1.3 と 2.0
の主な違いについて記述しています。</p>
</summary>
<seealso><a href="upgrading.html">1.3 $B$+$i(B 2.0 $B$X$N%"%C%W%0%l!<%I(B</a></seealso>
<seealso><a href="upgrading.html">1.3 から 2.0 へのアップグレード</a></seealso>
<section id="core">
<title>$B%3%"5!G=$N3HD%(B</title>
<title>コア機能の拡張</title>
<dl>
<dt>Unix $B$N%9%l%C%I(B</dt>
<dt>Unix のスレッド</dt>
<dd>POSIX $B%9%l%C%I$r%5%]!<%H$7$F$$$k(B Unix $B%7%9%F%`>e$G$O!"(B
Apache $B$O%^%k%A%W%m%;%9!"%^%k%A%9%l%C%I$N%O%$%V%j%C%I%b!<%I$G(B
$B<B9T$G$-$k$h$&$K$J$j$^$7$?!#$3$l$K$h$j(B
$BB?$/$N@_Dj$K$*$$$F%9%1!<%i%S%j%F%#$,8~>e$7$^$9!#(B</dd>
<dd>POSIX スレッドをサポートしている Unix システム上では、
Apache はマルチプロセス、マルチスレッドのハイブリッドモードで
実行できるようになりました。これにより
多くの設定においてスケーラビリティが向上します。</dd>
<dt>$B?7$7$$%S%k%I%7%9%F%`(B</dt>
<dt>新しいビルドシステム</dt>
<dd>$B%S%k%I%7%9%F%`$O(B <code>autoconf</code> $B$H(B <code>libtool</code>
$B$K4p$E$$$?$b$N$K$J$k$h$&$K!"(B
$B?7$7$/=q$-D>$5$l$^$7$?!#$3$l$K$h$j!"(BApache $B$N(B configure $B$N%7%9%F%`$O(B
$BB>$N%Q%C%1!<%8$H;w$?$b$N$K$J$j$^$7$?!#(B</dd>
<dd>ビルドシステムは <code>autoconf</code> <code>libtool</code>
に基づいたものになるように、
新しく書き直されました。これにより、Apache の configure のシステムは
他のパッケージと似たものになりました。</dd>
<dt>$B%^%k%A%W%m%H%3%k%5%]!<%H(B</dt>
<dt>マルチプロトコルサポート</dt>
<dd>Apache $B$KJ#?t$N%W%m%H%3%k$r07$&$?$a$N5!9=$,Hw$o$j$^$7$?!#(B
$BNc$H$7$F(B <module>mod_echo</module> $B$,=q$+$l$F$$$^$9!#(B</dd>
<dd>Apache に複数のプロトコルを扱うための機構が備わりました。
例として <module>mod_echo</module> が書かれています。</dd>
<dt>Unix $B0J30$N%W%i%C%H%U%)!<%`$N%5%]!<%H$N2~A1(B</dt>
<dt>Unix 以外のプラットフォームのサポートの改善</dt>
<dd>Apache 2.0 $B$O(B BeOS$B!"(BOS/2$B!"(BWindows $B$J$I$N(B Unix $B0J30$N(B
$B%W%i%C%H%U%)!<%`$G!"$h$jB.$/!"$h$j0BDj$7$FF0:n$9$k$h$&$K$J$j$^$7$?!#(B
$B%W%i%C%H%U%)!<%`FCM-$N(B <a
href="mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B</a> (MPM) $B$H(B
Apache Portable Runtime (APR) $B$NF3F~$K$h$j!"(B
$B%M%$%F%#%t$N(B API $B$G<BAu$5$l$k$h$&$K$J$j!"(B
$B%P%0$,B?$/!"@-G=$N0-$$$3$H$,B?$$(B POSIX $B%(%_%e%l!<%7%g%s%l%$%d$N;HMQ$r(B
$B2sHr$9$k$3$H$,$G$-$^$7$?!#(B</dd>
<dd>Apache 2.0 は BeOS、OS/2、Windows などの Unix 以外の
プラットフォームで、より速く、より安定して動作するようになりました。
プラットフォーム特有の <a
href="mpm.html">マルチプロセッシングモジュール</a> (MPM)
Apache Portable Runtime (APR) の導入により、
ネイティヴの API で実装されるようになり、
バグが多く、性能の悪いことが多い POSIX エミュレーションレイヤの使用を
回避することができました。</dd>
<dt>$B?7$7$$(B Apache API</dt>
<dt>新しい Apache API</dt>
<dd>2.0 $B$G$O%b%8%e!<%k$N(B API $B$,Bg$-$/JQ$o$j$^$7$?!#(B
1.3 $B$K$"$C$?%b%8%e!<%k$N=gHV(B/$BM%@hEY$NLdBj$NB?$/$O(B
$B$J$/$J$C$F$$$k$O$:$G$9!#(B2.0 $B$OM%@hEY$NA*Br$r$[$H$s$I$r<+F0E*$K9T$J$$!"(B
$B%b%8%e!<%k$N=gHV$O$h$j=@Fp@-$r9b$a$k$?$a$K%U%C%/Kh$K9T$J$o$l$k$h$&$K(B
$B$J$j$^$7$?!#$^$?!"%3%"(B Apache $B%5!<%P$K%Q%C%A$r$"$F$k$3$H$J$/(B
$BDI2C$N%b%8%e!<%k5!G=$rDs6!$9$k$3$H$,$G$-$k$h$&$K?7$7$$4X?t$,(B
$BDI2C$5$l$^$7$?!#(B</dd>
<dd>2.0 ではモジュールの API が大きく変わりました。
1.3 にあったモジュールの順番/優先度の問題の多くは
なくなっているはずです。2.0 は優先度の選択をほとんどを自動的に行ない、
モジュールの順番はより柔軟性を高めるためにフック毎に行なわれるように
なりました。また、コア Apache サーバにパッチをあてることなく
追加のモジュール機能を提供することができるように新しい関数が
追加されました。</dd>
<dt>IPv6 $B%5%]!<%H(B</dt>
<dt>IPv6 サポート</dt>
<dd>Apache $B$,;HMQ$7$F$$$k(B Apache Portable Runtime library $B$,(B
IPv6 $B$r%5%]!<%H$7$F$$$k%7%9%F%`$G$O(B Apache $B$O(B $B%G%U%)%k%H$G(B
IPv6 $B$N%=%1%C%H$r(B listen $B$7$^$9!#$5$i$K!"(B
<dd>Apache が使用している Apache Portable Runtime library
IPv6 をサポートしているシステムでは Apache は デフォルトで
IPv6 のソケットを listen します。さらに、
<directive module="mpm_common">Listen</directive>,
<directive module="core">NameVirtualHost</directive>,
<directive module="core">VirtualHost</directive>
$B$N3F%G%#%l%/%F%#%V$,(B IPv6 $B$N%"%I%l%9$r(B
$B%5%]!<%H$9$k$h$&$K$J$j$^$7$?(B ($BNc$($P!"(B
"<code>Listen [2001:db8::1]:8080</code>")$B!#(B</dd>
の各ディレクティブが IPv6 のアドレスを
サポートするようになりました (例えば、
"<code>Listen [2001:db8::1]:8080</code>")</dd>
<dt>$B%U%#%k%?(B</dt>
<dt>フィルタ</dt>
<dd>Apache $B$N%b%8%e!<%k$O%5!<%P$+$iAw$i$l$F$-$?$j!"%5!<%P$X(B
$BAw$k%9%H%j!<%`$KBP$7$FF0:n$9$k%U%#%k%?$H$7$F=q$/$3$H$,$G$-$k$h$&$K(B
$B$J$j$^$7$?!#$3$l$K$h$j!"Nc$($P(B CGI $B%9%/%j%W%H$N=PNO$r(B
<module>mod_include</module> $B$N(B <code>INCLUDES</code> $B%U%#%k%?$r;H$C$F(B
Server Side Include $B$N%G%#%l%/%F%#%V$r2r@O$9$k!"(B
$B$H$$$&$h$&$J$3$H$,2DG=$K$J$j$^$7$?!#(B<module>mod_ext_filter</module>
$B$G30It%W%m%0%i%`$r%U%#%k%?$H$7$FF0:n$5$;$k$3$H$,$G$-$^$9!#(B
$B$3$l$O(B CGI $B%W%m%0%i%`$r%O%s%I%i$H$7$FF0:n$5$;$k$N$H(B
$B$h$/;w$?J}K!$G$G$-$^$9!#(B</dd>
<dd>Apache のモジュールはサーバから送られてきたり、サーバへ
送るストリームに対して動作するフィルタとして書くことができるように
なりました。これにより、例えば CGI スクリプトの出力を
<module>mod_include</module> <code>INCLUDES</code> フィルタを使って
Server Side Include のディレクティブを解析する、
というようなことが可能になりました。<module>mod_ext_filter</module>
で外部プログラムをフィルタとして動作させることができます。
これは CGI プログラムをハンドラとして動作させるのと
よく似た方法でできます。</dd>
<dt>$BB?8@8l%(%i!<1~Ez(B</dt>
<dt>多言語エラー応答</dt>
<dd>$B%V%i%&%6$X$N%(%i!<1~Ez$N%a%C%;!<%8$,!"(BSSI $B$NJ8=q$r;H$C$F(B
$BJ#?t$N8@8l$GDs6!$5$l$k$h$&$K$J$j$^$7$?!#8+$?$a$N0l4S@-$rJ]$D$?$a$K(B
$B4IM}<T$,%+%9%?%^%$%:$9$k$3$H$b$G$-$^$9!#(B</dd>
<dd>ブラウザへのエラー応答のメッセージが、SSI の文書を使って
複数の言語で提供されるようになりました。見ための一貫性を保つために
管理者がカスタマイズすることもできます。</dd>
<dt>$B@_Dj$N4JAG2=(B</dt>
<dt>設定の簡素化</dt>
<dd>$BB?$/$N:.Mp$r>7$-$,$A$J%G%#%l%/%F%#%V$,4JAG2=$5$l$^$7$?!#(B
$B$h$/:.Mp$r0z$-5/$3$7$F$$$?(B <code>Port</code> $B%G%#%l%/%F%#%V$H(B
<code>Bind</code> $B%G%#%l%/%F%#%V$O(B
$B$J$/$J$j$^$7$?!#(B<directive module="mpm_common">Listen</directive>
$B%G%#%l%/%F%#%V$N$_$,(B IP $B%"%I%l%9$N%P%$%s%I$K;H$o$l$^$9!#(B
<directive module="core">ServerName</directive> $B%G%#%l%/%F%#%V$G$O(B
$B%j%@%$%l%/%H$H(B vhost $B$NG'<1$N$?$a$@$1$K%5!<%P$NL>A0$H%]!<%HHV9f$r(B
$B;XDj$7$^$9!#(B</dd>
<dd>多くの混乱を招きがちなディレクティブが簡素化されました。
よく混乱を引き起こしていた <code>Port</code> ディレクティブと
<code>Bind</code> ディレクティブは
なくなりました。<directive module="mpm_common">Listen</directive>
ディレクティブのみが IP アドレスのバインドに使われます。
<directive module="core">ServerName</directive> ディレクティブでは
リダイレクトと vhost の認識のためだけにサーバの名前とポート番号を
指定します。</dd>
<dt>Windows NT $B$N%M%$%F%#%t(B Unicode $B%5%]!<%H(B</dt>
<dt>Windows NT のネイティヴ Unicode サポート</dt>
<dd>Windows NT $B>e$N(B Apache 2.0 $B$O%U%!%$%kL>$NJ8;z%(%s%3!<%IA4$F$K(B
utf-8 $B$r;H$&$h$&$K$J$j$^$7$?!#$3$l$i$O(B Unicode $B%U%!%$%k%7%9%F%`$K(B
$BD>@\JQ49$5$l$k$N$G!"(BWindows 2000 $B$H(B Windows XP $B$r4^$`!"A4$F$N(B
Windows NT $B7O$GB?8@8l%5%]!<%H$,Ds6!$5$l$^$9!#(B
<em>$B$3$N%5%]!<%H$O!"%U%!%$%k%7%9%F%`$N%"%/%;%9;~$K%m!<%+%k$N(B
$B%3!<%I%Z!<%8$r;H$&(B Windows 95, 98, ME $B$K$OE,MQ$5$l$^$;$s!#(B</em></dd>
<dd>Windows NT 上の Apache 2.0 はファイル名の文字エンコード全てに
utf-8 を使うようになりました。これらは Unicode ファイルシステムに
直接変換されるので、Windows 2000 Windows XP を含む、全ての
Windows NT 系で多言語サポートが提供されます。
<em>このサポートは、ファイルシステムのアクセス時にローカルの
コードページを使う Windows 95, 98, ME には適用されません。</em></dd>
<dt>$B@55,I=8=%i%$%V%i%j$N%"%C%W%G!<%H(B</dt>
<dt>正規表現ライブラリのアップデート</dt>
<dd>Apache 2.0 $B$O(B <a href="http://www.pcre.org/">Perl
$B8_49@55,I=8=%i%$%V%i%j(B (PCRE) </a>$B$r4^$s$G$$$^$9!#(B
$B@55,I=8=$NI>2A$K$O!"$h$j6/NO$K$J$C$?(B Perl 5
$B9=J8$r;HMQ$7$^$9!#(B</dd>
<dd>Apache 2.0 <a href="http://www.pcre.org/">Perl
互換正規表現ライブラリ (PCRE) </a>を含んでいます。
正規表現の評価には、より強力になった Perl 5
構文を使用します。</dd>
</dl>
</section>
<section id="module">
<title>$B%b%8%e!<%k$N3HD%(B</title>
<title>モジュールの拡張</title>
<dl>
<dt><module>mod_ssl</module></dt>
<dd>Apache 2.0 $B$N?7%b%8%e!<%k!#$3$N%b%8%e!<%k$O(B OpenSSL $B$,(B
$BDs6!$9$k(B SSL/TLS $B0E9f%W%m%H%3%k$X$N%$%s%?%U%'!<%9$G$9!#(B</dd>
<dd>Apache 2.0 の新モジュール。このモジュールは OpenSSL
提供する SSL/TLS 暗号プロトコルへのインタフェースです。</dd>
<dt><module>mod_dav</module></dt>
<dd>Apache 2.0 $B$N?7%b%8%e!<%k!#$3$N%b%8%e!<%k$O%&%'%V%3%s%F%s%D$r(B
$BAw$j!"0];}$9$k$?$a$N5,3J(B
HTTP Distributed Authoring and Versioning (DAV) $B$r<BAu$7$F$$$^$9!#(B</dd>
<dd>Apache 2.0 の新モジュール。このモジュールはウェブコンテンツを
送り、維持するための規格
HTTP Distributed Authoring and Versioning (DAV) を実装しています。</dd>
<dt><module>mod_deflate</module></dt>
<dd>Apache 2.0 $B$N?7%b%8%e!<%k!#Aw?.A0$KAw?.FbMF$r05=L$7$F(B
$B%M%C%H%o!<%/BS0h$r@aLs$9$k!"$H$$$&%j%/%(%9%H$r%V%i%&%6$,(B
$BMW5a$G$-$k$h$&$K$7$^$9!#(B</dd>
<dd>Apache 2.0 の新モジュール。送信前に送信内容を圧縮して
ネットワーク帯域を節約する、というリクエストをブラウザが
要求できるようにします。</dd>
<dt><module>mod_auth_ldap</module></dt>
<dd>Apache 2.0.41 $B$N?7%b%8%e!<%k!#(BHTTP $B4pK\G'>Z$N>ZL@=q$rJ]B8$9$k$N$K!"(B
LDAP $B%G!<%?%Y!<%9$r;HMQ$G$-$k$h$&$K$J$j$^$9!#(B
$B4XO"%b%8%e!<%k$N(B <module>mod_ldap</module> $B$G!"(B
$B%3%M%/%7%g%s$N%W!<%k5!G=$H7k2L$N%-%c%C%7%e5!G=$,Ds6!$5$l$^$9!#(B</dd>
<dd>Apache 2.0.41 の新モジュール。HTTP 基本認証の証明書を保存するのに、
LDAP データベースを使用できるようになります。
関連モジュールの <module>mod_ldap</module> で、
コネクションのプール機能と結果のキャッシュ機能が提供されます。</dd>
<dt><module>mod_auth_digest</module></dt>
<dd>$B$3$N%b%8%e!<%k$O6&M-%a%b%j$r;H$&$3$H$K$h$j!"%W%m%;%9$r$^$?$$$@(B
$B%;%C%7%g%s$N%-%c%C%7%e$r%5%]!<%H$9$k$h$&$K$J$j$^$7$?!#(B</dd>
<dd>このモジュールは共有メモリを使うことにより、プロセスをまたいだ
セッションのキャッシュをサポートするようになりました。</dd>
<dt><module>mod_charset_lite</module></dt>
<dd>Apache 2.0 $B$N?7%b%8%e!<%k!#$3$N<B83E*$J%b%8%e!<%k$O(B
$B%-%c%i%/%?%;%C%H$NJQ49$d:FId9f2=$r2DG=$K$7$^$9!#(B</dd>
<dd>Apache 2.0 の新モジュール。この実験的なモジュールは
キャラクタセットの変換や再符号化を可能にします。</dd>
<dt><module>mod_file_cache</module></dt>
<dd>Apache 2.0 $B$N?7%b%8%e!<%k!#$3$N%b%8%e!<%k$K$O!"(B
Apache 1.3 $B$K$*$1$k(B <code>mod_mmap_static</code> $B5!G=$,4^$^$l!"(B
$B$^$?!"DI2C$N%-%c%C%7%e5!G=$,2C$o$C$F$$$^$9!#(B</dd>
<dd>Apache 2.0 の新モジュール。このモジュールには、
Apache 1.3 における <code>mod_mmap_static</code> 機能が含まれ、
また、追加のキャッシュ機能が加わっています。</dd>
<dt><module>mod_headers</module></dt>
<dd>$B$3$N%b%8%e!<%k$O(B Apache 2.0 $B$GHs>o$K=@Fp@-$,(B
$B9b$/$J$j$^$7$?!#(B<module>mod_proxy</module>
$B$G;H$o$l$k%j%/%(%9%H$N%X%C%@$rJQ99$G$-$k$h$&$K$J$j$^$7$?$7!"(B
$B1~Ez%X%C%@$r>r7o$K1~$8$F@_Dj$G$-$k$h$&$K$J$j$^$7$?!#(B</dd>
<dd>このモジュールは Apache 2.0 で非常に柔軟性が
高くなりました。<module>mod_proxy</module>
で使われるリクエストのヘッダを変更できるようになりましたし、
応答ヘッダを条件に応じて設定できるようになりました。</dd>
<dt><module>mod_proxy</module></dt>
<dd>proxy $B%b%8%e!<%k$O?7$7$$%U%#%k%?$N5!9=$rMxMQ$9$k$?$a$H!"(B
$B$h$j?.Mj$G$-$k!"(BHTTP/1.1 $B$K=`5r$7$?(B proxy $B$r<BAu$9$k$?$a$K(B
$B40A4$K=q$-D>$5$l$^$7$?!#$5$i$K!"?7$7$$(B
<dd>proxy モジュールは新しいフィルタの機構を利用するためと、
より信頼できる、HTTP/1.1 に準拠した proxy を実装するために
完全に書き直されました。さらに、新しい
<directive module="mod_proxy" type="section">Proxy</directive>
$B@_Dj%;%/%7%g%s$,(Bproxy $B$5$l$k%5%$%H$N$h$jFI$_$d$9$/(B ($BFbItE*$K$b$h$jB.$$(B)
$B@_Dj$rDs6!$7$^$9!#%*!<%P!<%m!<%I$5$l$?(B
設定セクションがproxy されるサイトのより読みやすく (内部的にもより速い)
設定を提供します。オーバーロードされた
<code>&lt;Directory "proxy:... &gt;</code>
$B@_Dj$O%5%]!<%H$5$l$F$$$^$;$s!#$3$N%b%8%e!<%k$O(B <code>proxy_connect</code>,
設定はサポートされていません。このモジュールは <code>proxy_connect</code>,
<code>proxy_ftp</code>, <code>proxy_http</code>
$B$H$$$C$?!"FCDj$N%W%m%H%3%k$r%5%]!<%H$9$k(B
$B%b%8%e!<%k$KJ,3d$5$l$k$h$&$K$J$j$^$7$?!#(B</dd>
といった、特定のプロトコルをサポートする
モジュールに分割されるようになりました。</dd>
<dt><module>mod_negotiation</module></dt>
<dd>$B%/%i%$%"%s%H$,(B NOT ACCEPTABLE $B$d(B MULTIPLE CHOICES $B1~Ez$N(B
$BBe$o$j$K>o$KC1FH$NJ8=q$r<u$1$H$k$h$&$K$9$k$?$a$K!"?7$7$$%G%#%l%/%F%#%V(B
<dd>クライアントが NOT ACCEPTABLE MULTIPLE CHOICES 応答の
代わりに常に単独の文書を受けとるようにするために、新しいディレクティブ
<directive module="mod_negotiation">ForceLanguagePriority</directive>
$B$r;H$&$3$H$,$G$-$k$h$&$K$J$j$^$7$?!#(B
$B$5$i$K!"$h$j0l4S@-$N$"$k7k2L$rDs6!$9$k$?$a$K(B
$B%M%4%7%(!<%7%g%s$H(B MultiViews $B$N%"%k%4%j%:%`$,2~A1$5$l!"(B
$BJ8=q$NFbMF$r4^$a$k$3$H$N$G$-$k!"?7$7$$7A<0$N%?%$%W%^%C%W$,(B
$BDs6!$5$l$k$h$&$K$J$j$^$7$?!#(B</dd>
を使うことができるようになりました。
さらに、より一貫性のある結果を提供するために
ネゴシエーションと MultiViews のアルゴリズムが改善され、
文書の内容を含めることのできる、新しい形式のタイプマップが
提供されるようになりました。</dd>
<dt><module>mod_autoindex</module></dt>
<dd>Autoindex $B$5$l$k%G%#%l%/%H%j$NFbMF0lMw$,!"(B
$B$-$l$$$KI=<($5$l$k$?$a$K(B HTML $B$N%F!<%V%k$r;H$&$h$&$K(B
$B@_Dj$G$-$k$h$&$K$J$j$^$7$?!#$^$?!"%P!<%8%g%s$K$h$k%=!<%F%#%s%0$J$I!"(B
$B$h$j:Y$+$$%=!<%F%#%s%0$N@)8f$,$G$-$k$h$&$K$J$j!"%G%#%l%/%H%j(B
$B$NFbMF0lMw$r%o%$%k%I%+!<%I$K$h$jA*JL$9$k$3$H$,$G$-$k$h$&$K$b$J$j$^$7$?!#(B</dd>
<dd>Autoindex されるディレクトリの内容一覧が、
きれいに表示されるために HTML のテーブルを使うように
設定できるようになりました。また、バージョンによるソーティングなど、
より細かいソーティングの制御ができるようになり、ディレクトリ
の内容一覧をワイルドカードにより選別することができるようにもなりました。</dd>
<dt><module>mod_include</module></dt>
<dd>$B?7$7$$%G%#%l%/%F%#%V$K$h$j!"(BSSI $B$N%G%U%)%k%H$N3+;O%?%0$H=*N;%?%0$r(B
$BJQ99$G$-$k$h$&$K$J$j$^$7$?!#$^$?!"%(%i!<$H;~9o$N7A<0$N@_Dj$,(B SSI $B$N(B
$BJ8=qCf$G$O$J$/!"<g@_Dj%U%!%$%kCf$G9T$J$($k$h$&$K$J$j$^$7$?!#(B
$B@55,I=8=$N2r@O$H%0%k!<%W2=$N7k2L(B (Perl $B$N@55,I=8=$N9=J8$K(B
$B4p$E$$$?$b$N$K$J$j$^$7$?(B) $B$r(B <module>mod_include</module>
$B$NJQ?t(B $0 .. $9 $B$K$h$j<hF@$G$-$k$h$&$K$J$j$^$7$?!#(B</dd>
<dd>新しいディレクティブにより、SSI のデフォルトの開始タグと終了タグを
変更できるようになりました。また、エラーと時刻の形式の設定が SSI の
文書中ではなく、主設定ファイル中で行なえるようになりました。
正規表現の解析とグループ化の結果 (Perl の正規表現の構文に
基づいたものになりました) を <module>mod_include</module>
の変数 $0 .. $9 により取得できるようになりました。</dd>
<dt><module>mod_auth_dbm</module></dt>
<dd><directive module="mod_auth_dbm">AuthDBMType</directive>
$B%G%#%l%/%F%#%V$K$h$j!"J#?t$N(B DBM $B7?$N%G!<%?%Y!<%9$r%5%]!<%H$9$k(B
$B$h$&$K$J$j$^$7$?!#(B</dd>
ディレクティブにより、複数の DBM 型のデータベースをサポートする
ようになりました。</dd>
</dl>
</section>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -22,16 +22,16 @@
<manualpage metafile="sections.xml.meta">
<title>$B%;%/%7%g%s$N@_Dj(B</title>
<title>セクションの設定</title>
<summary> <p><a href="configuring.html">$B@_Dj%U%!%$%k(B</a>$BCf$N%G%#%l%/%F%#%V$O(B
$B%5!<%PA4BN$KE,MQ$5$l$?$j!"FCDj$N%G%#%l%/%H%j$d%U%!%$%k!"%[%9%H!"(BURL $B$K$N$_(B
$BE,MQ$5$l$k$h$&$K@)8B$7$?$j$9$k$3$H$,$G$-$^$9!#$3$NJ8=q$O@_DjMQ$N%;%/%7%g%s$N(B
$B%3%s%F%J$d(B <code>.htaccess</code> $B%U%!%$%k$r;H$C$FB>$N@_Dj%G%#%l%/%F%#%V$N(B
$B%9%3!<%W$rJQ99$9$kJ}K!$r@bL@$7$^$9!#(B</p>
<summary> <p><a href="configuring.html">設定ファイル</a>中のディレクティブは
サーバ全体に適用されたり、特定のディレクトリやファイル、ホスト、URL にのみ
適用されるように制限したりすることができます。この文書は設定用のセクションの
コンテナや <code>.htaccess</code> ファイルを使って他の設定ディレクティブの
スコープを変更する方法を説明します。</p>
</summary>
<section id="types"><title>$B@_DjMQ%;%/%7%g%s%3%s%F%J$N<oN`(B</title>
<section id="types"><title>設定用セクションコンテナの種類</title>
<related>
<modulelist>
@@ -53,21 +53,21 @@
</directivelist>
</related>
<p>$B%3%s%F%J$K$OFs$D$N4pK\$H$J$k<oN`$,$"$j$^$9!#$[$H$s$I$N%3%s%F%J$O(B
$B3F%j%/%(%9%H$KBP$7$FI>2A$5$l$^$9!#$=$N>l9g!"%3%s%F%JCf$N%G%#%l%/%F%#%V$O(B
$B%3%s%F%J$K%^%C%A$9$k%j%/%(%9%H$K$N$_E,MQ$5$l$^$9!#(B
$B0lJ}!"(B<directive type="section"
module="core">IfDefine</directive> $B%3%s%F%J$H(B <directive
type="section" module="core">IfModule</directive> $B%3%s%F%J$O(B
$B%5!<%P$N5/F0;~$H:F5/F0;~$K$N$_I>2A$5$l$^$9!#5/F0;~$K>r7o$,??$G$"$l$P!"(B
$B%3%s%F%JCf$N%G%#%l%/%F%#%V$O$9$Y$F$N%j%/%(%9%H$KE,MQ$5$l$^$9!#>r7o$,(B
$B56$G$"$l$P!"%3%s%F%JCf$N%G%#%l%/%F%#%V$OL5;k$5$l$^$9!#(B</p>
<p>コンテナには二つの基本となる種類があります。ほとんどのコンテナは
各リクエストに対して評価されます。その場合、コンテナ中のディレクティブは
コンテナにマッチするリクエストにのみ適用されます。
一方、<directive type="section"
module="core">IfDefine</directive> コンテナと <directive
type="section" module="core">IfModule</directive> コンテナは
サーバの起動時と再起動時にのみ評価されます。起動時に条件が真であれば、
コンテナ中のディレクティブはすべてのリクエストに適用されます。条件が
偽であれば、コンテナ中のディレクティブは無視されます。</p>
<p><directive type="section" module="core">IfDefine</directive> $B%G%#%l%/%F%#%V$O(B
<program>httpd</program> $B%3%^%s%I%i%$%s$GE,@Z$J%Q%i%a!<%?$,Dj5A$5$l$?$H$-$K$N$_(B
$BE,MQ$5$l$k%G%#%l%/%F%#%V$r0O$$$^$9!#Nc$($P<!$N@_Dj$G$O!"%5!<%P$,(B
<code>httpd -DClosedForNow</code> $B$r;H$C$F5/F0$5$l$?$H$-$@$1$9$Y$F$N(B
$B%j%/%(%9%H$rJL$N%5%$%H$K%j%@%$%l%/%H$7$^$9(B:</p>
<p><directive type="section" module="core">IfDefine</directive> ディレクティブは
<program>httpd</program> コマンドラインで適切なパラメータが定義されたときにのみ
適用されるディレクティブを囲います。例えば次の設定では、サーバが
<code>httpd -DClosedForNow</code> を使って起動されたときだけすべての
リクエストを別のサイトにリダイレクトします:</p>
<example>
&lt;IfDefine ClosedForNow&gt;<br />
@@ -75,20 +75,20 @@ Redirect / http://otherserver.example.com/<br />
&lt;/IfDefine&gt;
</example>
<p><directive type="section" module="core">IfModule</directive> $B$O(B
$BHs>o$K;w$F$$$^$9$,!"Be$o$j$K%5!<%P>e$G%b%8%e!<%k$,;HMQ2DG=$J>l9g$K$N$_(B
$BE,MQ2DG=$J%G%#%l%/%F%#%V$r0O$$$^$9!#%b%8%e!<%k$O%5!<%P$K(B
$B@EE*$KAH$_9~$^$l$F$$$k$+!"F0E*$KAH$_9~$`$h$&$K$J$C$F$$$F!"@_Dj%U%!%$%kCf$G(B
<directive module="mod_so">LoadModule</directive> $B$N9T$,$h$jA0$N(B
$BItJ,$K=q$+$l$F$$$kI,MW$,$"$j$^$9!#$3$N%G%#%l%/%F%#%V$OFCDj$N%b%8%e!<%k$N(B
$BB8:_$K4X$o$i$:@_Dj%U%!%$%k$,F0:n$9$kI,MW$,$"$k>l9g$K$N$_;H$C$F$/$@$5$$!#(B
$B>o$KF0:n$7$FM_$7$$%G%#%l%/%F%#%V$r0O$`$?$a$K;H$&$Y$-$G$O$"$j$^$;$s!#(B
$BB8:_$7$J$$%b%8%e!<%k$K4X$9$kM-MQ$J%(%i!<%a%C%;!<%8$NH/@8$rM^@)$7$F$7$^$$$^$9$N$G!#(B
<p><directive type="section" module="core">IfModule</directive>
非常に似ていますが、代わりにサーバ上でモジュールが使用可能な場合にのみ
適用可能なディレクティブを囲います。モジュールはサーバに
静的に組み込まれているか、動的に組み込むようになっていて、設定ファイル中で
<directive module="mod_so">LoadModule</directive> の行がより前の
部分に書かれている必要があります。このディレクティブは特定のモジュールの
存在に関わらず設定ファイルが動作する必要がある場合にのみ使ってください。
常に動作して欲しいディレクティブを囲むために使うべきではありません。
存在しないモジュールに関する有用なエラーメッセージの発生を抑制してしまいますので。
</p>
<p>$B<!$NNc$G$O!"(B<module>mod_mime_magic</module> $B$,$"$k$H$-$K$N$_(B <directive
module="mod_mime_magic">MimeMagicFiles</directive> $B%G%#%l%/%F%#%V$,(B
$BE,MQ$5$l$^$9!#(B</p>
<p>次の例では、<module>mod_mime_magic</module> があるときにのみ <directive
module="mod_mime_magic">MimeMagicFiles</directive> ディレクティブが
適用されます。</p>
<example>
&lt;IfModule mod_mime_magic.c&gt;<br />
@@ -96,41 +96,41 @@ MimeMagicFile conf/magic<br />
&lt;/IfModule&gt;
</example>
<p><directive type="section" module="core">IfDefine</directive> $B%G%#%l%/%F%#%V$H(B
<directive type="section" module="core">IfModule</directive> $B%G%#%l%/%F%#%V$O(B
$B%F%9%H$NA0$K(B "!" $B$rIU$1$k$3$H$GH]Dj$N>r7o$rE,MQ$9$k$3$H$,$G$-$^$9!#(B
$B$^$?!"$3$l$i$N%;%/%7%g%s$O$h$jJ#;($J@)8B$r2]$9$?$a$KF~$l;R$K$9$k$3$H$,$G$-$^$9!#(B
<p><directive type="section" module="core">IfDefine</directive> ディレクティブと
<directive type="section" module="core">IfModule</directive> ディレクティブは
テストの前に "!" を付けることで否定の条件を適用することができます。
また、これらのセクションはより複雑な制限を課すために入れ子にすることができます。
</p>
</section>
<section id="file-and-web"><title>$B%U%!%$%k%7%9%F%`$H%&%'%V6u4V(B</title>
<section id="file-and-web"><title>ファイルシステムとウェブ空間</title>
<p>$B:G$b$h$/;H$o$l$k@_Dj$N%;%/%7%g%s%3%s%F%J$O%U%!%$%k%7%9%F%`$d%&%'%V6u4V$N(B
$BFCDj$N>l=j$N@_Dj$rJQ99$9$k$b$N$G$9!#$^$:!"$3$NFs$D$N0c$$$rM}2r$9$k$3$H$,(B
$BBg@Z$G$9!#%U%!%$%k%7%9%F%`$O%*%Z%l!<%F%#%s%0%7%9%F%`$+$i8+$?%G%#%9%/$NFbMF$G$9!#(B
$B$?$H$($P!"%G%U%)%k%H$N%$%s%9%H!<%k$G$O(B Apache $B$O(B Unix $B%U%!%$%k%7%9%F%`$G$O(B
<code>/usr/local/apache2</code> $B$K!"(BWindows $B%U%!%$%k%7%9%F%`$G$O(B
<code>"c:/Program Files/Apache Group/Apache2"</code> $B$KB8:_$7$^$9!#(B
(Apache $B$G$O(B Windows $B$G$b%Q%9%;%Q%l!<%?$H$7$F%9%i%C%7%e$r;H$&$3$H$K(B
$B5$$r$D$1$F$/$@$5$$!#(B) $BBP>HE*$K!"%&%'%V6u4V$O$"$J$?$N%5%$%H$r(B
$B%&%'%V%5!<%P$+$iG[?.$5$l$k$b$N$H$7$F8+$?$b$N$G!"%/%i%$%"%s%H$K8+$($k$b$N$G$9!#(B
$B%G%U%)%k%H$N(B Unix $B>e$N(B Apache $B$N%$%s%9%H!<%k$G$O%&%'%V6u4V$N(B
<code>/dir/</code> $B$H$$$&%Q%9$O%U%!%$%k%7%9%F%`$N(B
<code>/usr/local/apache2/htdocs/dir/</code> $B$H$$$&%Q%9$KBP1~$7$^$9!#(B
$B%&%'%V%Z!<%8$O%G!<%?%Y!<%9$dB>$N>l=j$+$iF0E*$K@8@.$9$k$3$H$b$G$-$^$9$N$G!"(B
$B%&%'%V6u4V$O%U%!%$%k%7%9%F%`$KD>@\%^%C%W$9$kI,MW$O$"$j$^$;$s!#(B</p>
<p>最もよく使われる設定のセクションコンテナはファイルシステムやウェブ空間の
特定の場所の設定を変更するものです。まず、この二つの違いを理解することが
大切です。ファイルシステムはオペレーティングシステムから見たディスクの内容です。
たとえば、デフォルトのインストールでは Apache は Unix ファイルシステムでは
<code>/usr/local/apache2</code> に、Windows ファイルシステムでは
<code>"c:/Program Files/Apache Group/Apache2"</code> に存在します。
(Apache では Windows でもパスセパレータとしてスラッシュを使うことに
気をつけてください。) 対照的に、ウェブ空間はあなたのサイトを
ウェブサーバから配信されるものとして見たもので、クライアントに見えるものです。
デフォルトの Unix 上の Apache のインストールではウェブ空間の
<code>/dir/</code> というパスはファイルシステムの
<code>/usr/local/apache2/htdocs/dir/</code> というパスに対応します。
ウェブページはデータベースや他の場所から動的に生成することもできますので、
ウェブ空間はファイルシステムに直接マップする必要はありません。</p>
<section id="filesystem"><title>$B%U%!%$%k%7%9%F%`%3%s%F%J(B</title>
<section id="filesystem"><title>ファイルシステムコンテナ</title>
<p><directive type="section" module="core">Directory</directive> $B%G%#%l%/%F%#%V$H(B
<directive type="section" module="core">Files</directive> $B%G%#%l%/%F%#%V!"$=$l$H(B
$B$=$l$i$N@55,I=8=HG$O%G%#%l%/%F%#%V$r%U%!%$%k%7%9%F%`$N0lItJ,$KBP$7$FE,MQ$7$^$9!#(B
<directive type="section" module="core">Directory</directive> $B%;%/%7%g%s$N(B
$BCf$N%G%#%l%/%F%#%V$O;XDj$5$l$?%G%#%l%/%H%j$H$=$N$9$Y$F$N%5%V%G%#%l%/%H%j$K(B
$BE,MQ$5$l$^$9!#(B<a href="howto/htaccess.html">.htaccess $B%U%!%$%k(B</a>$B$r(B
$B;H$&$3$H$G$bF1$88z2L$rF@$k$3$H$,$G$-$^$9!#Nc$($P!"<!$N@_Dj$G$O(B
<code>/var/web/dir1</code> $B$H$9$Y$F$N%5%V%G%#%l%/%H%j$KBP$7$F(B
$B%G%#%l%/%H%j%$%s%G%C%/%9$r9T$J$$$^$9!#(B</p>
<p><directive type="section" module="core">Directory</directive> ディレクティブと
<directive type="section" module="core">Files</directive> ディレクティブ、それと
それらの正規表現版はディレクティブをファイルシステムの一部分に対して適用します。
<directive type="section" module="core">Directory</directive> セクションの
中のディレクティブは指定されたディレクトリとそのすべてのサブディレクトリに
適用されます。<a href="howto/htaccess.html">.htaccess ファイル</a>を
使うことでも同じ効果を得ることができます。例えば、次の設定では
<code>/var/web/dir1</code> とすべてのサブディレクトリに対して
ディレクトリインデックスを行ないます。</p>
<example>
&lt;Directory /var/web/dir1&gt;<br />
@@ -138,11 +138,11 @@ Options +Indexes<br />
&lt;/Directory&gt;
</example>
<p><directive type="section" module="core">Files</directive> $B%;%/%7%g%s$N(B
$BCf$K$"$k%G%#%l%/%F%#%V$O$I$N%G%#%l%/%H%j$K$"$k$+$K4X$o$i$:!";XDj$5$l$?L>A0$N(B
$B$9$Y$F$N%U%!%$%k$KE,MQ$5$l$^$9!#$G$9$+$iNc$($P0J2<$N@_Dj%G%#%l%/%F%#%V$,(B
$B@_Dj%U%!%$%k$N<g%;%/%7%g%s$K=q$+$l$?$H$-$K$O!"$9$Y$F$N>l=j$N(B
<code>private.html</code> $B$H$$$&L>A0$N%U%!%$%k$X$N%"%/%;%9$r5qH]$7$^$9!#(B</p>
<p><directive type="section" module="core">Files</directive> セクションの
中にあるディレクティブはどのディレクトリにあるかに関わらず、指定された名前の
すべてのファイルに適用されます。ですから例えば以下の設定ディレクティブが
設定ファイルの主セクションに書かれたときには、すべての場所の
<code>private.html</code> という名前のファイルへのアクセスを拒否します。</p>
<example>
&lt;Files private.html&gt;<br />
@@ -151,15 +151,15 @@ Deny from all<br />
&lt;/Files&gt;
</example>
<p>$B%U%!%$%k%7%9%F%`$NFCDj$N>l=j$K$"$k%U%!%$%k$r;XDj$9$k$?$a$K!"(B
<directive type="section" module="core">Files</directive> $B%;%/%7%g%s$H(B
<directive type="section" module="core">Directory</directive> $B%;%/%7%g%s$r(B
$BAH$_9g$o$;$k$3$H$,$G$-$^$9!#Nc$($P!"<!$N@_Dj$G$O(B
<p>ファイルシステムの特定の場所にあるファイルを指定するために、
<directive type="section" module="core">Files</directive> セクションと
<directive type="section" module="core">Directory</directive> セクションを
組み合わせることができます。例えば、次の設定では
<code>/var/web/dir1/private.html</code>,
<code>/var/web/dir1/subdir2/private.html</code>,
<code>/var/web/dir1/subdir3/private.html</code> $B$J$I!"(B
<code>/var/web/dir1/</code> $B%G%#%l%/%H%j$N2<$K$"$k$9$Y$F$N(B
<code>private.html</code> $B$X$N%"%/%;%9$r5qH]$7$^$9!#(B</p>
<code>/var/web/dir1/subdir3/private.html</code> など、
<code>/var/web/dir1/</code> ディレクトリの下にあるすべての
<code>private.html</code> へのアクセスを拒否します。</p>
<example>
&lt;Directory /var/web/dir1&gt;<br />
@@ -171,18 +171,18 @@ Deny from all<br />
</example>
</section>
<section id="webspace"><title>$B%&%'%V6u4V%3%s%F%J(B</title>
<section id="webspace"><title>ウェブ空間コンテナ</title>
<p>$B0lJ}!"(B<directive type="section" module="core">Location</directive>
$B%G%#%l%/%F%#%V$H$=$N@55,I=8=HG$O%&%'%V6u4V>e$NFbMF$KBP$7$F@_Dj$rJQ99$7$^$9!#(B
$B$?$H$($P!"<!$N@_Dj$G$O(B /private $B$G;O$^$k(B URL $B%Q%9$X$N%"%/%;%9$r@)8B$7$^$9!#(B
$B6qBNE*$K$O!"(B
<p>一方、<directive type="section" module="core">Location</directive>
ディレクティブとその正規表現版はウェブ空間上の内容に対して設定を変更します。
たとえば、次の設定では /private で始まる URL パスへのアクセスを制限します。
具体的には、
<code>http://yoursite.example.com/private</code>,
<code>http://yoursite.example.com/private123</code>,
<code>http://yoursite.example.com/private/dir/file.html</code>
$B$X$N%j%/%(%9%H$d!"(B
$BB>$NF1MM$K(B <code>/private</code> $BJ8;zNs$G;O$^$k%j%/%(%9%H$K(B
$BE,MQ$5$l$^$9!#(B</p>
へのリクエストや、
他の同様に <code>/private</code> 文字列で始まるリクエストに
適用されます。</p>
<example>
&lt;Location /private&gt;<br />
@@ -192,11 +192,11 @@ Deny from all<br />
</example>
<p><directive type="section" module="core">Location</directive>
$B%G%#%l%/%F%#%V$O%U%!%$%k%7%9%F%`$H4X78$"$kI,MW$,A4$/$"$j$^$;$s!#(B
$B$?$H$($P<!$NNc$G$O!"$I$N$h$&$K$7$FFCDj$N(B URL $B$r(B
<module>mod_status</module>$B$GDs6!$5$l$F$$$k(B Apache
$BFbIt%O%s%I%i$K%^%C%W$9$k$+$r<($7$F$$$^$9!#%U%!%$%k%7%9%F%`$K(B
<code>server-status</code> $B$H$$$&%U%!%$%k$,B8:_$9$kI,MW$O$"$j$^$;$s!#(B</p>
ディレクティブはファイルシステムと関係ある必要が全くありません。
たとえば次の例では、どのようにして特定の URL を
<module>mod_status</module>で提供されている Apache
内部ハンドラにマップするかを示しています。ファイルシステムに
<code>server-status</code> というファイルが存在する必要はありません。</p>
<example>
&lt;Location /server-status&gt;<br />
@@ -205,30 +205,30 @@ SetHandler server-status<br />
</example>
</section>
<section id="wildcards"><title>$B%o%$%k%I%+!<%I$H@55,I=8=(B</title>
<section id="wildcards"><title>ワイルドカードと正規表現</title>
<p><directive type="section" module="core">Directory</directive>,
<directive type="section" module="core">Files</directive>,
<directive type="section" module="core">Location</directive>
$B%G%#%l%/%F%#%V$G$O!"(B C $BI8=`%i%$%V%i%j$N(B <code>fnmatch</code> $B$N$h$&$K(B
shell $B%9%?%$%k$N%o%$%k%I%+!<%I%-%c%i%/%?$,;HMQ$G$-$^$9!#(B
"*" $BJ8;z$OG$0U$NJ8;zNs$K%^%C%A$7!"(B"?" $BJ8;z$OG$0U$N(B 1 $BJ8;z$K%^%C%A$7!"(B
"[<em>seq</em>]" $B$O(B <em>seq</em> $B$NG$0U$NJ8;z$K%^%C%A$7$^$9!#(B
"/" $BJ8;z$O$I$N%o%$%k%I%+!<%I$G$b%^%C%A$5$l$^$;$s!#(B
$BL@<(E*$K;XDj$9$kI,MW$,$"$j$^$9!#(B</p>
ディレクティブでは、 C 標準ライブラリの <code>fnmatch</code> のように
shell スタイルのワイルドカードキャラクタが使用できます。
"*" 文字は任意の文字列にマッチし、"?" 文字は任意の 1 文字にマッチし、
"[<em>seq</em>]" <em>seq</em> の任意の文字にマッチします。
"/" 文字はどのワイルドカードでもマッチされません。
明示的に指定する必要があります。</p>
<p>$B$3$l$h$j=@Fp$J%^%C%A%s%0$,I,MW$J>l9g$O!"$3$l$i$N%3%s%F%J$K@55,I=8=(B
(regex) $BHG$G$"$k(B
<p>これより柔軟なマッチングが必要な場合は、これらのコンテナに正規表現
(regex) 版である
<directive type="section" module="core">DirectoryMatch</directive>,
<directive type="section" module="core">FilesMatch</directive>,
<directive type="section" module="core">LocationMatch</directive>
$B$,$"$j!"%^%C%A$rA*Br$9$k$N$K(B perl $B8_49(B<a href="glossary.html#regex"
>$B@55,I=8=(B</a>$B$r;HMQ$G$-$^$9!#$7$+$7!"<!$N@_Dj$N%^!<%8$KL\$rDL$7$F!"(B
regex $B%;%/%7%g%s$r;HMQ$9$k$3$H$G!"%G%#%l%/%F%#%V$NE,MQ$,$I$N$h$&$K(B
$BJQ2=$9$k$+GD0.$7$F$*$$$F$/$@$5$$!#(B</p>
があり、マッチを選択するのに perl 互換<a href="glossary.html#regex"
>正規表現</a>を使用できます。しかし、次の設定のマージに目を通して、
regex セクションを使用することで、ディレクティブの適用がどのように
変化するか把握しておいてください。</p>
<p>$BA4%f!<%6%G%#%l%/%H%j$N@_Dj$rJQ99$9$k!"Hs(B regex
$B%o%$%k%I%+!<%I%;%/%7%g%s$O<!$N$h$&$K$J$j$^$9!#(B</p>
<p>全ユーザディレクトリの設定を変更する、非 regex
ワイルドカードセクションは次のようになります。</p>
<example>
&lt;Directory /home/*/public_html&gt;<br />
@@ -236,8 +236,8 @@ Options Indexes<br />
&lt;/Directory&gt;
</example>
<p>regex $B%;%/%7%g%s$r;HMQ$9$k$3$H$G!"2hA|%U%!%$%k$NB?$/$N%?%$%W$KBP$9$k(B
$B%"%/%;%9$r0lEY$K5qH]$G$-$^$9!#(B</p>
<p>regex セクションを使用することで、画像ファイルの多くのタイプに対する
アクセスを一度に拒否できます。</p>
<example>
&lt;FilesMatch \.(?i:gif|jpe?g|png)$&gt;<br />
Order allow,deny<br />
@@ -247,25 +247,25 @@ Deny from all<br />
</section>
<section id="whichwhen"><title>$B$$$D2?$r;H$&$+(B</title>
<section id="whichwhen"><title>いつ何を使うか</title>
<p>$B%U%!%$%k%7%9%F%`%3%s%F%J$H%&%'%V6u4V%3%s%F%J$r;H$$J,$1$k$N$O!"(B
$B<B:]$K$OHs>o$K4JC1$G$9!#%U%!%$%k%7%9%F%`$K0MB8$9$k(B
$B%*%V%8%'%/%H$K%G%#%l%/%F%#%V$rE,1~$9$k>l9g$O!"I,$:(B
<directive type="section" module="core">Directory</directive> $B$+(B
<p>ファイルシステムコンテナとウェブ空間コンテナを使い分けるのは、
実際には非常に簡単です。ファイルシステムに依存する
オブジェクトにディレクティブを適応する場合は、必ず
<directive type="section" module="core">Directory</directive>
<directive type="section" module="core">Files</directive>
$B$r;HMQ$7$^$9!#%U%!%$%k%7%9%F%`$K0MB8$7$J$$%*%V%8%'%/%H(B
($B%G!<%?%Y!<%9$+$i@8@.$5$l$k%&%'%V%Z!<%8$J$I(B)
$B$K%G%#%l%/%F%#%V$rE,MQ$9$k:]$K$O!"(B
を使用します。ファイルシステムに依存しないオブジェクト
(データベースから生成されるウェブページなど)
にディレクティブを適用する際には、
<directive type="section" module="core">Location</directive>
$B$r;HMQ$7$^$9!#(B</p>
を使用します。</p>
<p>$B%U%!%$%k%7%9%F%`>e$N%*%V%8%'%/%H$X$N%"%/%;%9$r@)8B$9$k$?$a$K!"(B
<p>ファイルシステム上のオブジェクトへのアクセスを制限するために、
<directive type="section" module="core">Location</directive>
$B$r7h$7$F;HMQ$J$$$h$&$K$7$^$7$g$&!#(B
$BF10l$N%U%!%$%k%7%9%F%`0LCV$K%^%C%W$7$F$$$k!"%&%'%V6u4V0LCV(B (URL)
$B$,B??t$"$C$F!"@_Dj$7$?@)8B$r1*2s$5$l$F$7$^$&$+$b$7$l$J$$$+$i$G$9!#(B
$BNc$($P<!$N@_Dj$r9M$($F$_$^$7$g$&!#(B</p>
を決して使用ないようにしましょう。
同一のファイルシステム位置にマップしている、ウェブ空間位置 (URL)
が多数あって、設定した制限を迂回されてしまうかもしれないからです。
例えば次の設定を考えてみましょう。</p>
<example>
&lt;Location /dir/&gt;<br />
@@ -275,51 +275,51 @@ Deny from all<br />
</example>
<p><code>http://yoursite.example.com/dir/</code>
$B$X$N%j%/%(%9%H$G$O>e<j$/F0:n$7$^$9!#$7$+$7BgJ8;z>.J8;z$r6hJL$7$J$$(B
$B%U%!%$%k%7%9%F%`$r;H$C$F$$$?$i$I$&$J$k$G$7$g$&(B?
へのリクエストでは上手く動作します。しかし大文字小文字を区別しない
ファイルシステムを使っていたらどうなるでしょう?
<code>http://yoursite.example.com/DIR/</code>
$B$X$N%j%/%(%9%H$G4JC1$K%"%/%;%9@)8B$r1*2s$5$l$F$7$^$$$^$9!#$3$l$KBP$7$F(B
へのリクエストで簡単にアクセス制限を迂回されてしまいます。これに対して
<directive type="section" module="core">Directory</directive>
$B%G%#%l%/%F%#%V$r;HMQ$9$k$H!"$I$N$h$&$K8F$S=P$5$l$?$+$K4X$o$i$:(B
$B$=$N>l=j$+$iDs6!$5$l$kFbMF$KE,MQ$5$l$^$9!#(B
($BNc30$O%U%!%$%k%7%9%F%`$N%j%s%/$G$9!#%7%s%\%j%C%/%j%s%/$r;H$C$F!"(B
$BF10l$N%G%#%l%/%H%j$rJ#?t$N%U%!%$%k%7%9%F%`$K@_CV$G$-$^$9!#(B
ディレクティブを使用すると、どのように呼び出されたかに関わらず
その場所から提供される内容に適用されます。
(例外はファイルシステムのリンクです。シンボリックリンクを使って、
同一のディレクトリを複数のファイルシステムに設置できます。
<directive type="section" module="core">Directory</directive>
$B%G%#%l%/%F%#%V$O%Q%9L>$r%j%;%C%H$9$k$3$H$J$/%7%s%\%j%C%/%j%s%/$r(B
$BC)$j$^$9!#$G$9$+$i!"9bEY$J%;%-%e%j%F%#$,MW5a$5$l$k>l9g$O!"(B
$BE,@Z$K(B <directive module="core">Options</directive>
$B%G%#%l%/%F%#%V$r;HMQ$7$F%7%s%\%j%C%/%j%s%/$rL58z$K$9$k$Y$-$G$9!#(B)</p>
ディレクティブはパス名をリセットすることなくシンボリックリンクを
辿ります。ですから、高度なセキュリティが要求される場合は、
適切に <directive module="core">Options</directive>
ディレクティブを使用してシンボリックリンクを無効にするべきです。)</p>
<p>$BBgJ8;z>.J8;z$r6hJL$9$k%U%!%$%k%7%9%F%`$r;HMQ$7$F$$$k$+$i>e5-$N$3$H$O(B
$BL54X78$@$H;W$o$l$k$+$b$7$l$^$;$s$,!"(B
$BF10l$N%U%!%$%k%7%9%F%`0LCV$KJ#?t$N%&%'%V6u4V0LCV$r%^%C%W$9$kJ}K!$O!"(B
$BB>$K$$$/$i$G$b$"$k$H$$$&$3$H$r3P$($F$$$F$/$@$5$$!#(B
$B$G$9$+$i$G$-$k8B$j%U%!%$%k%7%9%F%`%3%s%F%J$r;HMQ$7$F$/$@$5$$!#(B
$B$7$+$7$J$,$i0l$D$@$1Nc30$,$"$j$^$9!#(B
<code>&lt;Location /&gt;</code> $B%;%/%7%g%s$O$I$s$J(B URL
$B$K$b4X$o$i$:E,MQ$5$l$k$N$G!"40A4$K0BA4$G$9!#(B</p>
<p>大文字小文字を区別するファイルシステムを使用しているから上記のことは
無関係だと思われるかもしれませんが、
同一のファイルシステム位置に複数のウェブ空間位置をマップする方法は、
他にいくらでもあるということを覚えていてください。
ですからできる限りファイルシステムコンテナを使用してください。
しかしながら一つだけ例外があります。
<code>&lt;Location /&gt;</code> セクションはどんな URL
にも関わらず適用されるので、完全に安全です。</p>
</section>
</section>
<section id="virtualhost"><title>$B%P!<%A%c%k%[%9%H(B</title>
<section id="virtualhost"><title>バーチャルホスト</title>
<p><directive type="section" module="core">VirtualHost</directive>
$B%3%s%F%J$OFCDj$N%[%9%H$KE,MQ$9$k%G%#%l%/%F%#%V$r3JG<$7$^$9!#(B
$B0lBf$N%^%7%s$GJ#?t$N%[%9%H$r0[$J$k@_Dj$GDs6!$7$?$$$H$-$KM-MQ$G$9!#(B
$B>\:Y$K4X$7$F$O(B<a href="vhosts/">$B%P!<%A%c%k%[%9%H%I%-%e%a%s%H(B</a>$B$r(B
$B$4Mw2<$5$$!#(B</p>
コンテナは特定のホストに適用するディレクティブを格納します。
一台のマシンで複数のホストを異なる設定で提供したいときに有用です。
詳細に関しては<a href="vhosts/">バーチャルホストドキュメント</a>を
ご覧下さい。</p>
</section>
<section id="proxy"><title>$B%W%m%/%7(B</title>
<section id="proxy"><title>プロクシ</title>
<p><directive type="section" module="mod_proxy">Proxy</directive>
$B$H(B <directive type="section" module="mod_proxy">ProxyMatch</directive>
$B%3%s%F%J$O!"FCDj$N(B URL $B$K%^%C%A$9$k(B <module>mod_proxy</module>
$B%W%m%/%7%5!<%P$r7PM3$7$F%"%/%;%9$7$?%5%$%H$KBP$7$F$N$_E,MQ$5$l$k(B
$B@_Dj%G%#%l%/%F%#%V$r3JG<$7$^$9!#Nc$($P<!$N@_Dj$O!"(B<code>cnn.com</code>
$B%&%'%V%5%$%H$K%"%/%;%9$9$k$?$a$KMQ$$$i$l$k%W%m%/%7%5!<%P$r(B
$B@)8B$7$^$9!#(B</p>
<directive type="section" module="mod_proxy">ProxyMatch</directive>
コンテナは、特定の URL にマッチする <module>mod_proxy</module>
プロクシサーバを経由してアクセスしたサイトに対してのみ適用される
設定ディレクティブを格納します。例えば次の設定は、<code>cnn.com</code>
ウェブサイトにアクセスするために用いられるプロクシサーバを
制限します。</p>
<example>
&lt;Proxy http://cnn.com/*&gt;<br />
@@ -329,13 +329,13 @@ Deny from all<br />
</example>
</section>
<section id="whatwhere"><title>$B$I$N%G%#%l%/%F%#%V$,;H$($k$N(B?</title>
<section id="whatwhere"><title>どのディレクティブが使えるの?</title>
<p>$B$I$N%?%$%W$N@_Dj%;%/%7%g%s$G$I$N%G%#%l%/%F%#%V$,;HMQ$G$-$k$+$O!"(B
$B%G%#%l%/%F%#%V$N(B <a href="mod/directive-dict.html#Context">Context</a>
$B$r8+$F$/$@$5$$!#(B
<p>どのタイプの設定セクションでどのディレクティブが使用できるかは、
ディレクティブの <a href="mod/directive-dict.html#Context">Context</a>
を見てください。
<directive type="section" module="core">Directory</directive>
$B$G;HMQ2DG=$J$b$N$OA4$F!"F1MM$K(B
で使用可能なものは全て、同様に
<directive type="section" module="core">DirectoryMatch</directive>,
<directive type="section" module="core">Files</directive>,
<directive type="section" module="core">FilesMatch</directive>,
@@ -343,89 +343,89 @@ Deny from all<br />
<directive type="section" module="core">LocationMatch</directive>,
<directive type="section" module="mod_proxy">Proxy</directive>,
<directive type="section" module="mod_proxy">ProxyMatch</directive>
$B%;%/%7%g%s$G;HMQ2DG=$G$9!#$7$+$7$J$,$i4v$D$+Nc30$bB8:_$7$^$9!#(B</p>
セクションで使用可能です。しかしながら幾つか例外も存在します。</p>
<ul>
<li><directive module="core">AllowOverride</directive> $B%G%#%l%/%F%#%V$O(B
<li><directive module="core">AllowOverride</directive> ディレクティブは
<directive type="section" module="core">Directory</directive>
$B%;%/%7%g%s$G$N$_;HMQ2DG=$G$9!#(B</li>
セクションでのみ使用可能です。</li>
<li><code>FollowSymLinks</code> $B$H(B <code>SymLinksIfOwnerMatch</code> $B$N(B
<directive module="core">Options</directive> $B$O!"(B
<li><code>FollowSymLinks</code> <code>SymLinksIfOwnerMatch</code>
<directive module="core">Options</directive> は、
<directive type="section" module="core">Directory</directive>
$B%;%/%7%g%s$+(B <code>.htaccess</code> $B%U%!%$%k$G$N$_;HMQ2DG=$G$9!#(B</li>
セクションか <code>.htaccess</code> ファイルでのみ使用可能です。</li>
<li><directive module="core">Options</directive> $B%G%#%l%/%F%#%V$O!"(B
<li><directive module="core">Options</directive> ディレクティブは、
<directive type="section" module="core">Files</directive>
$B$H(B <directive type="section" module="core">FilesMatch</directive>
$B%;%/%7%g%s$G$O;HMQ$G$-$^$;$s!#(B</li>
<directive type="section" module="core">FilesMatch</directive>
セクションでは使用できません。</li>
</ul>
</section>
<section id="mergin"><title>$B%;%/%7%g%s$N%^!<%8J}K!(B</title>
<section id="mergin"><title>セクションのマージ方法</title>
<p>$B%^!<%8$N=gHV$O0J2<$N$h$&$K$J$C$F$$$^$9(B:</p>
<p>マージの順番は以下のようになっています:</p>
<ol>
<li><directive
type="section" module="core">Directory</directive> ($B@55,I=8=L5$7(B) $B$H(B
<code>.htaccess</code> $B$rF1;~$K(B (<code>.htaccess</code> $B$,5v2D$5$l$F$$$l$P!"$=$l$,(B
<directive type="section" module="core">Directory</directive> $B$r>e=q$-$7$^$9(B)
type="section" module="core">Directory</directive> (正規表現無し) と
<code>.htaccess</code> を同時に (<code>.htaccess</code> が許可されていれば、それが
<directive type="section" module="core">Directory</directive> を上書きします)
</li>
<li><directive type="section" module="core">DirectoryMatch</directive>
($B$H(B <code>&lt;Directory ~&gt;</code></li>
( <code>&lt;Directory ~&gt;</code></li>
<li><directive type="section" module="core">Files</directive> $B$H(B
<directive type="section" module="core">FilesMatch</directive> $B$rF1;~$K(B</li>
<li><directive type="section" module="core">Files</directive>
<directive type="section" module="core">FilesMatch</directive> を同時に</li>
<li><directive type="section" module="core">Location</directive> $B$H(B
<directive type="section" module="core">LocationMatch</directive> $B$rF1;~$K(B</li>
<li><directive type="section" module="core">Location</directive>
<directive type="section" module="core">LocationMatch</directive> を同時に</li>
</ol>
<p><directive type="section" module="core">Directory</directive>
$B0J30$O!"$=$l$>$l$N%0%k!<%W$O@_Dj%U%!%$%k$K8=$l$?=gHV$K=hM}$5$l$^$9!#(B
<directive type="section" module="core">Directory</directive> ($B>e$N%0%k!<%W(B 1)
$B$O%G%#%l%/%H%j$,C;$$$b$N$+$iD9$$$b$N$X$H=hM}$5$l$^$9!#$G$9$+$i!"(B
$BNc$($P(B <code>&lt;Directory /var/web/dir1&gt;</code> $B$O(B
<code>&lt;Directory /var/web/dir/subdir&gt;</code> $B$NA0$K=hM}$5$l$^$9!#J#?t$N(B
以外は、それぞれのグループは設定ファイルに現れた順番に処理されます。
<directive type="section" module="core">Directory</directive> (上のグループ 1)
はディレクトリが短いものから長いものへと処理されます。ですから、
例えば <code>&lt;Directory /var/web/dir1&gt;</code>
<code>&lt;Directory /var/web/dir/subdir&gt;</code> の前に処理されます。複数の
<directive
type="section" module="core">Directory</directive> $B%;%/%7%g%s$,(B
$BF1$8%G%#%l%/%H%j$K(B
$BE,MQ$5$l$k>l9g$O!"@_Dj%U%!%$%kCf$N=gHV$K=>$C$F=hM}$5$l$^$9!#(B
type="section" module="core">Directory</directive> セクションが
同じディレクトリに
適用される場合は、設定ファイル中の順番に従って処理されます。
<directive module="core">Include</directive>
$B$K$h$C$FA^F~$5$l$?@_Dj$O(B $BA^F~$7$F$$$k%U%!%$%k$N(B
によって挿入された設定は 挿入しているファイルの
<directive module="core">Include</directive>
$B%G%#%l%/%F%#%V$N0LCV$K$"$C$?$+$N$h$&$K07$o$l$^$9!#(B</p>
ディレクティブの位置にあったかのように扱われます。</p>
<p><directive type="section"
module="core">VirtualHost</directive> $B%;%/%7%g%sCf$N%;%/%7%g%s$O(B
$B%P!<%A%c%k%[%9%H$NDj5A$N30B&$NBP1~$9$k%;%/%7%g%s$N(B
<em>$B8e(B</em>$B$KE,MQ$5$l$^$9!#$3$l$K$h$j%P!<%A%c%k%[%9%H$,(B
$B%a%$%s$N%5!<%P@_Dj$r>e=q$-$G$-$k$h$&$J$j$^$9!#(B</p>
module="core">VirtualHost</directive> セクション中のセクションは
バーチャルホストの定義の外側の対応するセクションの
<em>後</em>に適用されます。これによりバーチャルホストが
メインのサーバ設定を上書きできるようなります。</p>
<p><module>mod_proxy</module> $B$G%j%/%(%9%H$,=hM}$5$l$k>l9g$O!"(B
$B=hM}=gHV$N$&$A!"(B<directive module="core"
type="section">Directory</directive> $B%3%s%F%J$NItJ,$,(B
<p><module>mod_proxy</module> でリクエストが処理される場合は、
処理順番のうち、<directive module="core"
type="section">Directory</directive> コンテナの部分が
<directive module="mod_proxy" type="section">Proxy</directive>
$B%3%s%F%J$K<h$C$FBe$o$i$l$^$9!#(B</p>
コンテナに取って代わられます。</p>
<p>$B8e$N%;%/%7%g%s$N%G%#%l%/%F%#%V$,A0$N%;%/%7%g%s$N$b$N$r>e=q$-$7$^$9!#(B</p>
<p>後のセクションのディレクティブが前のセクションのものを上書きします。</p>
<note><title>$B5;=Q%a%b(B</title>
$B<B:]$K$O!"L>A0$rJQ49$9$kCJ3,(B (URL
$B$r%U%!%$%kL>$K%^%C%W$9$k$?$a$K(B <code>Alias</code> $B$d(B
<code>DocumentRoot</code> $B$,;HMQ$5$l$k$H$3$m(B) $B$ND>A0$K(B
<note><title>技術メモ</title>
実際には、名前を変換する段階 (URL
をファイル名にマップするために <code>Alias</code>
<code>DocumentRoot</code> が使用されるところ) の直前に
<directive type="section" module="core">Location</directive>/<directive type="section" module="core">LocationMatch</directive>
$B$,9T$J$o$l$^$9!#(B
$B$3$l$i$rE,MQ$7$?7k2L$OJQ49$,=*$o$C$?8e$K40A4$K<N$F$i$l$^$9!#(B
が行なわれます。
これらを適用した結果は変換が終わった後に完全に捨てられます。
</note>
<section id="merge-examples"><title>$BNc(B</title>
<section id="merge-examples"><title></title>
<p>$B<!$O%^!<%8$N=gHV$r<($9$?$a$NWs0UE*$JNc$K$J$C$F$$$^$9!#(B
$B%j%/%(%9%HA4$F$KE,MQ$5$l$k$H$7$F!"K\Nc$N%G%#%l%/%F%#%V$O(B
A &gt; B &gt; C &gt; D &gt; E $B$N=gHV$KE,MQ$5$l$^$9!#(B</p>
<p>次はマージの順番を示すための恣意的な例になっています。
リクエスト全てに適用されるとして、本例のディレクティブは
A &gt; B &gt; C &gt; D &gt; E の順番に適用されます。</p>
<example>
&lt;Location /&gt;<br />
@@ -452,12 +452,12 @@ A<br />
<br />
</example>
<p>$B$b$C$H6qBNE*$J!"<!$NNc$r9M$($F$_$^$7$g$&!#(B
<p>もっと具体的な、次の例を考えてみましょう。
<directive module="core" type="section">Directory</directive>
$B%;%/%7%g%s$K@_CV$5$l$?%"%/%;%9@)8B$K4X$o$i$:!"(B
セクションに設置されたアクセス制限に関わらず、
<directive module="core" type="section">Location</directive>
$B%;%/%7%g%s$,:G8e$KI>2A$5$l$F!"%5!<%P$X$N%"%/%;%9$O@)8B$5$l$^$;$s!#(B
$B8@$$49$($l$P!"%^!<%8$N=gHV$O=EMW$G!"Cm0U$7$F;HMQ$7$F$/$@$5$$(B!</p>
セクションが最後に評価されて、サーバへのアクセスは制限されません。
言い換えれば、マージの順番は重要で、注意して使用してください!</p>
<example>
&lt;Location /&gt;<br />

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 151408:420990 (outdated) -->
@@ -22,16 +22,16 @@
<manualpage metafile="server-wide.xml.meta">
<title>$B%5!<%PA4BN$N@_Dj(B</title>
<title>サーバ全体の設定</title>
<summary>
<p>$B$3$N%I%-%e%a%s%H$G$O(B<module>core</module>
$B%5!<%P$N%G%#%l%/%F%#%V$NCf$G!"(B
$B4pK\F0:n$r@_Dj$9$k$?$a$N$b$N$r@bL@$7$^$9!#(B</p>
<p>このドキュメントでは<module>core</module>
サーバのディレクティブの中で、
基本動作を設定するためのものを説明します。</p>
</summary>
<section id="identification">
<title>$B%5!<%P(B ID</title>
<title>サーバ ID</title>
<related>
<directivelist>
@@ -43,26 +43,26 @@
</directivelist>
</related>
<p><directive module="core">ServerAdmin</directive> $B%G%#%l%/%F%#%V$H(B
<p><directive module="core">ServerAdmin</directive> ディレクティブと
<directive module="core">ServerTokens</directive>
$B%G%#%l%/%F%#%V$O!"%(%i!<%a%C%;!<%8$J$I$N%5!<%P$,:n$k%I%-%e%a%s%H$K!"(B
$B$I$N$h$&$J%5!<%P$N>pJs$rI=<($9$k$+$r@)8f$7$^$9!#(B
<directive module="core">ServerTokens</directive> $B%G%#%l%/%F%#%V$O!"(BServer HTTP
$B%l%9%]%s%9%X%C%@%U%#!<%k%I$NCM$r@_Dj$7$^$9!#(B</p>
ディレクティブは、エラーメッセージなどのサーバが作るドキュメントに、
どのようなサーバの情報を表示するかを制御します。
<directive module="core">ServerTokens</directive> ディレクティブは、Server HTTP
レスポンスヘッダフィールドの値を設定します。</p>
<p><directive module="core">ServerName</directive> $B%G%#%l%/%F%#%V$H(B
<p><directive module="core">ServerName</directive> ディレクティブと
<directive module="core">UseCanonicalName</directive>
$B%G%#%l%/%F%#%V$O!"%5!<%P$,<+J,<+?H$r;2>H$9$k(B URL
$B$r:n$k$H$-$K;H$o$l$^$9!#(B
$B$?$H$($P!"%/%i%$%"%s%H$,%G%#%l%/%H%j$rMW5a$7$F!"(B
$B$=$N%G%#%l%/%H%jL>$N:G8e$K%9%i%C%7%e$,IU$$$F$$$J$$$h$&$J>l9g$K$O!"(B
$B%I%-%e%a%s%H$NAjBPE*$J;2>H$r@5$7$/2r7h$G$-$k$h$&$K$9$k$?$a$K!"(B
Apache $B$O:G8e$N%9%i%C%7%e$r4^$s$@40A4$J%Q%9$K%/%i%$%"%s%H$r(B
$B%j%@%$%l%/%H$5$;$kI,MW$,$"$j$^$9!#(B</p>
ディレクティブは、サーバが自分自身を参照する URL
を作るときに使われます。
たとえば、クライアントがディレクトリを要求して、
そのディレクトリ名の最後にスラッシュが付いていないような場合には、
ドキュメントの相対的な参照を正しく解決できるようにするために、
Apache は最後のスラッシュを含んだ完全なパスにクライアントを
リダイレクトさせる必要があります。</p>
</section>
<section id="locations">
<title>$B%U%!%$%k$N0LCV(B</title>
<title>ファイルの位置</title>
<related>
<directivelist>
@@ -76,18 +76,18 @@
</directivelist>
</related>
<p>$B$3$l$i$N%G%#%l%/%F%#%V$O(B Apache
$B$,E,@Z$JF0:n$r$9$k$?$a$KI,MW$J3F<o%U%!%$%k$N0LCV$r@)8f$7$^$9!#(B
$B%Q%9$,%9%i%C%7%e(B (/) $B$G;O$^$C$F$$$J$$$H$-$O!"%U%!%$%k$O(B
<directive module="core">ServerRoot</directive> $B$+$i$NAjBP%Q%9$H$7$F(B
$BC5$5$l$^$9!#(Broot
$B0J30$N%f!<%6$,=q$-9~$_2DG=$J%Q%9$K%U%!%$%k$rCV$/>l9g$OCm0U$,I,MW$G$9!#(B
$B>\:Y$O(B<a href="misc/security_tips.html#serverroot">$B!V%;%-%e%j%F%#>pJs!W(B</a>
$B$r;2>H$7$F$/$@$5$$!#(B</p>
<p>これらのディレクティブは Apache
が適切な動作をするために必要な各種ファイルの位置を制御します。
パスがスラッシュ (/) で始まっていないときは、ファイルは
<directive module="core">ServerRoot</directive> からの相対パスとして
探されます。root
以外のユーザが書き込み可能なパスにファイルを置く場合は注意が必要です。
詳細は<a href="misc/security_tips.html#serverroot">「セキュリティ情報」</a>
を参照してください。</p>
</section>
<section id="resource">
<title>$B%j%=!<%9$N@)8B(B</title>
<title>リソースの制限</title>
<related>
<directivelist>
@@ -102,17 +102,17 @@
</directivelist>
</related>
<p><directive>LimitRequest</directive>* $B%G%#%l%/%F%#%V$O(B Apache
$B$,%/%i%$%"%s%H$+$i$N%j%/%(%9%HFI$_9~$_$G;H$&(B
$B%j%=!<%9$r@)8B$9$k$?$a$K;H$o$l$^$9!#$3$l$i$NCM$r@)8B$9$k$3$H$G!"(B
$B$$$/$D$+$N%5!<%S%95qH]967b$O1F6A$rOB$i$2$k$3$H$,$G$-$^$9!#(B</p>
<p><directive>LimitRequest</directive>* ディレクティブは Apache
がクライアントからのリクエスト読み込みで使う
リソースを制限するために使われます。これらの値を制限することで、
いくつかのサービス拒否攻撃は影響を和らげることができます。</p>
<p><directive>RLimit</directive>* $B%G%#%l%/%F%#%V$O!"(BApache $B$N;R%W%m%;%9$+$i(B
fork $B$5$l$?%W%m%;%9$,;HMQ$9$k%j%=!<%9$r@)8B$9$k$?$a$K;H$o$l$^$9!#(B
$BFC$K!"$3$l$O(B CGI $B%9%/%j%W%H$H(B SSI exec
$B%3%^%s%I$G;H$o$l$k%j%=!<%9$r@)8f$7$^$9!#(B</p>
<p><directive>RLimit</directive>* ディレクティブは、Apache の子プロセスから
fork されたプロセスが使用するリソースを制限するために使われます。
特に、これは CGI スクリプトと SSI exec
コマンドで使われるリソースを制御します。</p>
<p><directive module="mpm_common">ThreadStackSize</directive> $B$O(B Netware
$B$G$N$_!"%9%?%C%/$NBg$-$5$r@)8f$9$k$?$a$K;H$o$l$^$9!#(B</p>
<p><directive module="mpm_common">ThreadStackSize</directive> Netware
でのみ、スタックの大きさを制御するために使われます。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sitemap SYSTEM "./style/sitemap.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 159098:587444 (outdated) -->
@@ -25,142 +25,142 @@
<title>Site Map</title>
<summary>
<p>$B$3$N%Z!<%8$O8=;~E@$GMxMQ2DG=$J(B
<a href="./">Apache HTTP $B%5!<%P%P!<%8%g%s(B &httpd.major;.&httpd.minor; $B$N%I%-%e%a%s%F!<%7%g%s(B</a>
$B$N0lMw$G$9!#(B</p>
<p>このページは現時点で利用可能な
<a href="./">Apache HTTP サーババージョン &httpd.major;.&httpd.minor; のドキュメンテーション</a>
の一覧です。</p>
</summary>
<category id="release">
<title>$B%j%j!<%9$N%a%b(B</title>
<page href="upgrading.html">1.3 $B$+$i(B 2.0 $B$X$N%"%C%W%0%l!<%I(B</page>
<page href="new_features_2_0.html">Apache 2.0 $B$N?75!G=(B</page>
<title>リリースのメモ</title>
<page href="upgrading.html">1.3 から 2.0 へのアップグレード</page>
<page href="new_features_2_0.html">Apache 2.0 の新機能</page>
<page href="license.html">Apache License</page>
</category>
<category id="using">
<title>Apache HTTP $B%5!<%P$N;HMQ(B</title>
<page href="install.html">Apache $B$N%3%s%Q%$%k$H%$%s%9%H!<%k(B</page>
<page href="invoking.html">Apache $B$N5/F0(B</page>
<page href="stopping.html">$B%5!<%P$NDd;_$H:F5/F0(B</page>
<page href="configuring.html">$B@_Dj%U%!%$%k(B</page>
<page href="sections.html">Directory, Location, Files $B%;%/%7%g%s$NF0:nJ}K!(B</page>
<page href="server-wide.html">$B%5!<%PA4BN$N@_Dj(B</page>
<page href="logs.html">$B%m%0%U%!%$%k(B</page>
<page href="urlmapping.html">URL $B$+$i%U%!%$%k%7%9%F%`>e$N0LCV$X$N%^%C%W(B</page>
<page href="misc/security_tips.html">$B%;%-%e%j%F%#$N%3%D(B</page>
<page href="dso.html">$BF0E*6&M-%*%V%8%'%/%H(B (DSO) $B%5%]!<%H(B</page>
<page href="content-negotiation.html">$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B</page>
<page href="custom-error.html">$B%+%9%?%`%(%i!<%l%9%]%s%9(B</page>
<page href="bind.html">Apache $B$,;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj(B</page>
<page href="mpm.html">$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)</page>
<page href="env.html">Apache $B$K$*$1$k4D6-JQ?t(B</page>
<page href="handler.html">Apache $B$N%O%s%I%i$N;HMQ(B</page>
<page href="filter.html">$B%U%#%k%?(B</page>
<page href="suexec.html">suEXEC $B%5%]!<%H(B</page>
<page href="misc/perf-tuning.html">$B@-G=$K4X$9$k%R%s%H(B</page>
<page href="misc/rewriteguide.html">URL $B%j%i%$%H%,%$%I(B</page>
<title>Apache HTTP サーバの使用</title>
<page href="install.html">Apache のコンパイルとインストール</page>
<page href="invoking.html">Apache の起動</page>
<page href="stopping.html">サーバの停止と再起動</page>
<page href="configuring.html">設定ファイル</page>
<page href="sections.html">Directory, Location, Files セクションの動作方法</page>
<page href="server-wide.html">サーバ全体の設定</page>
<page href="logs.html">ログファイル</page>
<page href="urlmapping.html">URL からファイルシステム上の位置へのマップ</page>
<page href="misc/security_tips.html">セキュリティのコツ</page>
<page href="dso.html">動的共有オブジェクト (DSO) サポート</page>
<page href="content-negotiation.html">コンテントネゴシエーション</page>
<page href="custom-error.html">カスタムエラーレスポンス</page>
<page href="bind.html">Apache が使用するアドレスとポートの設定</page>
<page href="mpm.html">マルチプロセッシングモジュール (MPM)</page>
<page href="env.html">Apache における環境変数</page>
<page href="handler.html">Apache のハンドラの使用</page>
<page href="filter.html">フィルタ</page>
<page href="suexec.html">suEXEC サポート</page>
<page href="misc/perf-tuning.html">性能に関するヒント</page>
<page href="misc/rewriteguide.html">URL リライトガイド</page>
</category>
<category id="vhosts">
<title>Apache $B%P!<%A%c%k%[%9%H%I%-%e%a%s%H(B</title>
<page separate="yes" href="vhosts/">$B35N,(B</page>
<page href="vhosts/name-based.html">$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H(B</page>
<page href="vhosts/ip-based.html">IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$N%5%]!<%H(B</page>
<page href="vhosts/mass.html">$BF0E*$K@_Dj$5$l$?Bg5,LO%P!<%A%c%k%[%9%H(B</page>
<page href="vhosts/examples.html">VirtualHost $B$NNc(B</page>
<page href="vhosts/details.html">$B%P!<%A%c%k%[%9%H$N%^%C%A%s%0$N>\$7$$@bL@(B</page>
<page href="vhosts/fd-limits.html">$B%U%!%$%k5-=R;R$N8B3&(B</page>
<page href="dns-caveats.html">DNS $B$H(B Apache $B$H$K4X78$9$kLdBj(B</page>
<title>Apache バーチャルホストドキュメント</title>
<page separate="yes" href="vhosts/">概略</page>
<page href="vhosts/name-based.html">名前ベースのバーチャルホスト</page>
<page href="vhosts/ip-based.html">IP ベースのバーチャルホストのサポート</page>
<page href="vhosts/mass.html">動的に設定された大規模バーチャルホスト</page>
<page href="vhosts/examples.html">VirtualHost の例</page>
<page href="vhosts/details.html">バーチャルホストのマッチングの詳しい説明</page>
<page href="vhosts/fd-limits.html">ファイル記述子の限界</page>
<page href="dns-caveats.html">DNS と Apache とに関係する問題</page>
</category>
<category id="faq">
<title>Apache $B%5!<%P$N$h$/$"$k<ALd(B</title>
<page href="faq/">$B35N,(B</page>
<page href="faq/support.html">$B%5%]!<%H(B</page>
<page href="faq/error.html">$B%(%i!<%a%C%;!<%8(B</page>
<title>Apache サーバのよくある質問</title>
<page href="faq/">概略</page>
<page href="faq/support.html">サポート</page>
<page href="faq/error.html">エラーメッセージ</page>
</category>
<category id="ssl">
<title>Apache $B$N(B SSL/TLS $B0E9f2=(B</title>
<page separate="yes" href="ssl/">$B35N,(B</page>
<page href="ssl/ssl_intro.html">SSL/TLS $B0E9f2=(B: $BF~Lg(B</page>
<page href="ssl/ssl_compat.html">SSL/TLS $B0E9f2=(B: $B8_49@-(B</page>
<page href="ssl/ssl_howto.html">SSL/TLS $B0E9f2=(B: $B%O%&%D!<(B</page>
<page href="ssl/ssl_faq.html">SSL/TLS $B0E9f2=(B: FAQ</page>
<title>Apache SSL/TLS 暗号化</title>
<page separate="yes" href="ssl/">概略</page>
<page href="ssl/ssl_intro.html">SSL/TLS 暗号化: 入門</page>
<page href="ssl/ssl_compat.html">SSL/TLS 暗号化: 互換性</page>
<page href="ssl/ssl_howto.html">SSL/TLS 暗号化: ハウツー</page>
<page href="ssl/ssl_faq.html">SSL/TLS 暗号化: FAQ</page>
</category>
<category id="howto">
<title>$B%,%$%I!"%A%e!<%H%j%"%k!"%O%&%D!<(B</title>
<page separate="yes" href="howto/">$B35N,(B</page>
<page href="howto/auth.html">$BG'>Z(B</page>
<page href="howto/cgi.html">CGI $B$K$h$kF0E*%3%s%F%s%D(B</page>
<page href="howto/ssi.html">Server Side Includes $BF~Lg(B</page>
<page href="howto/htaccess.html">.htaccess $B%U%!%$%k(B</page>
<page href="howto/public_html.html">$B%f!<%6Kh$N%&%'%V%G%#%l%/%H%j(B</page>
<title>ガイド、チュートリアル、ハウツー</title>
<page separate="yes" href="howto/">概略</page>
<page href="howto/auth.html">認証</page>
<page href="howto/cgi.html">CGI による動的コンテンツ</page>
<page href="howto/ssi.html">Server Side Includes 入門</page>
<page href="howto/htaccess.html">.htaccess ファイル</page>
<page href="howto/public_html.html">ユーザ毎のウェブディレクトリ</page>
</category>
<category id="platform">
<title>$B%W%i%C%H%U%)!<%`8GM-$N>pJs(B</title>
<page separate="yes" href="platform/">$B35N,(B</page>
<page href="platform/windows.html">Microsoft Windows $B$G$N(B Apache $B$N;HMQ(B</page>
<page href="platform/win_compiling.html">Microsoft Windows $B$G$N(B Apache
$B$N%3%s%Q%$%k(B</page>
<page href="platform/netware.html">Novell NetWare $B$G(B Apache $B$r;H$&(B</page>
<page href="platform/perf-hp.html">HPUX $B$G9b@-G=%&%'%V%5!<%P$r<B9T$9$k(B</page>
<page href="platform/ebcdic.html">EBCDIC $BHG(B Apache</page>
<title>プラットフォーム固有の情報</title>
<page separate="yes" href="platform/">概略</page>
<page href="platform/windows.html">Microsoft Windows での Apache の使用</page>
<page href="platform/win_compiling.html">Microsoft Windows での Apache
のコンパイル</page>
<page href="platform/netware.html">Novell NetWare で Apache を使う</page>
<page href="platform/perf-hp.html">HPUX で高性能ウェブサーバを実行する</page>
<page href="platform/ebcdic.html">EBCDIC Apache</page>
</category>
<category id="programs">
<title>Apache HTTP $B%5!<%P$H%5%]!<%H%W%m%0%i%`(B</title>
<page separate="yes" href="programs/">$B35N,(B</page>
<page href="programs/httpd.html">$B%^%K%e%"%k%Z!<%8(B: httpd</page>
<page href="programs/ab.html">$B%^%K%e%"%k%Z!<%8(B: ab</page>
<page href="programs/apachectl.html">$B%^%K%e%"%k%Z!<%8(B: apachectl</page>
<page href="programs/apxs.html">$B%^%K%e%"%k%Z!<%8(B: apxs</page>
<page href="programs/configure.html">$B%^%K%e%"%k%Z!<%8(B: configure</page>
<page href="programs/dbmmanage.html">$B%^%K%e%"%k%Z!<%8(B: dbmmanage</page>
<page href="programs/htcacheclean.html">$B%^%K%e%"%k%Z!<%8(B: htcacheclean</page>
<page href="programs/htdbm.html">$B%^%K%e%"%k%Z!<%8(B: htdbm</page>
<page href="programs/htdigest.html">$B%^%K%e%"%k%Z!<%8(B: htdigest</page>
<page href="programs/htpasswd.html">$B%^%K%e%"%k%Z!<%8(B: htpasswd</page>
<page href="programs/logresolve.html">$B%^%K%e%"%k%Z!<%8(B: logresolve</page>
<page href="programs/rotatelogs.html">$B%^%K%e%"%k%Z!<%8(B: rotatelogs</page>
<page href="programs/suexec.html">$B%^%K%e%"%k%Z!<%8(B: suexec</page>
<page href="programs/other.html">$BB>$N%W%m%0%i%`(B</page>
<title>Apache HTTP サーバとサポートプログラム</title>
<page separate="yes" href="programs/">概略</page>
<page href="programs/httpd.html">マニュアルページ: httpd</page>
<page href="programs/ab.html">マニュアルページ: ab</page>
<page href="programs/apachectl.html">マニュアルページ: apachectl</page>
<page href="programs/apxs.html">マニュアルページ: apxs</page>
<page href="programs/configure.html">マニュアルページ: configure</page>
<page href="programs/dbmmanage.html">マニュアルページ: dbmmanage</page>
<page href="programs/htcacheclean.html">マニュアルページ: htcacheclean</page>
<page href="programs/htdbm.html">マニュアルページ: htdbm</page>
<page href="programs/htdigest.html">マニュアルページ: htdigest</page>
<page href="programs/htpasswd.html">マニュアルページ: htpasswd</page>
<page href="programs/logresolve.html">マニュアルページ: logresolve</page>
<page href="programs/rotatelogs.html">マニュアルページ: rotatelogs</page>
<page href="programs/suexec.html">マニュアルページ: suexec</page>
<page href="programs/other.html">他のプログラム</page>
</category>
<category id="misc">
<title>Apache $B$=$NB>(B</title>
<page separate="yes" href="misc/">$B35N,(B</page>
<page href="misc/relevant_standards.html">$B4XO"$9$kI8=`5,3J(B</page>
<title>Apache その他</title>
<page separate="yes" href="misc/">概略</page>
<page href="misc/relevant_standards.html">関連する標準規格</page>
</category>
<category id="modules">
<title>Apache $B%b%8%e!<%k(B</title>
<page href="mod/module-dict.html">Apache $B%G%#%l%/%F%#%V$N@bL@$K;H$o$l$kMQ8l(B</page>
<page href="mod/directive-dict.html">Apache $B%G%#%l%/%F%#%V$r@bL@$K;H$o$l$kMQ8l(B</page>
<title>Apache モジュール</title>
<page href="mod/module-dict.html">Apache ディレクティブの説明に使われる用語</page>
<page href="mod/directive-dict.html">Apache ディレクティブを説明に使われる用語</page>
</category>
<category id="developer">
<title>$B3+H/<T$N$?$a$N%I%-%e%a%s%H(B</title>
<page separate="yes" href="developer/">$B35N,(B</page>
<page href="developer/API.html">Apache API $B%a%b(B</page>
<title>開発者のためのドキュメント</title>
<page separate="yes" href="developer/">概略</page>
<page href="developer/API.html">Apache API メモ</page>
<page href="developer/debugging.html">APR
$B$N%a%b%j%"%m%1!<%7%g%s$N%G%P%C%0(B</page>
<page href="developer/documenting.html">Apache 2.0 $B$N@bL@$r=q$/(B</page>
<page href="developer/hooks.html">Apache 2.0 $B%U%C%/4X?t(B</page>
<page href="developer/modules.html">Apache 1.3 $B$+$i(B Apache 2.0 $B$K%b%8%e!<%k$r(B
$B0\?"$9$k(B</page>
<page href="developer/request.html">Apache 2.0 $B$N%j%/%(%9%H=hM}(B</page>
<page href="developer/filters.html">Apache 2.0 $B$N%U%#%k%?$NF0:n$N;EJ}(B</page>
のメモリアロケーションのデバッグ</page>
<page href="developer/documenting.html">Apache 2.0 の説明を書く</page>
<page href="developer/hooks.html">Apache 2.0 フック関数</page>
<page href="developer/modules.html">Apache 1.3 から Apache 2.0 にモジュールを
移植する</page>
<page href="developer/request.html">Apache 2.0 のリクエスト処理</page>
<page href="developer/filters.html">Apache 2.0 のフィルタの動作の仕方</page>
</category>
<category id="index">
<title>$BMQ8l=8$H:w0z(B</title>
<page href="glossary.html">$BMQ8l=8(B</page>
<page href="mod/">$B%b%8%e!<%k:w0z(B</page>
<page href="mod/directives.html">$B%G%#%l%/%F%#%V:w0z(B</page>
<page href="mod/quickreference.html">$B%G%#%l%/%F%#%V(B $B%/%$%C%/%j%U%!%l%s%9(B</page>
<title>用語集と索引</title>
<page href="glossary.html">用語集</page>
<page href="mod/">モジュール索引</page>
<page href="mod/directives.html">ディレクティブ索引</page>
<page href="mod/quickreference.html">ディレクティブ クイックリファレンス</page>
</category>
</sitemap>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -23,32 +23,32 @@
<manualpage metafile="index.xml.meta">
<parentdocument href="../"/>
<title>Apache $B$N(B SSL/TLS $B0E9f2=(B</title>
<title>Apache SSL/TLS 暗号化</title>
<summary>
<p>Apache HTTP $B%5!<%P%b%8%e!<%k(B <module>mod_ssl</module> $B$,(B
<p>Apache HTTP サーバモジュール <module>mod_ssl</module>
<a href="http://www.openssl.org/">OpenSSL</a>
$B%i%$%V%i%j$X$N%$%s%?!<%U%'!<%9$rDs6!$7$F$$$^$9$,!"$3$l$O(B
Secure Sockts Layer $B$H(B Transport Layer Security
$B%W%m%H%3%k$rMQ$$$?6/NO$J0E9f2=$rDs6!$7$^$9!#(B
$B$3$N%b%8%e!<%k$d$3$NJ8=q$O(B Ralf S. Engelschall $B$N(B mod_ssl
$B%W%m%8%'%/%H$K4p$E$$$F$$$^$9!#(B</p>
ライブラリへのインターフェースを提供していますが、これは
Secure Sockts Layer Transport Layer Security
プロトコルを用いた強力な暗号化を提供します。
このモジュールやこの文書は Ralf S. Engelschall mod_ssl
プロジェクトに基づいています。</p>
</summary>
<section id="documentation"><title>Documentation</title>
<ul>
<li><a href="ssl_intro.html">$B$O$8$a$K(B</a></li>
<li><a href="ssl_compat.html">$B8_49@-(B</a></li>
<li><a href="ssl_intro.html">はじめに</a></li>
<li><a href="ssl_compat.html">互換性</a></li>
<li><a href="ssl_howto.html">How-To</a></li>
<li><a href="ssl_faq.html">$B$h$/$"$k<ALd(B</a></li>
<li><a href="../glossary.html">$BMQ8l(B</a></li>
<li><a href="ssl_faq.html">よくある質問</a></li>
<li><a href="../glossary.html">用語</a></li>
</ul>
</section>
<section id="mod-ssl"><title>mod_ssl</title>
<p>$B$3$N%b%8%e!<%k$GDs6!$5$l$k%G%#%l%/%F%#%V$d4D6-JQ?t$K4X$9$k(B
$B>\$7$$J8=q$O!"(B<a href="../mod/mod_ssl.html">mod_ssl
$B%j%U%!%l%s%9(B</a>$B$r$4Mw2<$5$$!#(B</p>
<p>このモジュールで提供されるディレクティブや環境変数に関する
詳しい文書は、<a href="../mod/mod_ssl.html">mod_ssl
リファレンス</a>をご覧下さい。</p>
</section>
</manualpage>

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 151408:655319 (outdated) -->
@@ -22,225 +22,225 @@
<manualpage metafile="stopping.xml.meta">
<title>$BDd;_$H:F5/F0(B</title>
<title>停止と再起動</title>
<summary>
<p>$B$3$NJ8=q$G$O(B Unix $B$KN`;w$7$?%7%9%F%`$G$N(B
Apache $B$NDd;_$H:F5/F0$K$D$$$F07$C$F$$$^$9!#(B
Windows NT, 2000, XP $B%f!<%6$O(B<a
href="platform/windows.html#winsvc">$B%5!<%S%9$H$7$F(B
Apache $B$r<B9T$9$k(B</a>$B$G!"(BWindows 9x, ME$B%f!<%6$O(B<a
href="platform/windows.html#wincons">$B%3%s%=!<%k%"%W%j%1!<%7%g%s$H$7$F(B
Apache $B$r<B9T$9$k(B</a>$B$G!"(B
$B$3$l$i$N%W%i%C%H%[!<%`$G$N;HMQJ}K!$r$4Mw2<$5$$!#(B</p>
<p>この文書では Unix に類似したシステムでの
Apache の停止と再起動について扱っています。
Windows NT, 2000, XP ユーザは<a
href="platform/windows.html#winsvc">サービスとして
Apache を実行する</a>で、Windows 9x, MEユーザは<a
href="platform/windows.html#wincons">コンソールアプリケーションとして
Apache を実行する</a>で、
これらのプラットホームでの使用方法をご覧下さい。</p>
</summary>
<seealso><program>httpd</program></seealso>
<seealso><program>apachectl</program></seealso>
<section id="introduction"><title>$B%$%s%H%m%@%/%7%g%s(B</title>
<section id="introduction"><title>イントロダクション</title>
<p>Apache $B$rDd;_$7$?$j:F5/F0$7$?$j$9$k$?$a$K$O!"<B9T$5$l$F$$$k(B
<program>httpd</program> $B%W%m%;%9$K%7%0%J%k$rAw$kI,MW$,$"$j$^$9!#(B
$B%7%0%J%k$rAw$k$K$OFs$D$NJ}K!$,$"$j$^$9!#(B
$B0l$DL\$O%W%m%;%9$KD>@\%7%0%J%k$rAw$k(B unix $B$N(B <code>kill</code>
$B%3%^%s%I$r;HMQ$9$kJ}K!$G$9!#(B
$B%7%9%F%`$r8+$l$P$?$/$5$s$N(B <program>httpd</program> $B$,(B
$B<B9T$5$l$F$$$k$N$K5$$,IU$/$G$7$g$&$,!"%7%0%J%k$rAw$k$N$O(B
$B?F%W%m%;%9$@$1$G!"$=$l0J30$N8D!9$N%W%m%;%9$K$O(B
$B%7%0%J%k$rAw$i$J$$$G2<$5$$!#$=$N?F%W%m%;%9$N(B pid $B$O(B
<p>Apache を停止したり再起動したりするためには、実行されている
<program>httpd</program> プロセスにシグナルを送る必要があります。
シグナルを送るには二つの方法があります。
一つ目はプロセスに直接シグナルを送る unix の <code>kill</code>
コマンドを使用する方法です。
システムを見ればたくさんの <program>httpd</program>
実行されているのに気が付くでしょうが、シグナルを送るのは
親プロセスだけで、それ以外の個々のプロセスには
シグナルを送らないで下さい。その親プロセスの pid は
<directive module="mpm_common">PidFile</directive>
$B$K=q$+$l$F$$$^$9!#$3$l$O$D$^$j!"?F0J30$N%W%m%;%9$K(B
$B%7%0%J%k$rAw$kI,MW$9$i$J$$!"$H$$$&$3$H$G$9!#(B
$B?F%W%m%;%9$KAw$k$3$H$,$G$-$k(B 3 $B<oN`$N%7%0%J%k$,$"$j$^$9(B:
に書かれています。これはつまり、親以外のプロセスに
シグナルを送る必要すらない、ということです。
親プロセスに送ることができる 3 種類のシグナルがあります:
<code><a href="#term">TERM</a></code>,
<code><a href="#hup">HUP</a></code>,
<code><a href="#graceful">USR1</a></code>
$B$G$9!#$3$l$i$N@bL@$K$D$$$F$OB3$-$r$4Mw2<$5$$!#(B</p>
です。これらの説明については続きをご覧下さい。</p>
<p>$B?F%W%m%;%9$K%7%0%J%k$rAw$k$K$O!"(B
$B<!$N$h$&$J%3%^%s%I$rH/9T$7$F2<$5$$(B:</p>
<p>親プロセスにシグナルを送るには、
次のようなコマンドを発行して下さい:</p>
<example>kill -TERM `cat /usr/local/apache2/logs/httpd.pid`</example>
<p><program>httpd</program> $B%W%m%;%9$K%7%0%J%k$rAw$k(B 2 $BHVL\$NJ}K!$O(B
<code>-k</code> $B$H$$$&%3%^%s%I%i%$%s0z?t$r;HMQ$9$k$3$H$G$9!#(B
$B2<$G@bL@$5$l$F$$$k$h$&$K!"(B<code>stop</code>, <code>restart</code>,
<code>graceful</code> $B$r;XDj$G$-$^$9!#(B
$B$3$l$i$O(B <program>httpd</program> $B$N0z?t$G$9$,!"(B
$B@)8fMQ$N%9%/%j%W%H(B <program>apachectl</program> $B$O$=$l$i$N0z?t$r$=$N$^$^(B
<program>httpd</program> $B$KEO$7$^$9!#(B</p>
<p><program>httpd</program> プロセスにシグナルを送る 2 番目の方法は
<code>-k</code> というコマンドライン引数を使用することです。
下で説明されているように、<code>stop</code>, <code>restart</code>,
<code>graceful</code> を指定できます。
これらは <program>httpd</program> の引数ですが、
制御用のスクリプト <program>apachectl</program> はそれらの引数をそのまま
<program>httpd</program> に渡します。</p>
<p><program>httpd</program> $B$K%7%0%J%k$rAw$C$?8e!"(B
$B<B9T>u67$r<!$N%3%^%s%I$GFI$`$3$H$,$G$-$^$9(B:</p>
<p><program>httpd</program> にシグナルを送った後、
実行状況を次のコマンドで読むことができます:</p>
<example>tail -f /usr/local/apache2/logs/error_log</example>
<p>$B$3$3$K5s$2$?Nc$O!"3F<+$N(B
<p>ここに挙げた例は、各自の
<directive module="core">ServerRoot</directive>
$B$H(B
<directive module="mpm_common">PidFile</directive>
$B$N@_Dj$KE,9g$9$k$h$&$KE,59=$@5$7$F2<$5$$!#(B</p>
の設定に適合するように適宜修正して下さい。</p>
</section>
<section id="term"><title>$B5^$JDd;_(B</title>
<section id="term"><title>急な停止</title>
<dl><dt>$B%7%0%J%k(B: TERM</dt>
<dl><dt>シグナル: TERM</dt>
<dd><code>apachectl -k stop</code></dd>
</dl>
<p><code>TERM</code> $B$"$k$$$O(B <code>stop</code>
$B%7%0%J%k$r?F%W%m%;%9$KAw$k$H!"B(:B$K;R%W%m%;%9A4$F$r(B kill $B$7$h$&$H$7$^$9!#(B
$B;R%W%m%;%9$r40A4$K(B kill $B$7=*$o$k$^$G$K?tIC$+$+$k$+$b$7$l$^$;$s!#(B
$B$=$N8e!"?F%W%m%;%9<+?H$,=*N;$7$^$9!#(B
$B=hM}Cf$N%j%/%(%9%H$OA4$FDd;_$5$l!"$b$O$d%j%/%(%9%H$KBP$9$k(B
$B1~Ez$O$5$l$^$;$s!#(B</p>
<p><code>TERM</code> あるいは <code>stop</code>
シグナルを親プロセスに送ると、即座に子プロセス全てを kill しようとします。
子プロセスを完全に kill し終わるまでに数秒かかるかもしれません。
その後、親プロセス自身が終了します。
処理中のリクエストは全て停止され、もはやリクエストに対する
応答はされません。</p>
</section>
<section id="graceful"><title>$B4K$d$+$J:F5/F0(B</title>
<section id="graceful"><title>緩やかな再起動</title>
<dl><dt>$B%7%0%J%k(B: USR1</dt>
<dl><dt>シグナル: USR1</dt>
<dd><code>apachectl -k graceful</code></dd>
</dl>
<p>$B?F%W%m%;%9$O(B <code>USR1</code> $B$"$k$$$O(B <code>graceful</code>
$B%7%0%J%k$r<u$1<h$k$H!";R%W%m%;%9$K8=:_$N%j%/%(%9%H$N=hM}$N8e$K=*N;$9$k(B
($B$"$k$$$O2?$b$7$F$$$J$1$l$P$9$0$K=*N;$9$k(B)
$B$h$&$K(B<em>$B=u8@(B</em>$B$7$^$9!#(B
$B?F%W%m%;%9$O@_Dj%U%!%$%k$r:FFI9~$7$F!"%m%0%U%!%$%k$r3+$-D>$7$^$9!#(B
$B;R%W%m%;%9$,=y!9$K$J$/$J$k$K=>$C$F!"(B
$B?7$7$$(B<em>$B@$Be(B</em>$B$N@_Dj$K$h$k;R%W%m%;%9$KCV$-49$($F$$$-$^$9!#(B
$B$=$7$F!"$3$l$i$,?7$?$J%j%/%(%9%H$KB(:B$K1~Ez$7;O$a$^$9!#(B</p>
<p>親プロセスは <code>USR1</code> あるいは <code>graceful</code>
シグナルを受け取ると、子プロセスに現在のリクエストの処理の後に終了する
(あるいは何もしていなければすぐに終了する)
ように<em>助言</em>します。
親プロセスは設定ファイルを再読込して、ログファイルを開き直します。
子プロセスが徐々になくなるに従って、
新しい<em>世代</em>の設定による子プロセスに置き換えていきます。
そして、これらが新たなリクエストに即座に応答し始めます。</p>
<note>$BFCDj$N%W%i%C%H%[!<%`$G$O(B <code>USR1</code>
$B$r4K$d$+$J:F5/F0$N$?$a$K;H$&$3$H$,$G$-$^$;$s$,!"Be$o$j$N%7%0%J%k(B
($BNc$($P(B WINCH) $B$,;HMQ$G$-$k$G$7$g$&!#(B
<note>特定のプラットホームでは <code>USR1</code>
を緩やかな再起動のために使うことができませんが、代わりのシグナル
(例えば WINCH) が使用できるでしょう。
<code>apachectl graceful</code>
$B$H$$$&%3%^%s%I$O%W%i%C%H%[!<%`$K9g$C$?%7%0%J%k$rAw$j$^$9!#(B</note>
というコマンドはプラットホームに合ったシグナルを送ります。</note>
<p>$B$3$N%3!<%I$O>o$K(B
MPM $B$N%W%m%;%9@)8f%G%#%l%/%F%#%V$N@_Dj$r=E;k$7$^$9$N$G!"(B
$B%/%i%$%"%s%H$N%j%/%(%9%H$r07$&%W%m%;%9$H%9%l%C%I$N?t$r:F5/F0$N=hM}Cf$b(B
$BE,@Z$JCM$K0];}$5$l$^$9!#!#$^$?!"<!$N$h$&$K$7$F(B
<p>このコードは常に
MPM のプロセス制御ディレクティブの設定を重視しますので、
クライアントのリクエストを扱うプロセスとスレッドの数を再起動の処理中も
適切な値に維持されます。。また、次のようにして
<directive module="mpm_common">StartServers</directive>
$B$r<i$j$^$9(B:
$B>/$J$/$H$b(B 1 $BIC8e$K(B <directive
module="mpm_common">StartServers</directive> $B8D$N?7$7$$;R%W%m%;%9$,(B
$B@8@.$5$l$F$$$J$1$l$P!"$=$N?t$K$J$k$h$&$KE,59%W%m%;%9$r@8@.$7$^$9!#(B
$B$3$N5sF0$O8=:_$NIi2Y$KBP$7$FE,@Z$J;R%W%m%;%9$N?t$H(B
を守ります:
少なくとも 1 秒後に <directive
module="mpm_common">StartServers</directive> 個の新しい子プロセスが
生成されていなければ、その数になるように適宜プロセスを生成します。
この挙動は現在の負荷に対して適切な子プロセスの数と
<directive
module="mpm_common">StartServers</directive> $B%Q%i%a!<%?$G$N(B
$B4uK>$N?t$NN>J}$r0];}$7$h$&$H$7$F$$$^$9!#(B</p>
module="mpm_common">StartServers</directive> パラメータでの
希望の数の両方を維持しようとしています。</p>
<p><module>mod_status</module> $B$r(B
$B;HMQ$7$F$$$k>l9g$O!"(B<code>USR1</code> $B%7%0%J%k$,Aw$i$l$?:]$K(B
$B%5!<%PE}7W$,%<%m$K(B<strong>$B@_Dj$5$l$J$$(B</strong>$B$3$H$K(B
$BCm0U$7$F$/$@$5$$!#(B
$B%5!<%P$,?7$7$$%j%/%(%9%H$K1~EzITG=$J;~4V$r:G>.$K$9$k$h$&$K(B
($B%j%/%(%9%H$O(B OS $B$K$h$C$F%-%e!<$KDI2C$5$l$k$N$G@dBP$KJ6<:$O$7$^$;$s(B)$B!"(B
$B$^$?F1;~$K!"4uK>$N%A%e!<%K%s%0%Q%i%a!<%?$r<i$k$h$&$K(B
$B%3!<%I$O=q$+$l$F$$$^$9!#(B
$B$3$N$h$&$K$9$k$?$a$K!"@$Be$r$^$?$,$C$?A4;R%W%m%;%9$NDI@W$K;H$o$l$F$$$k(B
<em>$B%9%3%"%\!<%I(B</em>$B$r0];}$7$J$1$l$P$J$j$^$;$s!#(B</p>
<p><module>mod_status</module>
使用している場合は、<code>USR1</code> シグナルが送られた際に
サーバ統計がゼロに<strong>設定されない</strong>ことに
注意してください。
サーバが新しいリクエストに応答不能な時間を最小にするように
(リクエストは OS によってキューに追加されるので絶対に紛失はしません)、
また同時に、希望のチューニングパラメータを守るように
コードは書かれています。
このようにするために、世代をまたがった全子プロセスの追跡に使われている
<em>スコアボード</em>を維持しなければなりません。</p>
<p>status $B%b%8%e!<%k$O!"4K$d$+$J:F5/F00JA0$+$i3+;O$7$F(B
$B%j%/%(%9%H$K1~Ez$7B3$1$F$$$k;R%W%m%;%9$rFCDj$9$k$?$a$K!"(B
<code>G</code> $B$r;H$&$3$H$b$7$^$9!#(B</p>
<p>status モジュールは、緩やかな再起動以前から開始して
リクエストに応答し続けている子プロセスを特定するために、
<code>G</code> を使うこともします。</p>
<p>$B8=:_!"(B<code>USR1</code> $B$r;H$&%m%00\F0%9%/%j%W%H$G$O!"(B
$B:F5/F0A0$N;R%W%m%;%9$,%m%0$r=q$-=*$o$C$?$3$H$r3N>Z$9$kJ}K!$,(B
$B$"$j$^$;$s!#8E$$%m%0$KBP$7$F2?$+$9$kA0$K!"(B
<code>USR1</code> $B%7%0%J%k$rAw$C$?8e$$$/$i$+E,Ev$J;~4VBT$D$3$H$r(B
$BDs0F$7$^$9!#Nc$($P!"BS0h$N69$$DL?.O)$N%f!<%6$N%j%/%(%9%H$N$[$H$s$I$,(B 10
$BJ,0J2<$G40N;$7$F$$$k$H$$$&$3$H$,J,$+$C$F$$$l$P!"(B
$B8E$$%m%0$K2?$+$9$kA0$K(B 15 $BJ,BT$D$H$$$&$3$H$G$9!#(B</p>
<p>現在、<code>USR1</code> を使うログ移動スクリプトでは、
再起動前の子プロセスがログを書き終わったことを確証する方法が
ありません。古いログに対して何かする前に、
<code>USR1</code> シグナルを送った後いくらか適当な時間待つことを
提案します。例えば、帯域の狭い通信路のユーザのリクエストのほとんどが 10
分以下で完了しているということが分かっていれば、
古いログに何かする前に 15 分待つということです。</p>
<note>$B:F5/F0;~$K@_Dj%U%!%$%k$K8m$j$,$"$k$H!"(B
$B?F%W%m%;%9$O:F5/F0$;$:$K%(%i!<$H$H$b$K=*N;$7$^$9!#(B
$B4K$d$+$J:F5/F0$N>l9g$O!"?F%W%m%;%9$,=*N;$7$?8e$G$b;R%W%m%;%9$,(B
$B<B9T$5$l$?$^$^J|CV$5$l$?$j$b$7$^$9!#(B
($B:G8e$N%j%/%(%9%H$r=hM}$7$?8e!V4K$d$+$K=*N;!W$9$k(B
$B;R%W%m%;%9$H$J$j$^$9!#(B)
$B%5!<%P$r:F5/F0$9$k:]$K!"$3$l$,LdBj$K$J$k$+$b$7$l$^$;$s(B
-- $B%5!<%P$O(B listen $B$9$k%]!<%H$K%P%$%s%I$G$-$J$$$+$b$7$l$^$;$s!#(B
$B:F5/F0$9$kA0$K!"@_Dj%U%!%$%k$N9=J8$r(B <code>-t</code>
$B%3%^%s%I%i%$%s0z?t(B
(<program>httpd</program> $B$r$4Mw2<$5$$(B)
$B$r;H$C$F8!>Z$9$k$3$H$,$G$-$^$9!#(B
$B@_Dj%U%!%$%k$N0UL#E*$JFbMF$r9=J8$HF1MM$K8!>Z$7$?$$>l9g$O!"(B
$BHs(B root $B%f!<%6$G(B <program>httpd</program> $B$r5/F0$7$h$&$H$9$l$P$o$+$j$^$9!#(B
$B$b$7%(%i!<$,$J$1$l$P!"%=%1%C%H$d%m%0$r3+$3$&$H$7$F(B
root $B$G$J$$$?$a(B
($B$b$7$/$O<B9TCf$N(B <program>httpd</program>
$B$,4{$KI,MW$J%]!<%H$K%P%$%s%I$7$F$$$k$?$a(B)
$B$K<:GT$9$k$G$7$g$&!#(B
$B$3$l0J30$NM}M3$G5/F0$K<:GT$7$?$N$G$"$l$P!"(B
$B$=$l$O@_Dj%U%!%$%k$N%(%i!<$G!"(B
$B4K$d$+$J:F5/F0$r9T$&A0$K$=$N8m$j$r=$@5$7$J$1$l$P$J$j$^$;$s!#(B</note>
<note>再起動時に設定ファイルに誤りがあると、
親プロセスは再起動せずにエラーとともに終了します。
緩やかな再起動の場合は、親プロセスが終了した後でも子プロセスが
実行されたまま放置されたりもします。
(最後のリクエストを処理した後「緩やかに終了」する
子プロセスとなります。)
サーバを再起動する際に、これが問題になるかもしれません
-- サーバは listen するポートにバインドできないかもしれません。
再起動する前に、設定ファイルの構文を <code>-t</code>
コマンドライン引数
(<program>httpd</program> をご覧下さい)
を使って検証することができます。
設定ファイルの意味的な内容を構文と同様に検証したい場合は、
非 root ユーザで <program>httpd</program> を起動しようとすればわかります。
もしエラーがなければ、ソケットやログを開こうとして
root でないため
(もしくは実行中の <program>httpd</program>
が既に必要なポートにバインドしているため)
に失敗するでしょう。
これ以外の理由で起動に失敗したのであれば、
それは設定ファイルのエラーで、
緩やかな再起動を行う前にその誤りを修正しなければなりません。</note>
</section>
<section id="hup"><title>$B5^$J:F5/F0(B</title>
<section id="hup"><title>急な再起動</title>
<dl><dt>$B%7%0%J%k(B: HUP</dt>
<dl><dt>シグナル: HUP</dt>
<dd><code>apachectl -k restart</code></dd>
</dl>
<p><code>HUP</code> $B$"$k$$$O(B <code>restart</code> $B%7%0%J%k$r?F%W%m%;%9$KAw$k$H!"(B
<code>TERM</code> $B$HF1MM$K;R%W%m%;%9$r(B kill $B$7$^$9$,!"(B
$B?F%W%m%;%9$O=*N;$7$^$;$s!#(B
$B@_Dj%U%!%$%k$r:FFI9~$7$F!"%m%0%U%!%$%kA4$F$r3+$-D>$7$^$9!#(B
$B$=$N8e!"?7$7$$;R%W%m%;%9$r5/F0$7$F1~Ez$rB3$1$^$9!#(B</p>
<p><code>HUP</code> あるいは <code>restart</code> シグナルを親プロセスに送ると、
<code>TERM</code> と同様に子プロセスを kill しますが、
親プロセスは終了しません。
設定ファイルを再読込して、ログファイル全てを開き直します。
その後、新しい子プロセスを起動して応答を続けます。</p>
<p><module>mod_status</module>
$B$r;H$C$F$$$k>l9g$O!"(B<code>HUP</code> $B$,Aw$i$l$?>l9g$K(B
$B%5!<%PE}7W$,%<%m$K@_Dj$5$l$k$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
を使っている場合は、<code>HUP</code> が送られた場合に
サーバ統計がゼロに設定されることに注意してください。</p>
<note>$B:F5/F0;~$K@_Dj%U%!%$%k$K8m$j$,$"$k$H!"(B
$B?F%W%m%;%9$O:F5/F0$;$:$K%(%i!<$H$H$b$K=*N;$7$^$9!#(B
$B$3$l$rHr$1$k$K$O<!$NJ}K!$r$4Mw2<$5$$!#(B</note>
<note>再起動時に設定ファイルに誤りがあると、
親プロセスは再起動せずにエラーとともに終了します。
これを避けるには次の方法をご覧下さい。</note>
</section>
<section id="race"><title>$BIUO?(B: $B%7%0%J%k$H6%9g>uBV(B</title>
<section id="race"><title>付録: シグナルと競合状態</title>
<p>Apache 1.2b9 $B0JA0$O!":F5/F0$dDd;_$N%7%0%J%k$r4^$`(B<em>$B6%9g>uBV(B</em>
($B6%9g>uBV$r4JC1$K@bL@$9$k$H(B: $B%?%$%_%s$K%0$h$kLdBj$G!"(B
$B6q9g$N0-$$;~4VBS$K$A$g$&$I2?$+$,5/$3$k$HM=A[30$NF0:n$r$9$k(B
$B$h$&$J$3$H$r;X$7$^$9(B) $B$,$"$j$^$7$?!#(B
$B!V@5$7$$!W5!G=$r;}$C$F$$$k%"!<%-%F%/%A%c$G$O!"$G$-$k$@$1(B
$B$3$N$h$&$J$3$H$,5/$3$i$J$$$h$&$K$7$F$$$^$9!#(B
$B$7$+$7!"$"$k<o$N%"!<%-%F%/%A%c$G$O6%9g>uBV$OL$$@3N<B$K5/$3$j$($k(B
$B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B</p>
<p>Apache 1.2b9 以前は、再起動や停止のシグナルを含む<em>競合状態</em>
(競合状態を簡単に説明すると: タイミンにグよる問題で、
具合の悪い時間帯にちょうど何かが起こると予想外の動作をする
ようなことを指します) がありました。
「正しい」機能を持っているアーキテクチャでは、できるだけ
このようなことが起こらないようにしています。
しかし、ある種のアーキテクチャでは競合状態は未だ確実に起こりえる
ということに注意してください。</p>
<p>$B%G%#%9%/>e$G(B
<p>ディスク上で
<directive module="mpm_common">ScoreBoardFile</directive>
$B$r;HMQ$7$F$$$k%"!<%-%F%/%A%c$G$O!"(B
$B@x:_E*$K%9%3%"%\!<%I$,2u$l$k2DG=@-$,$"$j$^$9!#(B
$B%9%3%"%\!<%I$,2u$l$?>l9g$O!"(B
"bind: Address already in use" (<code>HUP</code> $B8e(B) $B$d(B
"long lost child came home!" (<code>USR1</code> $B8e(B)
$B$H$$$C$?7k2L$K$J$j$^$9!#(B
$BA0<T$OCWL?E*$J%(%i!<$G$9$,!"(B
$B8e<T$O%9%3%"%\!<%I%9%m%C%H$r<:$&$@$1$G$9!#(B
$B$G$9$+$i4K$d$+$J:F5/F0$O!"$?$^$K3N<B$J:F5/F0(B (HUP)
$B$bJ;MQ$7$F;H$C$?J}$,NI$$$G$7$g$&!#(B
$B$3$l$i$NLdBj$r9nI~$9$k$N$OHs>o$KFq$7$$$N$G$9$,!"(B
$B9,$$$J$3$H$KBgItJ,$N%"!<%-%F%/%A%c$G$O%9%3%"%\!<%I$N%U%!%$%k$OI,MW$"$j$^$;$s!#(B
$B$3$l$r;HMQ$9$k%"!<%-%F%/%A%c$O!"(B
を使用しているアーキテクチャでは、
潜在的にスコアボードが壊れる可能性があります。
スコアボードが壊れた場合は、
"bind: Address already in use" (<code>HUP</code> 後) や
"long lost child came home!" (<code>USR1</code> )
といった結果になります。
前者は致命的なエラーですが、
後者はスコアボードスロットを失うだけです。
ですから緩やかな再起動は、たまに確実な再起動 (HUP)
も併用して使った方が良いでしょう。
これらの問題を克服するのは非常に難しいのですが、
幸いなことに大部分のアーキテクチャではスコアボードのファイルは必要ありません。
これを使用するアーキテクチャは、
<directive module="mpm_common">ScoreBoardFile</directive>
$B$r$4Mw2<$5$$!#(B</p>
をご覧下さい。</p>
<p>$BA4$F$N%"!<%-%F%/%A%c$K$*$$$F!"8D!9$N;R%W%m%;%9$G(B
$B7QB3E*$J(B HTTP $B%3%M%/%7%g%s(B (KeepAlive)
$B$K4X$9$k>.$5$J6%9g>uBV$,5/$3$j$($^$9!#(B
$B%j%/%(%9%H9T$rFI$s$@8e!"$=$7$F%j%/%(%9%H%X%C%@$rFI$`A0$K(B
$B;R%W%m%;%9$O=*N;$9$k$+$bCN$l$^$;$s!#(B
$B$3$l$KBP$9$k=$@5$,$"$j$^$9$,(B 1.2 $B$G=$@5$9$k$K$OH/8+$,CY$9$.$^$7$?!#(B
$BM}O@E*$K$O!"$3$l$OLdBj$G$O$"$j$^$;$s!#(B
$B$J$<$J$i(B KeepAlive $B$N%/%i%$%"%s%H$O!"%M%C%H%o!<%/CY1d$d(B
$B%5!<%P$N%?%$%`%"%&%H$J$I$KHw$($F$$$J$1$l$P$J$i$J$$$+$i$G$9!#(B
$B<B:]$K$b2?$+1F6A$,$"$k$h$&$K$O8+$($^$;$s(B
-- $B%F%9%H%1!<%9$G%5!<%P$r(B 1 $BIC4V$K(B 20 $B2s:F5/F0$7$F$b(B
$B%/%i%$%"%s%H$O2u$l$?2hA|$d6u$N%I%-%e%a%s%H$r<u$1<h$k$3$H$J$/(B
$B@5>o$K1\Mw$G$-$F$$$^$9!#(B</p>
<p>全てのアーキテクチャにおいて、個々の子プロセスで
継続的な HTTP コネクション (KeepAlive)
に関する小さな競合状態が起こりえます。
リクエスト行を読んだ後、そしてリクエストヘッダを読む前に
子プロセスは終了するかも知れません。
これに対する修正がありますが 1.2 で修正するには発見が遅すぎました。
理論的には、これは問題ではありません。
なぜなら KeepAlive のクライアントは、ネットワーク遅延や
サーバのタイムアウトなどに備えていなければならないからです。
実際にも何か影響があるようには見えません
-- テストケースでサーバを 1 秒間に 20 回再起動しても
クライアントは壊れた画像や空のドキュメントを受け取ることなく
正常に閲覧できています。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE language SYSTEM "../lang.dtd">
<!-- English revision: 106753 -->
@@ -39,37 +39,37 @@
<message id="nativename">Japanese</message>
<!-- Used for the moduleindex -->
<message id="corefeatures">$B%3%"5!G=$H(B MPM</message>
<message id="othermodules">$BB>$N%b%8%e!<%k(B</message>
<message id="obsoletemodules">$B5l<0$N%b%8%e!<%k(B</message>
<message id="corefeatures">コア機能と MPM</message>
<message id="othermodules">他のモジュール</message>
<message id="obsoletemodules">旧式のモジュール</message>
<!-- Used for the modulesynopsis and sitemap -->
<message id="obsoleteapachemodule">$B5l<0$N(B Apache Module</message>
<message id="apachemodule">Apache $B%b%8%e!<%k(B</message>
<message id="apachecore">Apache $B%3%"5!G=(B</message>
<message id="apachempmcommon">Apache MPM $B6&DL%G%#%l%/%F%#%V(B</message>
<message id="obsoleteapachemodule">旧式の Apache Module</message>
<message id="apachemodule">Apache モジュール</message>
<message id="apachecore">Apache コア機能</message>
<message id="apachempmcommon">Apache MPM 共通ディレクティブ</message>
<message id="apachempm">Apache MPM</message>
<!-- Used in description box for modulesynopsis -->
<message id="description">$B@bL@(B</message>
<message id="seealso">$B;2>H(B</message>
<message id="topics">$B%H%T%C%/(B</message>
<message id="status">$B%9%F!<%?%9(B</message>
<message id="moduleidentifier">$B%b%8%e!<%k<1JL;R(B</message>
<message id="sourcefile">$B%=!<%9%U%!%$%k(B</message>
<message id="compatibility">$B8_49@-(B</message>
<message id="description">説明</message>
<message id="seealso">参照</message>
<message id="topics">トピック</message>
<message id="status">ステータス</message>
<message id="moduleidentifier">モジュール識別子</message>
<message id="sourcefile">ソースファイル</message>
<message id="compatibility">互換性</message>
<!-- Used in manualpage -->
<message id="relatedmodules">$B4XO"%b%8%e!<%k(B</message>
<message id="relateddirectives">$B4XO"%G%#%l%/%F%#%V(B</message>
<message id="relatedmodules">関連モジュール</message>
<message id="relateddirectives">関連ディレクティブ</message>
<!-- Used in description box for directives -->
<message id="syntax">$B9=J8(B</message>
<message id="default">$B%G%U%)%k%H(B</message>
<message id="context">$B%3%s%F%-%9%H(B</message>
<message id="override">$B>e=q$-(B</message>
<message id="status">$B%9%F!<%?%9(B</message>
<message id="module">$B%b%8%e!<%k(B</message>
<message id="syntax">構文</message>
<message id="default">デフォルト</message>
<message id="context">コンテキスト</message>
<message id="override">上書き</message>
<message id="status">ステータス</message>
<message id="module">モジュール</message>
<!-- Status descriptions -->
<message id="base" letter="B">Base</message>
@@ -80,50 +80,50 @@
<message id="external" letter="T">External</message>
<!-- Used in directive context lists -->
<message id="serverconfig" letter="s">$B%5!<%P@_Dj%U%!%$%k(B</message>
<message id="virtualhost" letter="v">$B%P!<%A%c%k%[%9%H(B</message>
<message id="directory" letter="d">$B%G%#%l%/%H%j(B</message>
<message id="serverconfig" letter="s">サーバ設定ファイル</message>
<message id="virtualhost" letter="v">バーチャルホスト</message>
<message id="directory" letter="d">ディレクトリ</message>
<message id="htaccess" letter="h">.htaccess</message>
<!-- Used for directive lists -->
<message id="directives">$B%G%#%l%/%F%#%V(B</message>
<message id="directives">ディレクティブ</message>
<!-- the optional attribute replace-space-with takes a string.
if present, the space between <directive name> and 'Directive'
in directivesynopsis headings will be replaced by the given string.
(see de.xml for an example) -->
<message id="directive">$B%G%#%l%/%F%#%V(B</message>
<message id="nodirectives">$B$3$N%b%8%e!<%k$K%G%#%l%/%F%#%V$O$"$j$^$;$s!#(B</message>
<message id="directive">ディレクティブ</message>
<message id="nodirectives">このモジュールにディレクティブはありません。</message>
<!-- Used in summaries -->
<message id="summary">$B35MW(B</message>
<message id="summary">概要</message>
<!-- Used for translation notes -->
<message id="transnote">$BLuCm(B:</message>
<message id="transnote">訳注:</message>
<!-- Used for glossary link titles -->
<message id="glossarylink">$BMQ8l=8$r;2>H(B</message>
<message id="glossarylink">用語集を参照</message>
<!-- Used in headers and footers -->
<message id="apachetitle">- Apache HTTP $B%5!<%P(B</message>
<message id="apachehttpserver">Apache HTTP $B%5!<%P(B
$B%P!<%8%g%s(B &httpd.major;.&httpd.minor;</message>
<message id="apachetitle">- Apache HTTP サーバ</message>
<message id="apachehttpserver">Apache HTTP サーバ
バージョン &httpd.major;.&httpd.minor;</message>
<message id="apachedocalt">[APACHE DOCUMENTATION]</message>
<message id="search">Google Search</message> <!-- search button -->
<message id="index">$B:w0z(B</message> <!-- deprecated -->
<message id="home">$B%[!<%`(B</message> <!-- deprecated -->
<message id="index">索引</message> <!-- deprecated -->
<message id="home">ホーム</message> <!-- deprecated -->
<!-- breadcrumb links -->
<message id="apache">Apache</message>
<message id="http-server">HTTP $B%5!<%P(B</message>
<message id="documentation">$B%I%-%e%a%s%F!<%7%g%s(B</message>
<message id="version">$B%P!<%8%g%s(B
<message id="http-server">HTTP サーバ</message>
<message id="documentation">ドキュメンテーション</message>
<message id="version">バージョン
&httpd.major;.&httpd.minor;</message>
<!-- super menu -->
<message id="modules">$B%b%8%e!<%k(B</message>
<message id="modules">モジュール</message>
<message id="faq">FAQ</message>
<message id="glossary">$BMQ8l(B</message>
<message id="sitemap">$B%5%$%H%^%C%W(B</message>
<message id="glossary">用語</message>
<message id="sitemap">サイトマップ</message>
<!-- footer line -->
<message id="before-license">Licensed under the</message>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp"?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 151408:655869 (outdated) -->
@@ -22,574 +22,574 @@
<manualpage metafile="suexec.xml.meta">
<title>suEXEC $B%5%]!<%H(B</title>
<title>suEXEC サポート</title>
<summary>
<p><strong>suEXEC</strong>
$B5!G=$K$h$j!"(BApache $B%f!<%6$O(B Web $B%5!<%P$r<B9T$7$F$$$k%f!<%6(B ID $B$H$O(B
$B0[$J$k%f!<%6(B ID $B$G(B <strong>CGI</strong> $B%W%m%0%i%`$d(B <strong>SSI</strong>
$B%W%m%0%i%`$r<B9T$9$k$3$H$,$G$-$^$9!#(BCGI $B%W%m%0%i%`$^$?$O(B SSI
$B%W%m%0%i%`$r<B9T$9$k>l9g!"DL>o$O(B web $B%5!<%P$HF1$8%f!<%6$G<B9T$5$l$^$9!#(B
機能により、Apache ユーザは Web サーバを実行しているユーザ ID とは
異なるユーザ ID で <strong>CGI</strong> プログラムや <strong>SSI</strong>
プログラムを実行することができます。CGI プログラムまたは SSI
プログラムを実行する場合、通常は web サーバと同じユーザで実行されます。
</p>
<p>$BE,@Z$K;HMQ$9$k$H!"$3$N5!G=$K$h$j%f!<%6$,8DJL$N(B CGI
$B$d(B SSI $B%W%m%0%i%`$r3+H/$7<B9T$9$k$3$H$G@8$8$k%;%-%e%j%F%#>e$N4m81$r!"(B
$B$+$J$j8:$i$9$3$H$,$G$-$^$9!#$7$+$7!"(BsuEXEC $B$N@_Dj$,ITE,@Z$@$H!"(B
$BB?$/$NLdBj$,@8$8!"$"$J$?$N%3%s%T%e!<%?$K?7$7$$%;%-%e%j%F%#%[!<%k$r(B
$B:n$C$F$7$^$&2DG=@-$,$"$j$^$9!#$"$J$?$,(B <em>setuid root</em>
$B$5$l$?%W%m%0%i%`$H!"$=$l$i$+$i@8$8$k%;%-%e%j%F%#>e$NLdBj$N4IM}$K(B
$B>\$7$/$J$$$h$&$J$i!"(BsuEXEC $B$N;HMQ$r8!F$$7$J$$$h$&$K6/$/?d>)$7$^$9!#(B
<p>適切に使用すると、この機能によりユーザが個別の CGI
や SSI プログラムを開発し実行することで生じるセキュリティ上の危険を、
かなり減らすことができます。しかし、suEXEC の設定が不適切だと、
多くの問題が生じ、あなたのコンピュータに新しいセキュリティホールを
作ってしまう可能性があります。あなたが <em>setuid root</em>
されたプログラムと、それらから生じるセキュリティ上の問題の管理に
詳しくないようなら、suEXEC の使用を検討しないように強く推奨します。
</p>
</summary>
<section id="before"><title>$B;O$a$kA0$K(B</title>
<section id="before"><title>始める前に</title>
<p>$B$3$NJ8=q$N@hF,$KHt$VA0$K!"(BApache
$B%0%k!<%W$H$3$NJ8=q$G$N2>Dj$rCN$C$F$*$/$Y$-$G$7$g$&!#(B
<p>この文書の先頭に飛ぶ前に、Apache
グループとこの文書での仮定を知っておくべきでしょう。
</p>
<p>$BBh(B 1 $B$K!"$"$J$?$,(B <strong>setuid</strong> $B$H(B
<strong>setgid</strong> $BA`:n$,2DG=$J(B UNIX
$BM3Mh$N%*%Z%l!<%F%#%s%0%7%9%F%`$r;H$C$F$$$k$3$H$rA[Dj$7$F$$$^$9!#(B
$B$3$l$O!"$9$Y$F$N%3%^%s%INc$K$"$F$O$^$j$^$9!#(B
$B$=$NB>$N%W%i%C%H%[!<%`$G$O!"$b$7(B suEXEC
$B$,%5%]!<%H$5$l$F$$$?$H$7$F$b@_Dj$O0[$J$k$+$b$7$l$^$;$s!#(B</p>
<p>第 1 に、あなたが <strong>setuid</strong>
<strong>setgid</strong> 操作が可能な UNIX
由来のオペレーティングシステムを使っていることを想定しています。
これは、すべてのコマンド例にあてはまります。
その他のプラットホームでは、もし suEXEC
がサポートされていたとしても設定は異なるかもしれません。</p>
<p>$BBh(B 2 $B$K!"$"$J$?$,;HMQCf$N%3%s%T%e!<%?$N(B
$B%;%-%e%j%F%#$K4X$9$k4pK\E*$J35G0$H!"$=$l$i$N4IM}$K$D$$$F>\$7$$$3$H$r(B
$BA[Dj$7$F$$$^$9!#$3$l$O!"(B<strong>setuid/setgid</strong>
$BA`:n!"$"$J$?$N%7%9%F%`>e$G$N$=$NA`:n$K$h$kMM!9$J8z2L!"(B
$B%;%-%e%j%F%#%l%Y%k$K$D$$$F$"$J$?$,M}2r$7$F$$$k$H$$$&$3$H$r4^$_$^$9!#(B
<p>第 2 に、あなたが使用中のコンピュータの
セキュリティに関する基本的な概念と、それらの管理について詳しいことを
想定しています。これは、<strong>setuid/setgid</strong>
操作、あなたのシステム上でのその操作による様々な効果、
セキュリティレベルについてあなたが理解しているということを含みます。
</p>
<p>$BBh(B 3 $B$K!"(B<strong>$B2~B$$5$l$F$$$J$$(B</strong> suEXEC
$B%3!<%I$N;HMQ$rA[Dj$7$F$$$^$9!#(BsuEXEC $B$N%3!<%I$O!"(B
$BB?$/$N%Y!<%?%F%9%?$@$1$G$J$/!"3+H/<T$K$h$C$F$bCm0U?<$/@:::$5$l(B
$B%F%9%H$5$l$F$$$^$9!#$=$l$i$NCm0U$K$h$j!"4J7i$G?.Mj$G$-$k0BA4$J(B
$B%3!<%I$N4pHW$,J]>Z$5$l$^$9!#$3$N%3!<%I$r2~JQ$9$k$3$H$G!"(B
$BM=4|$5$l$J$$LdBj$d?7$7$$%;%-%e%j%F%#>e$N4m81$,@8$8$k$3$H$,$"$j$^$9!#(B
$B%;%-%e%j%F%#%W%m%0%i%_%s%0$N>\:Y$KDL$8$F$$$F!"(B
$B:#8e$N8!F$$N$?$a$K@.2L$r(B Apache
$B%0%k!<%W$H6&M-$7$h$&$H;W$&$N$G$J$1$l$P!"(BsuEXEC
$B%3!<%I$OJQ$($J$$$3$H$r(B <strong>$B6/$/(B</strong>$B?d>)$7$^$9!#(B</p>
<p>第 3 に、<strong>改造されていない</strong> suEXEC
コードの使用を想定しています。suEXEC のコードは、
多くのベータテスタだけでなく、開発者によっても注意深く精査され
テストされています。それらの注意により、簡潔で信頼できる安全な
コードの基盤が保証されます。このコードを改変することで、
予期されない問題や新しいセキュリティ上の危険が生じることがあります。
セキュリティプログラミングの詳細に通じていて、
今後の検討のために成果を Apache
グループと共有しようと思うのでなければ、suEXEC
コードは変えないことを <strong>強く</strong>推奨します。</p>
<p>$BBh(B 4 $B$K!"$3$l$,:G8e$G$9$,!"(BsuEXEC $B$r(B Apache
$B$N%G%U%)%k%H%$%s%9%H!<%k$K$O(B<strong>$B4^$a$J$$(B</strong>$B$3$H$,(B
Apache $B%0%k!<%W$G7hDj$5$l$F$$$^$9!#$3$l$O!"(BsuEXEC
$B$N@_Dj$K$O4IM}<T$N>\:Y$K$o$?$k?5=E$JCm0U$,I,MW$@$+$i$G$9!#(B
suEXEC $B$NMM!9$J@_Dj$K$D$$$F8!F$$,=*$o$l$P!"4IM}<T$O(B suEXEC
$B$rDL>o$N%$%s%9%H!<%kJ}K!$G%$%s%9%H!<%k$9$k$3$H$,$G$-$^$9!#(B
$B$3$l$i$N@_DjCM$O!"(BsuEXEC
$B5!G=$N;HMQCf$K%7%9%F%`%;%-%e%j%F%#$rE,@Z$KJ]$D$?$a$K!"(B
$B4IM}<T$K$h$C$F?5=E$K7hDj$5$l;XDj$5$l$k$3$H$,I,MW$G$9!#(B
$B$3$N>\:Y$J<j=g$K$h$j!"(BApache $B%0%k!<%W$O!"(BsuEXEC
$B$N%$%s%9%H!<%k$K$D$$$F!"Cm0U?<$/==J,$K8!F$$7$F$=$l$r;HMQ$9$k$3$H$r(B
$B7hDj$7$?>l9g$K8B$C$F$$$?$@$-$?$$$H9M$($F$$$^$9!#(B
<p>第 4 に、これが最後ですが、suEXEC を Apache
のデフォルトインストールには<strong>含めない</strong>ことが
Apache グループで決定されています。これは、suEXEC
の設定には管理者の詳細にわたる慎重な注意が必要だからです。
suEXEC の様々な設定について検討が終われば、管理者は suEXEC
を通常のインストール方法でインストールすることができます。
これらの設定値は、suEXEC
機能の使用中にシステムセキュリティを適切に保つために、
管理者によって慎重に決定され指定されることが必要です。
この詳細な手順により、Apache グループは、suEXEC
のインストールについて、注意深く十分に検討してそれを使用することを
決定した場合に限っていただきたいと考えています。
</p>
<p>$B$=$l$G$b?J$_$^$9$+(B? $B$h$m$7$$!#$G$O!"@h$X?J$_$^$7$g$&(B!</p>
<p>それでも進みますか? よろしい。では、先へ進みましょう!</p>
</section>
<section id="model"><title>suEXEC $B%;%-%e%j%F%#%b%G%k(B</title>
<section id="model"><title>suEXEC セキュリティモデル</title>
<p>suEXEC $B$N@_Dj$H%$%s%9%H!<%k$r;O$a$kA0$K!"(B
$B$^$:<BAu$7$h$&$H$7$F$$$k%;%-%e%j%F%#%b%G%k$K$D$$$FO@$8$F$*$-$^$9!#(B
$B$=$l$K$O!"(BsuEXEC $B$NFbIt$G9T$J$o$l$F$$$k$3$H!"(B
$B%7%9%F%`$N%;%-%e%j%F%#$rJ]>Z$9$k$?$a$K7Y9p$5$l$k$3$H$r(B
$B$h$/M}2r$7$F$*$$$?J}$,$h$$$G$7$g$&!#(B</p>
<p>suEXEC の設定とインストールを始める前に、
まず実装しようとしているセキュリティモデルについて論じておきます。
それには、suEXEC の内部で行なわれていること、
システムのセキュリティを保証するために警告されることを
よく理解しておいた方がよいでしょう。</p>
<p><strong>suEXEC</strong> $B$O!"(BApache web
$B%5!<%P$+$i8F$S=P$5$l$k(B setuid $B$5$l$?(B "wrapper"
$B%W%m%0%i%`$,4pK\$H$J$C$F$$$^$9!#@_7W$7$?(B CGI$B!"$^$?$O(B SSI
$B%W%m%0%i%`$X$N(B HTTP $B%j%/%(%9%H$,$"$k$H!"$3$N(B wrapper
$B$,8F$S=P$5$l$^$9!#$3$N$h$&$J%j%/%(%9%H$,$"$k$H!"(BApache
$B$O$=$N%W%m%0%i%`$,<B9T$5$l$k:]$N%W%m%0%i%`L>$H%f!<%6(B ID $B$H%0%k!<%W(B
ID $B$r;XDj$7$F(B suEXEC wrapper $B$r<B9T$7$^$9!#(B
<p><strong>suEXEC</strong> は、Apache web
サーバから呼び出される setuid された "wrapper"
プログラムが基本となっています。設計した CGI、または SSI
プログラムへの HTTP リクエストがあると、この wrapper
が呼び出されます。このようなリクエストがあると、Apache
はそのプログラムが実行される際のプログラム名とユーザ ID とグループ
ID を指定して suEXEC wrapper を実行します。
</p>
<p>$B$=$l$+$i!"(Bwrapper $B$O@.8y$^$?$O<:GT$r7hDj$9$k$?$a(B
$B0J2<$N=hM}$r9T$J$$$^$9!#$3$l$i$N>uBV$N$&$A0l$D$G$b<:GT$7$?>l9g!"(B
$B%W%m%0%i%`$O<:GT$r%m%0$K5-O?$7$F%(%i!<$G=*N;$7$^$9!#(B
$B$=$&$G$J$1$l$P!"8e$N=hM}$,B3$1$i$l$^$9!#(B</p>
<p>それから、wrapper は成功または失敗を決定するため
以下の処理を行ないます。これらの状態のうち一つでも失敗した場合、
プログラムは失敗をログに記録してエラーで終了します。
そうでなければ、後の処理が続けられます。</p>
<ol>
<li>
<strong>wrapper
$B$r<B9T$7$F$$$k%f!<%6$O$3$N%7%9%F%`$N@5Ev$J%f!<%6$+(B?</strong>
を実行しているユーザはこのシステムの正当なユーザか?</strong>
<p class="indent">
$B$3$l$O!"(Bwrapper $B$r<B9T$7$F$$$k%f!<%6$,(B
$BK\Ev$K%7%9%F%`$NMxMQ<T$G$"$k$3$H$rJ]>Z$9$k$?$a$G$9!#(B
これは、wrapper を実行しているユーザが
本当にシステムの利用者であることを保証するためです。
</p>
</li>
<li>
<strong>wrapper $B$,E,@Z$J?t$N0z?t$G8F$S=P$5$l$?$+(B?</strong>
<strong>wrapper が適切な数の引数で呼び出されたか?</strong>
<p class="indent">
wrapper $B$OE,@Z$J?t$N0z?t$,M?$($i$l$?>l9g$K$N$_<B9T$5$l$^$9!#(B
$BE,@Z$J0z?t$N%U%)!<%^%C%H$O(B Apache Web $B%5!<%P$K2r<a$5$l$^$9!#(B
$BE,@Z$J?t$N0z?t$r<u$1<h$i$J$1$l$P!"967b$r$5$l$?$+(B
$B$"$J$?$N(B Apache $B%P%$%J%j$N(B suEXEC $B$NItJ,$,(B
$B$I$3$+$*$+$7$$2DG=@-$,$"$j$^$9!#(B
wrapper は適切な数の引数が与えられた場合にのみ実行されます。
適切な引数のフォーマットは Apache Web サーバに解釈されます。
適切な数の引数を受け取らなければ、攻撃をされたか
あなたの Apache バイナリの suEXEC の部分が
どこかおかしい可能性があります。
</p>
</li>
<li>
<strong>$B$3$N@5Ev$J%f!<%6$O(B wrapper
$B$N<B9T$r5v2D$5$l$F$$$k$+(B?</strong>
<strong>この正当なユーザは wrapper
の実行を許可されているか?</strong>
<p class="indent">
$B$3$N%f!<%6$O(B wrapper $B<B9T$r5v2D$5$l$?%f!<%6$G$9$+(B?
$B$?$@0l?M$N%f!<%6(B (Apache $B%f!<%6(B) $B$@$1$,!"(B
$B$3$N%W%m%0%i%`$N<B9T$r5v2D$5$l$^$9!#(B
このユーザは wrapper 実行を許可されたユーザですか?
ただ一人のユーザ (Apache ユーザ) だけが、
このプログラムの実行を許可されます。
</p>
</li>
<li>
<strong>$BBP>]$N(B CGI, SSI $B%W%m%0%i%`$,0BA4$G$J$$3,AX$N;2>H$r$7$F$$$k$+(B?
<strong>対象の CGI, SSI プログラムが安全でない階層の参照をしているか?
</strong>
<p class="indent">
$BBP>]$N(B CGI, SSI $B%W%m%0%i%`$,(B '/' $B$+$i;O$^$k!"$^$?$O(B
'..' $B$K$h$k;2>H$r9T$J$C$F$$$^$9$+(B? $B$3$l$i$O5v2D$5$l$^$;$s!#(B
$BBP>]$N%W%m%0%i%`$O(B suEXEC $B$N%I%-%e%a%s%H%k!<%H(B
($B2<5-$N(B <code>--with-suexec-docroot=<em>DIR</em></code> $B$r;2>H(B)
$BFb$KB8:_$7$J$1$l$P$J$j$^$;$s!#(B
対象の CGI, SSI プログラムが '/' から始まる、または
'..' による参照を行なっていますか? これらは許可されません。
対象のプログラムは suEXEC のドキュメントルート
(下記の <code>--with-suexec-docroot=<em>DIR</em></code> を参照)
内に存在しなければなりません。
</p>
</li>
<li>
<strong>$BBP>]$H$J$k%f!<%6L>$O@5Ev$J$b$N$+(B?</strong>
<strong>対象となるユーザ名は正当なものか?</strong>
<p class="indent">
$BBP>]$H$J$k%f!<%6L>$OB8:_$7$F$$$^$9$+(B?
対象となるユーザ名は存在していますか?
</p>
</li>
<li>
<strong>$BBP>]$H$J$k%0%k!<%WL>$O@5Ev$J$b$N$+(B?</strong>
<strong>対象となるグループ名は正当なものか?</strong>
<p class="indent">
$BBP>]$H$J$k%0%k!<%WL>$OB8:_$7$F$$$^$9$+(B?
対象となるグループ名は存在していますか?
</p>
</li>
<li>
<strong>$BL\E*$N%f!<%6$O%9!<%Q!<%f!<%6$G$O(B<em>$B$J$$(B</em>$B$+(B?
<strong>目的のユーザはスーパーユーザでは<em>ない</em>か?
</strong>
<p class="indent">
$B:#$N$H$3$m!"(BsuEXEC $B$O(B <code><em>root</em></code> $B$K$h$k(B CGI/SSI
$B%W%m%0%i%`$N<B9T$r5v2D$7$F$$$^$;$s!#(B
今のところ、suEXEC は <code><em>root</em></code> による CGI/SSI
プログラムの実行を許可していません。
</p>
</li>
<li>
<strong>$BBP>]$H$J$k%f!<%6(B ID $B$O!":G>.$N(B ID
$BHV9f$h$j$b(B<em>$BBg$-$$(B</em>$B$+(B? </strong>
<strong>対象となるユーザ ID は、最小の ID
番号よりも<em>大きい</em>か? </strong>
<p class="indent">
$B:G>.%f!<%6(B ID $BHV9f$O@_Dj;~$K;XDj$5$l$^$9!#$3$l$O!"(B
CGI/SSI $B%W%m%0%i%`<B9T$r5v2D$5$l$k%f!<%6(B ID
$B$N$H$j$&$k:G>.CM$G$9!#$3$l$O(B
"system" $BMQ$N%"%+%&%s%H$rJD$a=P$9$N$KM-8z$G$9!#(B
最小ユーザ ID 番号は設定時に指定されます。これは、
CGI/SSI プログラム実行を許可されるユーザ ID
のとりうる最小値です。これは
"system" 用のアカウントを閉め出すのに有効です。
</p>
</li>
<li>
<strong>$BBP>]$H$J$k%0%k!<%W$O%9!<%Q!<%f!<%6$N%0%k!<%W$G$O(B
<em>$B$J$$(B</em>$B$+(B?</strong>
<strong>対象となるグループはスーパーユーザのグループでは
<em>ない</em>か?</strong>
<p class="indent">
$B:#$N$H$3$m!"(BsuEXEC $B$O(B 'root' $B%0%k!<%W$K$h$k(B CGI/SSI
$B%W%m%0%i%`$N<B9T$r5v2D$7$F$$$^$;$s!#(B
今のところ、suEXEC は 'root' グループによる CGI/SSI
プログラムの実行を許可していません。
</p>
</li>
<li>
<strong>$BBP>]$H$J$k%0%k!<%W(B ID $B$O:G>.$N(B ID
$BHV9f$h$j$b(B<em>$BBg$-$$(B</em>$B$+(B?</strong>
<strong>対象となるグループ ID は最小の ID
番号よりも<em>大きい</em>か?</strong>
<p class="indent">
$B:G>.%0%k!<%W(B ID $BHV9f$O@_Dj;~$K;XDj$5$l$^$9!#$3$l$O!"(B
CGI/SSI $B%W%m%0%i%`<B9T$r5v2D$5$l$k%0%k!<%W(B
ID $B$N$H$j$&$k:G>.CM$G$9!#(B
$B$3$l$O(B "system" $BMQ$N%0%k!<%W$rJD$a=P$9$N$KM-8z$G$9!#(B
最小グループ ID 番号は設定時に指定されます。これは、
CGI/SSI プログラム実行を許可されるグループ
ID のとりうる最小値です。
これは "system" 用のグループを閉め出すのに有効です。
</p>
</li>
<li>
<strong>wrapper $B$,@5>o$KBP>]$H$J$k%f!<%6$H%0%k!<%W$K$J$l$k$+(B?
<strong>wrapper が正常に対象となるユーザとグループになれるか?
</strong>
<p class="indent">
$B$3$3$G!"(Bsetuid $B$H(B setgid
$B$N5/F0$K$h$j%W%m%0%i%`$OBP>]$H$J$k%f!<%6$H%0%k!<%W$K$J$j$^$9!#(B
$B%0%k!<%W%"%/%;%9%j%9%H$O!"(B
$B%f!<%6$,B0$7$F$$$k$9$Y$F$N%0%k!<%W$G=i4|2=$5$l$^$9!#(B
ここで、setuid と setgid
の起動によりプログラムは対象となるユーザとグループになります。
グループアクセスリストは、
ユーザが属しているすべてのグループで初期化されます。
</p>
</li>
<li>
<strong>CGI/SSI $B%W%m%0%i%`$,CV$+$l$F$$$k%G%#%l%/%H%j$K0\F0(B
(change directory) $B$G$-$k$+(B?</strong>
<strong>CGI/SSI プログラムが置かれているディレクトリに移動
(change directory) できるか?</strong>
<p class="indent">
$B%G%#%l%/%H%j$,B8:_$7$J$$$J$i!"$=$N%U%!%$%k$bB8:_$7$J$$$+$b$7$l$^$;$s!#(B
$B%G%#%l%/%H%j$K0\F0$G$-$J$$$N$G$"$l$P!"$*$=$i$/B8:_$b$7$J$$$G$7$g$&!#(B
ディレクトリが存在しないなら、そのファイルも存在しないかもしれません。
ディレクトリに移動できないのであれば、おそらく存在もしないでしょう。
</p>
</li>
<li>
<strong>$B%G%#%l%/%H%j$,(B Apache $B$N%I%-%e%a%s%H%D%j!<Fb$K$"$k$+(B?
<strong>ディレクトリが Apache のドキュメントツリー内にあるか?
</strong>
<p class="indent">
$B%j%/%(%9%H$,%5!<%PFb$N$b$N$G$"$l$P!"(B
$BMW5a$5$l$?%G%#%l%/%H%j$,(B suEXEC $B$N%I%-%e%a%s%H%k!<%HG[2<$K$"$j$^$9$+(B?
$B%j%/%(%9%H$,(B UserDir $B$N$b$N$G$"$l$P!"MW5a$5$l$?%G%#%l%/%H%j$,(B suEXEC
$B$N%f!<%6$N%I%-%e%a%s%H%k!<%HG[2<$K$"$j$^$9$+(B?
(<a href="#install">suEXEC $B@_Dj%*%W%7%g%s(B</a> $B;2>H(B)
リクエストがサーバ内のものであれば、
要求されたディレクトリが suEXEC のドキュメントルート配下にありますか?
リクエストが UserDir のものであれば、要求されたディレクトリが suEXEC
のユーザのドキュメントルート配下にありますか?
(<a href="#install">suEXEC 設定オプション</a> 参照)
</p>
</li>
<li>
<strong>$B%G%#%l%/%H%j$rB>$N%f!<%6$,=q$-9~$a$k$h$&$K$J$C$F(B
<em>$B$$$J$$(B</em>$B$+(B?</strong>
<strong>ディレクトリを他のユーザが書き込めるようになって
<em>いない</em>か?</strong>
<p class="indent">
$B%G%#%l%/%H%j$rB>%f!<%6$K3+J|$7$J$$$h$&$K$7$^$9!#(B
$B=jM-%f!<%6$@$1$,$3$N%G%#%l%/%H%j$NFbMF$r2~JQ$G$-$k$h$&$K$7$^$9!#(B
ディレクトリを他ユーザに開放しないようにします。
所有ユーザだけがこのディレクトリの内容を改変できるようにします。
</p>
</li>
<li>
<strong>$BBP>]$H$J$k(B CGI/SSI $B%W%m%0%i%`$OB8:_$9$k$+(B?</strong>
<strong>対象となる CGI/SSI プログラムは存在するか?</strong>
<p class="indent">
$BB8:_$7$J$1$l$P<B9T$G$-$^$;$s!#(B
存在しなければ実行できません。
</p>
</li>
<li>
<strong>$BBP>]$H$J$k(B CGI/SSI $B%W%m%0%i%`%U%!%$%k$,B>%"%+%&%s%H$+$i(B
$B=q$-9~$a$k$h$&$K$J$C$F(B<em>$B$$$J$$(B</em>$B$+(B?</strong>
<strong>対象となる CGI/SSI プログラムファイルが他アカウントから
書き込めるようになって<em>いない</em>か?</strong>
<p class="indent">
$B=jM-<T0J30$K$O(B CGI/SSI $B%W%m%0%i%`$rJQ99$9$k8"8B$OM?$($i$l$^$;$s!#(B
所有者以外には CGI/SSI プログラムを変更する権限は与えられません。
</p>
</li>
<li>
<strong>$BBP>]$H$J$k(B CGI/SSI $B%W%m%0%i%`$,(B setuid $B$^$?$O(B setgid
$B$5$l$F(B<em>$B$$$J$$(B</em>$B$+(B?</strong>
<strong>対象となる CGI/SSI プログラムが setuid または setgid
されて<em>いない</em>か?</strong>
<p class="indent">
UID/GID $B$r:FEYJQ99$7$F$N%W%m%0%i%`<B9T$O$7$^$;$s(B
UID/GID を再度変更してのプログラム実行はしません
</p>
</li>
<li>
<strong>$BBP>]$H$J$k%f!<%6(B/$B%0%k!<%W$,%W%m%0%i%`$N(B
$B%f!<%6(B/$B%0%k!<%W$HF1$8$+(B?</strong>
<strong>対象となるユーザ/グループがプログラムの
ユーザ/グループと同じか?</strong>
<p class="indent">
$B%f!<%6$,$=$N%U%!%$%k$N=jM-<T$G$9$+(B?
ユーザがそのファイルの所有者ですか?
</p>
</li>
<li>
<strong>$B0BA4$JF0:n$rJ]>Z$9$k$?$a$N4D6-JQ?t%/%j%"$,2DG=$+(B?
<strong>安全な動作を保証するための環境変数クリアが可能か?
</strong>
<p class="indent">
suEXEC $B$O!"0BA4$J4D6-JQ?t$N%j%9%H(B
($B$3$l$i$O@_Dj;~$K:n@.$5$l$^$9(B) $BFb$NJQ?t$H$7$FEO$5$l$k0BA4$J(B
PATH $BJQ?t(B ($B@_Dj;~$K;XDj$5$l$^$9(B) $B$r@_Dj$9$k$3$H$G!"(B
$B%W%m%;%9$N4D6-JQ?t$r%/%j%"$7$^$9!#(B
suEXEC は、安全な環境変数のリスト
(これらは設定時に作成されます) 内の変数として渡される安全な
PATH 変数 (設定時に指定されます) を設定することで、
プロセスの環境変数をクリアします。
</p>
</li>
<li>
<strong>$BBP>]$H$J$k(B CGI/SSI $B%W%m%0%i%`$r(B exec $B$7$F<B9T$G$-$k$+(B?</strong>
<strong>対象となる CGI/SSI プログラムを exec して実行できるか?</strong>
<p class="indent">
$B$3$3$G(B suEXEC $B$,=*N;$7!"BP>]$H$J$k%W%m%0%i%`$,3+;O$5$l$^$9!#(B
ここで suEXEC が終了し、対象となるプログラムが開始されます。
</p>
</li>
</ol>
<p>$B$3$3$^$G$,(B suEXEC $B$N(B wrapper
$B$K$*$1$k%;%-%e%j%F%#%b%G%k$NI8=`E*$JF0:n$G$9!#$b$&>/$787=E$K(B
CGI/SSI $B@_7W$K$D$$$F$N?7$7$$@)8B$d5,Dj$r<h$jF~$l$k$3$H$b$G$-$^$9$,!"(B
suEXEC $B$O%;%-%e%j%F%#$KCm0U$7$F?5=E$K>/$7$:$D3+H/$5$l$F$-$^$7$?!#(B
<p>ここまでが suEXEC の wrapper
におけるセキュリティモデルの標準的な動作です。もう少し厳重に
CGI/SSI 設計についての新しい制限や規定を取り入れることもできますが、
suEXEC はセキュリティに注意して慎重に少しずつ開発されてきました。
</p>
<p>$B$3$N%;%-%e%j%F%#%b%G%k$rMQ$$$F(B
$B%5!<%P@_Dj;~$K$I$N$h$&$K5v$9$3$H$r@)8B$9$k$+!"$^$?!"(BsuEXEC
$B$rE,@Z$K@_Dj$9$k$H$I$N$h$&$J%;%-%e%j%F%#>e$N4m81$rHr$1$i$l$k$+$K(B
$B4X$9$k$h$j>\$7$$>pJs$K$D$$$F$O!"(B<a href="#jabberwock">"$B$H$+$2$KCm0U(B"
(Beware the Jabberwock)</a> $B$N>O$r;2>H$7$F$/$@$5$$!#(B
<p>このセキュリティモデルを用いて
サーバ設定時にどのように許すことを制限するか、また、suEXEC
を適切に設定するとどのようなセキュリティ上の危険を避けられるかに
関するより詳しい情報については、<a href="#jabberwock">"とかげに注意"
(Beware the Jabberwock)</a> の章を参照してください。
</p>
</section>
<section id="install"><title>suEXEC
$B$N@_Dj$H%$%s%9%H!<%k(B</title>
の設定とインストール</title>
<p>$B$3$3$+$i3Z$7$/$J$j$^$9!#(B</p>
<p>ここから楽しくなります。</p>
<p><strong>suEXEC
$B@_Dj%*%W%7%g%s(B</strong><br />
設定オプション</strong><br />
</p>
<dl>
<dt><code>--enable-suexec</code></dt>
<dd>$B$3$N%*%W%7%g%s$O!"%G%U%)%k%H$G$O%$%s%9%H!<%k$5$l$:!"(B
$BM-8z$K$O$J$i$J$$(B suEXEC $B5!G=$rM-8z$K$7$^$9!#(B
suEXEC $B$r;H$&$h$&$K(B APACI $B$KMW5a$9$k$K$O!"(B<code>--enable-suexec</code>
$B%*%W%7%g%s$K$"$o$;$F>/$J$/$H$b0l$D$O(B <code>--with-suexec-xxxxx</code>
$B%*%W%7%g%s$,;XDj$5$l$J$1$l$P$J$j$^$;$s!#(B</dd>
<dd>このオプションは、デフォルトではインストールされず、
有効にはならない suEXEC 機能を有効にします。
suEXEC を使うように APACI に要求するには、<code>--enable-suexec</code>
オプションにあわせて少なくとも一つは <code>--with-suexec-xxxxx</code>
オプションが指定されなければなりません。</dd>
<dt><code>--with-suexec-bin=<em>PATH</em></code></dt>
<dd>$B%;%-%e%j%F%#>e$NM}M3$K$h$j!"(B<code>suexec</code> $B%P%$%J%j$N%Q%9$O%5!<%P$K(B
$B%O!<%I%3!<%I$5$l$F$$$kI,MW$,$"$j$^$9!#%G%U%)%k%H$N%Q%9$r(B
$BJQ$($?$$$H$-$O$3$N%*%W%7%g%s$r;H$C$F$/$@$5$$!#(B<em>$BNc$($P(B</em>$B!"(B
<code>--with-suexec-bin=/usr/sbin/suexec</code> $B$N$h$&$K!#(B</dd>
<dd>セキュリティ上の理由により、<code>suexec</code> バイナリのパスはサーバに
ハードコードされている必要があります。デフォルトのパスを
変えたいときはこのオプションを使ってください。<em>例えば</em>、
<code>--with-suexec-bin=/usr/sbin/suexec</code> のように。</dd>
<dt><code>--with-suexec-caller=<em>UID</em></code></dt>
<dd>Apache $B$rDL>oF0:n$5$;$k(B<a
href="mod/mpm_common.html#user">$B%f!<%6L>(B</a>$B$r;XDj$7$^$9!#(B
$B$3$N%f!<%6$@$1$,(B suexec $B$N<B9T$r5v2D$5$l$?%f!<%6$K$J$j$^$9!#(B</dd>
<dd>Apache を通常動作させる<a
href="mod/mpm_common.html#user">ユーザ名</a>を指定します。
このユーザだけが suexec の実行を許可されたユーザになります。</dd>
<dt><code>--with-suexec-userdir=<em>DIR</em></code></dt>
<dd>suEXEC $B$,%"%/%;%9$r5v$5$l$k%f!<%6%[!<%`%G%#%l%/%H%jG[2<$N(B
$B%5%V%G%#%l%/%H%j$r;XDj$7$^$9!#(B
$B$3$N%G%#%l%/%H%j0J2<$NA4<B9T%U%!%$%k$O!"(B"$B0BA4$J(B"$B%W%m%0%i%`$K$J$k$h$&!"(B
suEXEC $B$,$=$N%f!<%6$H$7$F<B9T$G$-$k$h$&$K$7$^$9!#(B
"$BC1=c$J(B" UserDir $B%G%#%l%/%F%#%V$r;H$C$F$$$k>l9g(B
($B$9$J$o$A(B "*" $B$r4^$^$J$$$b$N(B)$B!"$3$l$HF1$8CM$r@_Dj$9$Y$-$G$9!#(B
Userdir $B%G%#%l%/%F%#%V$,$=$N%f!<%6$N%Q%9%o!<%I%U%!%$%kFb$N(B
$B%[!<%`%G%#%l%/%H%j$HF1$8>l=j$r;X$7$F$$$J$1$l$P!"(B
suEXEC $B$OE,@Z$KF0:n$7$^$;$s!#%G%U%)%k%H$O(B "public_html" $B$G$9!#(B
<dd>suEXEC がアクセスを許されるユーザホームディレクトリ配下の
サブディレクトリを指定します。
このディレクトリ以下の全実行ファイルは、"安全な"プログラムになるよう、
suEXEC がそのユーザとして実行できるようにします。
"単純な" UserDir ディレクティブを使っている場合
(すなわち "*" を含まないもの)、これと同じ値を設定すべきです。
Userdir ディレクティブがそのユーザのパスワードファイル内の
ホームディレクトリと同じ場所を指していなければ、
suEXEC は適切に動作しません。デフォルトは "public_html" です。
<br />
$B3F(B UserDir $B$,0[$J$C$?2>A[%[%9%H$r@_Dj$7$F$$$k>l9g!"(B
$B$=$l$i$rA4$F0l$D$N?F%G%#%l%/%H%j$K4^$a$F!"(B
$B$=$N?F%G%#%l%/%H%j$NL>A0$r$3$3$G;XDj$9$kI,MW$,$"$j$^$9!#(B
<strong>$B$3$N$h$&$K;XDj$5$l$J$1$l$P(B "~userdir" cgi
$B$X$N%j%/%(%9%H$,F0:n$7$^$;$s!#(B</strong></dd>
UserDir が異なった仮想ホストを設定している場合、
それらを全て一つの親ディレクトリに含めて、
その親ディレクトリの名前をここで指定する必要があります。
<strong>このように指定されなければ "~userdir" cgi
へのリクエストが動作しません。</strong></dd>
<dt><code>--with-suexec-docroot=<em>DIR</em></code></dt>
<dd>Apache $B$N%I%-%e%a%s%H%k!<%H$r@_Dj$7$^$9!#$3$l$,(B suEXEC
$B$NF0:n$G;HMQ$9$kM#0l$N%G%#%l%/%H%j3,AX$K$J$j$^$9(B (UserDir
$B$N;XDj$OJL(B)$B!#%G%U%)%k%H$G$O(B <code>--datedir</code> $B$K(B "/htdocs"
$B$H$$$&%5%U%#%C%/%9$r$D$1$?$b$N$G$9!#(B
"<code>--datadir=/home/apache</code>" $B$H$7$F@_Dj$9$k$H!"(B
suEXEC wrapper $B$K$H$C$F(B "/home/apache/htdocs"
$B$,%I%-%e%a%s%H%k!<%H$H$7$F;H$o$l$^$9!#(B</dd>
<dd>Apache のドキュメントルートを設定します。これが suEXEC
の動作で使用する唯一のディレクトリ階層になります (UserDir
の指定は別)。デフォルトでは <code>--datedir</code> "/htdocs"
というサフィックスをつけたものです。
"<code>--datadir=/home/apache</code>" として設定すると、
suEXEC wrapper にとって "/home/apache/htdocs"
がドキュメントルートとして使われます。</dd>
<dt><code>--with-suexec-uidmin=<em>UID</em></code></dt>
<dd>suEXEC $B$NBP>]%f!<%6$H$7$F5v$5$l$k(B UID $B$N:G>.CM$r;XDj$7$^$9!#(B
$BBgDq$N%7%9%F%`$G$O(B 500 $B$+(B 100 $B$,0lHLE*$G$9!#(B
$B%G%U%)%k%HCM$O(B 100 $B$G$9!#(B</dd>
<dd>suEXEC の対象ユーザとして許される UID の最小値を指定します。
大抵のシステムでは 500 か 100 が一般的です。
デフォルト値は 100 です。</dd>
<dt><code>--with-suexec-gidmin=<em>GID</em></code></dt>
<dd>suEXEC $B$NBP>]%0%k!<%W$H$7$F5v$5$l$k(B GID
$B$N:G>.CM$r;XDj$7$^$9!#BgDq$N%7%9%F%`$G$O(B 100 $B$,0lHLE*$J$N$G!"(B
$B%G%U%)%k%HCM$H$7$F$b(B 100 $B$,;H$o$l$F$$$^$9!#(B</dd>
<dd>suEXEC の対象グループとして許される GID
の最小値を指定します。大抵のシステムでは 100 が一般的なので、
デフォルト値としても 100 が使われています。</dd>
<dt><code>--with-suexec-logfile=<em>FILE</em></code></dt>
<dd>suEXEC $B$N=hM}$H%(%i!<$,5-O?$5$l$k%U%!%$%kL>$r;XDj$7$^$9!#(B
($B4F::$d%G%P%C%0L\E*$KM-MQ(B)
$B%G%U%)%k%H$G$O%m%0%U%!%$%k$O(B "suexec_log" $B$H$$$&L>A0$G!"(B
$BI8=`$N%m%0%U%!%$%k%G%#%l%/%H%j(B (<code>--logfiledir</code>) $B$KCV$+$l$^$9!#(B
<dd>suEXEC の処理とエラーが記録されるファイル名を指定します。
(監査やデバッグ目的に有用)
デフォルトではログファイルは "suexec_log" という名前で、
標準のログファイルディレクトリ (<code>--logfiledir</code>) に置かれます。
</dd>
<dt><code>--with-suexec-safepath=<em>PATH</em></code></dt>
<dd>CGI $B<B9T%U%!%$%k$KEO$5$l$k0BA4$J(B PATH $B4D6-JQ?t$G$9!#(B
$B%G%U%)%k%HCM$O(B "/usr/local/bin:/usr/bin:/bin" $B$G$9!#(B
<dd>CGI 実行ファイルに渡される安全な PATH 環境変数です。
デフォルト値は "/usr/local/bin:/usr/bin:/bin" です。
</dd>
</dl>
<p><strong>suEXEC wrapper
$B$N%3%s%Q%$%k$H%$%s%9%H!<%k(B</strong><br />
<code>--enable-suexec</code> $B%*%W%7%g%s$G(B suEXEC $B5!G=$rM-8z$K$9$k$H!"(B
"make" $B%3%^%s%I$r<B9T$7$?;~$K(B <code>suexec</code> $B$N%P%$%J%j(B (Apache $B<+BN$b(B)
$B$,<+F0E*$K:n@.$5$l$^$9!#(B
のコンパイルとインストール</strong><br />
<code>--enable-suexec</code> オプションで suEXEC 機能を有効にすると、
"make" コマンドを実行した時に <code>suexec</code> のバイナリ (Apache 自体も)
が自動的に作成されます。
<br />
$B$9$Y$F$N9=@.MWAG$,:n@.$5$l$k$H!"$=$l$i$N%$%s%9%H!<%k$K$O(B
<code>make install</code> $B%3%^%s%I$,<B9T$G$-$^$9!#%P%$%J%j%$%a!<%8$N(B <code>suexec</code>
$B$O(B <code>--sbindir</code> $B%*%W%7%g%s$G;XDj$5$l$?%G%#%l%/%H%j$K%$%s%9%H!<%k$5$l$^$9!#(B
$B%G%U%)%k%H$N>l=j$O(B "/usr/local/apache/sbin/suexec" $B$G$9!#(B<br />
$B%$%s%9%H!<%k;~$K$O(B <strong><em>root</em></strong>
$B8"8B$,I,MW$J$N$GCm0U$7$F$/$@$5$$!#(Bwrapper $B$,%f!<%6(B ID
$B$r@_Dj$9$k$?$a$K!"=jM-<T(B <code><em>root</em></code>
$B$G$N%;%C%H%f!<%6(B ID
$B%S%C%H$r$=$N%U%!%$%k$N%b!<%I$K@_Dj$7$J$1$l$P$J$j$^$;$s!#(B
すべての構成要素が作成されると、それらのインストールには
<code>make install</code> コマンドが実行できます。バイナリイメージの <code>suexec</code>
<code>--sbindir</code> オプションで指定されたディレクトリにインストールされます。
デフォルトの場所は "/usr/local/apache/sbin/suexec" です。<br />
インストール時には <strong><em>root</em></strong>
権限が必要なので注意してください。wrapper がユーザ ID
を設定するために、所有者 <code><em>root</em></code>
でのセットユーザ ID
ビットをそのファイルのモードに設定しなければなりません。
</p>
<p><strong>$B0BA4$J%Q!<%_%C%7%g%s$r@_Dj$9$k(B</strong><br />
suEXEC $B%i%C%Q!<$O!"(B<code>--with-suexec-caller</code> <program>configure</program>
$B%*%W%7%g%s$G;XDj$7$?@5$7$$%f!<%6$G5/F0$5$l$F$$$k$3$H$r3NG'$7$^$9$,!"(B
$B%7%9%F%`>e$G$3$N%A%'%C%/$,9T$J$o$l$kA0$K!"(B
suEXEC $B$,8F$V%7%9%F%`$d%i%$%V%i%j$,@H<e$G$"$k2DG=@-$O;D$j$^$9!#BP93:v$H$7$F!"(B
$B0lHL$KNI$$=,47$H$b$5$l$$$^$9$,!"(B
$B%U%!%$%k%7%9%F%`%Q!<%_%C%7%g%s$r;H$C$F(B
Apache $B$N<B9T;~$N%0%k!<%W$N$_$,(B suEXEC $B$r<B9T$G$-$k$h$&$K(B
$B$9$k$N$,NI$$$G$7$g$&!#(B</p>
<p><strong>安全なパーミッションを設定する</strong><br />
suEXEC ラッパーは、<code>--with-suexec-caller</code> <program>configure</program>
オプションで指定した正しいユーザで起動されていることを確認しますが、
システム上でこのチェックが行なわれる前に、
suEXEC が呼ぶシステムやライブラリが脆弱である可能性は残ります。対抗策として、
一般に良い習慣ともされいますが、
ファイルシステムパーミッションを使って
Apache の実行時のグループのみが suEXEC を実行できるように
するのが良いでしょう。</p>
<p>$B$?$H$($P!"<!$N$h$&$K%5!<%P$,@_Dj$5$l$F$$$?$H$7$^$9!#(B</p>
<p>たとえば、次のようにサーバが設定されていたとします。</p>
<example>
User www<br />
Group webgroup<br />
</example>
<p><program>suexec</program> $B$,(B "/usr/local/apache2/sbin/suexec"
$B$K%$%s%9%H!<%k$5$l$F$$$?>l9g!"<!$N$h$&$K@_Dj$9$kI,MW$,$"$j$^$9!#(B</p>
<p><program>suexec</program> "/usr/local/apache2/sbin/suexec"
にインストールされていた場合、次のように設定する必要があります。</p>
<example>
chgrp webgroup /usr/local/apache2/bin/suexec<br />
chmod 4750 /usr/local/apache2/bin/suexec<br />
</example>
<p>$B$3$l$G(B Apache $B$,<B9T$5$l$k%0%k!<%W$N$_$,(B
suEXEC $B%i%C%Q!<$r<B9T$G$-$k$H$$$&$3$H$r(B
$B3N>Z$7$^$9!#(B</p>
<p>これで Apache が実行されるグループのみが
suEXEC ラッパーを実行できるということを
確証します。</p>
</section>
<section id="enable"><title>suEXEC
$B$NM-8z2=$HL58z2=(B</title>
の有効化と無効化</title>
<p>$B5/F0;~$K!"(BApache $B$O(B <code>--sbindir</code>
$B%*%W%7%g%s$G@_Dj$5$l$?%G%#%l%/%H%j$G(B
<code>suexec</code> $B$rC5$7$^$9(B
($B%G%U%)%k%H$O(B "/usr/local/apache/sbin/suexec") $B!#(B
$BE,@Z$K@_Dj$5$l$?(B suEXEC $B$,$_$D$+$k$H!"(B
$B%(%i!<%m%0$K0J2<$N%a%C%;!<%8$,=PNO$5$l$^$9!#(B</p>
<p>起動時に、Apache は <code>--sbindir</code>
オプションで設定されたディレクトリで
<code>suexec</code> を探します
(デフォルトは "/usr/local/apache/sbin/suexec")
適切に設定された suEXEC がみつかると、
エラーログに以下のメッセージが出力されます。</p>
<example>
[notice] suEXEC mechanism enabled (wrapper: <var>/path/to/suexec</var>)
</example>
<p>$B%5!<%P5/F0;~$K$3$N%a%C%;!<%8$,=P$J$$>l9g!"(B
$BBgDq$O%5!<%P$,A[Dj$7$?>l=j$G(B wrapper $B%W%m%0%i%`$,8+$D$+$i$J$+$C$?$+!"(B
<em>setuid root</em> $B$H$7$F%$%s%9%H!<%k$5$l$F$$$J$$$+$G$9!#(B</p>
<p>サーバ起動時にこのメッセージが出ない場合、
大抵はサーバが想定した場所で wrapper プログラムが見つからなかったか、
<em>setuid root</em> としてインストールされていないかです。</p>
<p>suEXEC $B$N;EAH$_$r;HMQ$9$k$N$,=i$a$F$G!"(BApache $B$,4{$KF0:nCf$G$"$l$P!"(B
Apache $B$r(B kill $B$7$F!":F5/F0$7$J$1$l$P$J$j$^$;$s!#(BHUP $B%7%0%J%k$d(B
USR1 $B%7%0%J%k$K$h$kC1=c$J:F5/F0$G$OIT==J,$G$9!#(B</p>
<p>suEXEC $B$rL58z$K$9$k>l9g$O!"(B<code>suexec</code> $B%U%!%$%k$r:o=|$7$F$+$i(B
Apache $B$r(B kill $B$7$F:F5/F0$7$^$9!#(B
<p>suEXEC の仕組みを使用するのが初めてで、Apache が既に動作中であれば、
Apache を kill して、再起動しなければなりません。HUP シグナルや
USR1 シグナルによる単純な再起動では不十分です。</p>
<p>suEXEC を無効にする場合は、<code>suexec</code> ファイルを削除してから
Apache を kill して再起動します。
</p>
</section>
<section id="usage"><title>suEXEC $B$N;HMQ(B</title>
<section id="usage"><title>suEXEC の使用</title>
<p>CGI $B%W%m%0%i%`$X$N%j%/%(%9%H$,(B suEXEC $B%i%C%Q!<$r8F$V$N$O!"(B
<directive module="mod_suexec">SuexecUserGroup</directive> $B%G%#%l%/%F%#%V$r(B
$B4^$`%P!<%A%c%k%[%9%H$X$N%j%/%(%9%H$+!"(B<module>mod_userdir</module> $B$K$h$j(B
$B=hM}$5$l$?%j%/%(%9%H$N>l9g$K8B$j$^$9!#(B</p>
<p>CGI プログラムへのリクエストが suEXEC ラッパーを呼ぶのは、
<directive module="mod_suexec">SuexecUserGroup</directive> ディレクティブを
含むバーチャルホストへのリクエストか、<module>mod_userdir</module> により
処理されたリクエストの場合に限ります。</p>
<p><strong>$B2>A[%[%9%H(B:</strong><br />
suEXEC wrapper $B$N;H$$J}$H$7$F!"(B
<directive module="core">VirtualHost</directive> $B@_Dj$G$N(B
<p><strong>仮想ホスト:</strong><br />
suEXEC wrapper の使い方として、
<directive module="core">VirtualHost</directive> 設定での
<directive module="mod_suexec">SuexecUserGroup</directive>
$B%G%#%l%/%F%#%V$rDL$7$?$b$N$,$"$j$^$9!#(B
$B$3$N%G%#%l%/%F%#%V$r%a%$%s%5!<%P$N%f!<%6(B ID
$B$H0[$J$k$b$N$K$9$k$H!"(BCGI $B%j%=!<%9$X$N$9$Y$F$N%j%/%(%9%H$O!"$=$N(B
ディレクティブを通したものがあります。
このディレクティブをメインサーバのユーザ ID
と異なるものにすると、CGI リソースへのすべてのリクエストは、その
<directive module="core"
type="section">VirtualHost</directive> $B$G;XDj$5$l$?(B <em>User</em> $B$H(B
<em>Group</em> $B$H$7$F<B9T$5$l$^$9!#(B<directive module="core"
type="section">VirtualHost</directive> で指定された <em>User</em>
<em>Group</em> として実行されます。<directive module="core"
type="section">VirtualHost</directive>
$B$G$3$N%G%#%l%/%F%#%V$,;XDj$5$l$F$$$J$$>l9g!"(B
$B%a%$%s%5!<%P$N%f!<%6(B ID $B$,A[Dj$5$l$^$9!#(B</p>
でこのディレクティブが指定されていない場合、
メインサーバのユーザ ID が想定されます。</p>
<p><strong>$B%f!<%6%G%#%l%/%H%j(B:</strong><br />
<module>mod_userdir</module> $B$K$h$j=hM}$5$l$?%j%/%(%9%H$O(B
$B%j%/%(%9%H$5$l$?%f!<%6%G%#%l%/%H%j$N%f!<%6(B ID $B$G(B CGI $B%W%m%0%i%`$r(B
$B<B9T$9$k$?$a$K(B suEXEC $B%i%C%Q!<$r8F$S$^$9!#(B
$B$3$N5!G=$rF0:n$5$;$k$?$a$KI,MW$J$3$H$O!"(BCGI
$B$r$=$N%f!<%6$G<B9T$G$-$k$3$H!"$=$N%9%/%j%W%H$,>e5-$N(B<a
href="#model">$B%;%-%e%j%F%#8!::(B</a>$B$r%Q%9$G$-$k$3$H$G$9!#(B
<a href="#install">$B%3%s%Q%$%k(B
$B;~$N%*%W%7%g%s(B</a> <code>--with-suexec-userdir</code> $B$b;2>H$7$F$/$@$5$$!#(B</p>
<p><strong>ユーザディレクトリ:</strong><br />
<module>mod_userdir</module> により処理されたリクエストは
リクエストされたユーザディレクトリのユーザ ID で CGI プログラムを
実行するために suEXEC ラッパーを呼びます。
この機能を動作させるために必要なことは、CGI
をそのユーザで実行できること、そのスクリプトが上記の<a
href="#model">セキュリティ検査</a>をパスできることです。
<a href="#install">コンパイル
時のオプション</a> <code>--with-suexec-userdir</code> も参照してください。</p>
</section>
<section id="debug"><title>suEXEC $B$N%G%P%C%0(B</title>
<section id="debug"><title>suEXEC のデバッグ</title>
<p>suEXEC wrapper $B$O!">e5-$G=R$Y$?(B <code>--with-suexec-logfile</code>
$B%*%W%7%g%s$G;XDj$5$l$?%U%!%$%k$K%m%0>pJs$r5-O?$7$^$9!#(B
wrapper $B$rE,@Z$K@_Dj!"%$%s%9%H!<%k$G$-$F$$$k$H;W$&>l9g!"(B
$B$I$3$GLB$C$F$$$k$+8+$h$&$H$9$k$J$i$3$N%m%0$H%5!<%P$N(B
$B%(%i!<%m%0$r8+$k$H$h$$$G$7$g$&!#(B</p>
<p>suEXEC wrapper は、上記で述べた <code>--with-suexec-logfile</code>
オプションで指定されたファイルにログ情報を記録します。
wrapper を適切に設定、インストールできていると思う場合、
どこで迷っているか見ようとするならこのログとサーバの
エラーログを見るとよいでしょう。</p>
</section>
<section id="jabberwock"><title>$B$H$+$2$KCm0U(B: $B7Y9p$H;vNc(B</title>
<section id="jabberwock"><title>とかげに注意: 警告と事例</title>
<p><strong>$BCm0U(B!</strong>
$B$3$N>O$O40A4$G$O$"$j$^$;$s!#$3$N>O$N:G?72~D{HG$K$D$$$F$O!"(B
Apache $B%0%k!<%W$N(B<a href="http://httpd.apache.org/docs/&httpd.docs;/suexec.html">
$B%*%s%i%$%s%I%-%e%a%s%H(B</a>$BHG$r;2>H$7$F$/$@$5$$!#(B
<p><strong>注意!</strong>
この章は完全ではありません。この章の最新改訂版については、
Apache グループの<a href="http://httpd.apache.org/docs/&httpd.docs;/suexec.html">
オンラインドキュメント</a>版を参照してください。
</p>
<p>$B%5!<%P$N@_Dj$K@)8B$r$b$&$1$k(B wrapper $B$K$D$$$F!"(B
$B$$$/$D$+6=L#?<$$E@$,$"$j$^$9!#(BsuEXEC $B$K4X$9$k(B "$B%P%0(B"
$B$rJs9p$9$kA0$K$3$l$i$r3NG'$7$F$/$@$5$$!#(B</p>
<p>サーバの設定に制限をもうける wrapper について、
いくつか興味深い点があります。suEXEC に関する "バグ"
を報告する前にこれらを確認してください。</p>
<ul>
<li><strong>suEXEC $B$N6=L#?<$$E@(B</strong></li>
<li><strong>suEXEC の興味深い点</strong></li>
<li>$B3,AX9=B$$N@)8B(B
<li>階層構造の制限
<p class="indent">
$B%;%-%e%j%F%#$H8zN($NM}M3$+$i!"(B<code>suEXEC</code> $B$NA4$F$N%j%/%(%9%H$O(B
$B2>A[%[%9%H$X$N%j%/%(%9%H$K$*$1$k:G>e0L$N%I%-%e%a%s%H%k!<%HFb$+!"(B
$B%f!<%6%G%#%l%/%H%j$X$N%j%/%(%9%H$K$*$1$k8D!9$N%f!<%6$N:G>e0L$N(B
$B%I%-%e%a%s%H%k!<%HFb$K;D$i$J$1$l$P$J$j$^$;$s!#(B
$BNc$($P!";M$D$N2>A[%[%9%H$r@_Dj$7$F$$$k>l9g!"(B
$B2>A[%[%9%H$N(B suEXEC $B$KM-Mx$J$h$&$K!"%a%$%s$N(B Apache
$B%I%-%e%a%s%H3,AX$N30B&$KA4$F$N2>A[%[%9%H$N%I%-%e%a%s%H%k!<%H$r(B
$B9=C[$9$kI,MW$,$"$j$^$9!#(B($BNc$O8eF|5-:\(B)
セキュリティと効率の理由から、<code>suEXEC</code> の全てのリクエストは
仮想ホストへのリクエストにおける最上位のドキュメントルート内か、
ユーザディレクトリへのリクエストにおける個々のユーザの最上位の
ドキュメントルート内に残らなければなりません。
例えば、四つの仮想ホストを設定している場合、
仮想ホストの suEXEC に有利なように、メインの Apache
ドキュメント階層の外側に全ての仮想ホストのドキュメントルートを
構築する必要があります。(例は後日記載)
</p>
</li>
<li>suEXEC $B$N(B PATH $B4D6-JQ?t(B
<li>suEXEC の PATH 環境変数
<p class="indent">
$B$3$l$rJQ99$9$k$N$O4m81$G$9!#$3$N;XDj$K4^$^$l$k3F%Q%9$,(B
<strong>$B?.Mj$G$-$k(B</strong>
$B%G%#%l%/%H%j$G$"$k$3$H$r3NG'$7$F$/$@$5$$!#(B
$B@$3&$+$i$N%"%/%;%9$K$h$j!"C/$+$,%[%9%H>e$G%H%m%$$NLZGO(B
$B$r<B9T$G$-$k$h$&$K$O$7$?$/$J$$$G$7$g$&!#(B
これを変更するのは危険です。この指定に含まれる各パスが
<strong>信頼できる</strong>
ディレクトリであることを確認してください。
世界からのアクセスにより、誰かがホスト上でトロイの木馬
を実行できるようにはしたくないでしょう。
</p>
</li>
<li>suEXEC $B%3!<%I$N2~B$(B
<li>suEXEC コードの改造
<p class="indent">
$B7+$jJV$7$^$9$,!"2?$r$d$m$&$H$7$F$$$k$+GD0.$;$:$K$3$l$r$d$k$H(B
<strong>$BBg$-$JLdBj(B</strong>$B$r0z$-5/$3$7$+$M$^$;$s!#(B
$B2DG=$J8B$jHr$1$F$/$@$5$$!#(B
繰り返しますが、何をやろうとしているか把握せずにこれをやると
<strong>大きな問題</strong>を引き起こしかねません。
可能な限り避けてください。
</p>
</li>
</ul>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="iso-2022-jp" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
<!-- English Revision: 151408:567425 (outdated) -->
@@ -22,14 +22,14 @@
<manualpage metafile="urlmapping.xml.meta">
<title>URL $B$+$i%U%!%$%k%7%9%F%`>e$N0LCV$X$N%^%C%W(B</title>
<title>URL からファイルシステム上の位置へのマップ</title>
<summary>
<p>$B$3$NJ8=q$O(B Apache $B$,%j%/%(%9%H$N(B URL $B$+$iAw?.$9$k%U%!%$%k$N(B
$B%U%!%$%k%7%9%F%`>e$N0LCV$r7hDj$9$kJ}K!$r@bL@$7$^$9!#(B</p>
<p>この文書は Apache がリクエストの URL から送信するファイルの
ファイルシステム上の位置を決定する方法を説明します。</p>
</summary>
<section id="related"><title>$B4XO"$9$k%b%8%e!<%k$H%G%#%l%/%F%#%V(B</title>
<section id="related"><title>関連するモジュールとディレクティブ</title>
<related>
<modulelist>
@@ -64,158 +64,158 @@
<section id="documentroot"><title>DocumentRoot</title>
<p>$B%j%/%(%9%H$KBP$7$F$I$N%U%!%$%k$rAw?.$9$k$+$r7hDj$9$k$H$-$N(B
Apache $B$N%G%U%)%k%H$NF0:n$O!"%j%/%(%9%H$N(B URL-Path (URL $B$N%[%9%HL>$H(B
$B%]!<%HHV9f$N8e$KB3$/ItJ,(B) $B$r<h$j=P$7$F@_Dj%U%!%$%k$G;XDj$5$l$F$$$k(B
<p>リクエストに対してどのファイルを送信するかを決定するときの
Apache のデフォルトの動作は、リクエストの URL-Path (URL のホスト名と
ポート番号の後に続く部分) を取り出して設定ファイルで指定されている
<directive module="core">DocumentRoot</directive>
$B$N:G8e$KDI2C$9$k!"$H$$$&$b$N$G$9!#$G$9$+$i!"(B
の最後に追加する、というものです。ですから、
<directive module="core">DocumentRoot</directive>
$B$N2<$N%G%#%l%/%H%j$d%U%!%$%k$,%&%'%V$+$i8+$($k4pK\$N%I%-%e%a%s%H$NLZ9=B$$r(B
$B$J$7$^$9!#(B</p>
の下のディレクトリやファイルがウェブから見える基本のドキュメントの木構造を
なします。</p>
<p>Apache $B$K$O%5!<%P$,J#?t$N%[%9%H$X$N%j%/%(%9%H$r<u$1<h$k(B
<a href="vhosts/">$B%P!<%A%c%k%[%9%H(B</a> $B$N5!G=$b$"$j$^$9!#(B
$B$3$N>l9g!"$=$l$>$l$N%P!<%A%c%k%[%9%H$KBP$7$F0c$&(B
<p>Apache にはサーバが複数のホストへのリクエストを受け取る
<a href="vhosts/">バーチャルホスト</a> の機能もあります。
この場合、それぞれのバーチャルホストに対して違う
<directive module="core">DocumentRoot</directive>
$B$r;XDj$9$k$3$H$,$G$-$^$9!#$^$?!"(B<module>mod_vhost_alias</module>
$B%b%8%e!<%k$K$h$jDs6!$5$l$k%G%#%l%/%F%#%V$r;H$C$F!"(B
$BAw?.$9$k$?$a$N%3%s%F%s%D$N>l=j$r%j%/%(%9%H$5$l$?(B IP
$B%"%I%l%9$d%[%9%HL>$+$iF0E*$K7h$a$k$3$H$b$G$-$^$9!#(B</p>
を指定することができます。また、<module>mod_vhost_alias</module>
モジュールにより提供されるディレクティブを使って、
送信するためのコンテンツの場所をリクエストされた IP
アドレスやホスト名から動的に決めることもできます。</p>
</section>
<section id="outside"><title>DocumentRoot $B30$N%U%!%$%k(B</title>
<section id="outside"><title>DocumentRoot 外のファイル</title>
<p>$B%U%!%$%k%7%9%F%`>e$N!"(B
$B87L)$K$O(B <directive module="core">DocumentRoot</directive>
$B$N2<$K$O$J$$ItJ,$X$N%&%'%V%"%/%;%9$r5v2D$9$kI,MW$,$"$k(B
$B>l9g$,$h$/$"$j$^$9!#(BApache $B$O$3$N$?$a$KJ#?t$NJ}K!$rMQ0U$7$F$$$^$9!#(B
Unix $B%7%9%F%`$G$O!"%U%!%$%k%7%9%F%`$NB>$NItJ,$r%7%s%\%j%C%/%j%s%/$r(B
$B;H$C$F(B <directive module="core">DocumentRoot</directive>
$B$N2<$K;}$C$F$/$k$3$H$,$G$-$^$9!#%;%-%e%j%F%#>e$NM}M3$K$h$j!"(B
Apache $B$O3:Ev$9$k%G%#%l%/%H%j$N(B
<directive module="core">Options</directive> $B$N@_Dj$K(B
<code>FollowSymLinks</code> $B$+(B <code>SymLinksIfOwnerMatch</code> $B$,(B
$B$"$k>l9g$K$N$_%7%s%\%j%C%/%j%s%/$r$?$I$j$^$9!#(B</p>
<p>ファイルシステム上の、
厳密には <directive module="core">DocumentRoot</directive>
の下にはない部分へのウェブアクセスを許可する必要がある
場合がよくあります。Apache はこのために複数の方法を用意しています。
Unix システムでは、ファイルシステムの他の部分をシンボリックリンクを
使って <directive module="core">DocumentRoot</directive>
の下に持ってくることができます。セキュリティ上の理由により、
Apache は該当するディレクトリの
<directive module="core">Options</directive> の設定に
<code>FollowSymLinks</code> <code>SymLinksIfOwnerMatch</code>
ある場合にのみシンボリックリンクをたどります。</p>
<p>$BBe$o$j$NJ}K!$H$7$F!"(B<directive module="mod_alias">Alias</directive>
$B%G%#%l%/%F%#%V$r;H$C$F%U%!%$%k%7%9%F%`$NG$0U$NItJ,$r%&%'%V$N6u4V$K(B
$B%^%C%W$G$-$^$9!#$?$H$($P!"(B</p>
<p>代わりの方法として、<directive module="mod_alias">Alias</directive>
ディレクティブを使ってファイルシステムの任意の部分をウェブの空間に
マップできます。たとえば、</p>
<example>Alias /docs /var/web</example>
<p>$B$H$$$&@_Dj$N$H$-$O!"(BURL
<code>http://www.example.com/docs/dir/file.html</code> $B$K$O(B
<code>/var/web/dir/file.html</code> $B$,Aw?.$5$l$^$9!#(B
<directive module="mod_alias">ScriptAlias</directive> $B$b!"(B
$BBP>]$H$J$C$F$$$k%Q%9$,(B CGI $B%9%/%j%W%H$H$7$F07$o$l$k$H$$$&DI2C$N(B
$B8z2L0J30$OF1$8$h$&$KF0:n$7$^$9!#(B</p>
<p>という設定のときは、URL
<code>http://www.example.com/docs/dir/file.html</code> には
<code>/var/web/dir/file.html</code> が送信されます。
<directive module="mod_alias">ScriptAlias</directive> も、
対象となっているパスが CGI スクリプトとして扱われるという追加の
効果以外は同じように動作します。</p>
<p>$B$b$C$H=@Fp$J@_Dj$,I,MW$J>u67$G$O!"(B
<directive module="mod_alias">AliasMatch</directive> $B%G%#%l%/%F%#%V$d(B
<directive module="mod_alias">ScriptAliasMatch</directive> $B%G%#%l%/%F%#%V(B
$B$r;H$C$F6/NO$J@55,I=8=$K4p$E$$$?%^%C%A$HCV49$r9T$J$&$3$H$,$G$-$^$9!#(B
$B$?$H$($P!"(B</p>
<p>もっと柔軟な設定が必要な状況では、
<directive module="mod_alias">AliasMatch</directive> ディレクティブや
<directive module="mod_alias">ScriptAliasMatch</directive> ディレクティブ
を使って強力な正規表現に基づいたマッチと置換を行なうことができます。
たとえば、</p>
<example>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
/home/$1/cgi-bin/$2</example>
<p>$B$O(B <code>http://example.com/~user/cgi-bin/script.cgi</code> $B$X$N(B
$B%j%/%(%9%H$r(B <code>/home/user/cgi-bin/script.cgi</code> $B$H$$$&%Q%9$X(B
$B%^%C%W$7!"$3$N%^%C%W$N7k2L$H$7$F$N%U%!%$%k$r(B CGI $B%9%/%j%W%H$H$7$F(B
$B07$$$^$9!#(B</p>
<p> <code>http://example.com/~user/cgi-bin/script.cgi</code> への
リクエストを <code>/home/user/cgi-bin/script.cgi</code> というパスへ
マップし、このマップの結果としてのファイルを CGI スクリプトとして
扱います。</p>
</section>
<section id="user"><title>$B%f!<%6%G%#%l%/%H%j(B</title>
<section id="user"><title>ユーザディレクトリ</title>
<p>$BEAE}E*$K(B Unix $B%7%9%F%`$G$O%f!<%6(B <em>user</em> $B$N%[!<%`%G%#%l%/%H%j$r(B
<code>~user/</code> $B$H$7$F;2>H$G$-$^$9!#(B<module>mod_userdir</module>
$B%b%8%e!<%k$O$3$N35G0$r%&%'%V$K3HD%$7$F!"(B
$B$=$l$>$l$N%f!<%6$N%[!<%`%G%#%l%/%H%j$N%U%!%$%k$r(B
$B0J2<$N$h$&$J(B URL $B$r;H$C$F%"%/%;%9$G$-$k$h$&$K$7$^$9!#(B</p>
<p>伝統的に Unix システムではユーザ <em>user</em> のホームディレクトリを
<code>~user/</code> として参照できます。<module>mod_userdir</module>
モジュールはこの概念をウェブに拡張して、
それぞれのユーザのホームディレクトリのファイルを
以下のような URL を使ってアクセスできるようにします。</p>
<example>http://www.example.com/~user/file.html</example>
<p>$B%;%-%e%j%F%#$N4QE@$+$i!"%&%'%V$+$i%f!<%6$N%[!<%`%G%#%l%/%H%j$X(B
$BD>@\%"%/%;%9$G$-$k$h$&$K$9$k$3$H$OE,@Z$G$O$"$j$^$;$s!#$G$9$+$i!"(B
<directive module="mod_userdir">UserDir</directive> $B%G%#%l%/%F%#%V$K$O(B
$B%f!<%6$N%[!<%`%G%#%l%/%H%j$N2<$N!"%&%'%V%U%!%$%k$N(B
$BCV$+$l$F$$$k%G%#%l%/%H%j$r;XDj$7$^$9!#%G%U%)%k%H$N@_Dj$N(B
<code>Userdir public_html</code> $B$r;H$&$H!">e$N(B URL $B$O(B
<code>/home/user/public_html/file.html</code> $B$H$$$&$h$&$J%U%!%$%k$K(B
$B%^%C%W$5$l$^$9!#$3$3$G!"(B<code>/home/user/</code> $B$O(B
<code>/etc/passwd</code> $B$G;XDj$5$l$F$$$k%f!<%6$N%[!<%`%G%#%l%/%H%j$G$9!#(B</p>
<p>セキュリティの観点から、ウェブからユーザのホームディレクトリへ
直接アクセスできるようにすることは適切ではありません。ですから、
<directive module="mod_userdir">UserDir</directive> ディレクティブには
ユーザのホームディレクトリの下の、ウェブファイルの
置かれているディレクトリを指定します。デフォルトの設定の
<code>Userdir public_html</code> を使うと、上の URL は
<code>/home/user/public_html/file.html</code> というようなファイルに
マップされます。ここで、<code>/home/user/</code>
<code>/etc/passwd</code> で指定されているユーザのホームディレクトリです。</p>
<p><directive module="mod_userdir">Userdir</directive> $B$K$O!"(B
<code>/etc/passwd</code> $B$K%[!<%`%G%#%l%/%H%j$N0LCV$,=q$+$l$F$$$J$$(B
$B%7%9%F%`$G$b;H$&$3$H$N$G$-$kB>$N7A<0$b$"$j$^$9!#(B</p>
<p><directive module="mod_userdir">Userdir</directive> には、
<code>/etc/passwd</code> にホームディレクトリの位置が書かれていない
システムでも使うことのできる他の形式もあります。</p>
<p>$BCf$K$O%7%s%\%k(B "~" (<code>%7e</code> $B$N$h$&$KId9f2=$5$l$k$3$H$,B?$$(B)
$B$r3J9%$,0-$$$H;W$C$F!"%f!<%6$N%G%#%l%/%H%j$rI=$9$?$a$KJL$NJ8;zNs$N(B
$B;HMQ$r9%$`?M$,$$$^$9!#(Bmod_userdir $B$O$3$N5!G=$r%5%]!<%H$7$F$$$^$;$s!#(B
$B$7$+$7!"%f!<%6$N%[!<%`%G%#%l%/%H%j$,5,B'E*$J9=@.$N$H$-$O!"(B
<directive module="mod_alias">AliasMatch</directive> $B$r;H$C$FK>$_$N(B
$B8z2L$rC#@.$9$k$3$H$,$G$-$^$9!#$?$H$($P!"(B
<code>http://www.example.com/upages/user/file.html</code> $B$,(B
<code>/home/user/public_html/file.html</code> $B$K%^%C%W$5$l$k$h$&$K$9$k$K$O!"(B
$B0J2<$N$h$&$K(B <code>AliasMatch</code> $B%G%#%l%/%F%#%V$r;H$$$^$9(B:</p>
<p>中にはシンボル "~" (<code>%7e</code> のように符号化されることが多い)
を格好が悪いと思って、ユーザのディレクトリを表すために別の文字列の
使用を好む人がいます。mod_userdir はこの機能をサポートしていません。
しかし、ユーザのホームディレクトリが規則的な構成のときは、
<directive module="mod_alias">AliasMatch</directive> を使って望みの
効果を達成することができます。たとえば、
<code>http://www.example.com/upages/user/file.html</code>
<code>/home/user/public_html/file.html</code> にマップされるようにするには、
以下のように <code>AliasMatch</code> ディレクティブを使います:</p>
<example>AliasMatch ^/upages/([a-zA-Z0-9]+)/?(.*)
/home/$1/public_html/$2</example>
</section>
<section id="redirect"><title>URL $B%j%@%$%l%/%7%g%s(B</title>
<section id="redirect"><title>URL リダイレクション</title>
<p>$B>e$N@a$G@bL@$7$?@_DjMQ$N%G%#%l%/%F%#%V$O(B Apache $B$K(B
$B%U%!%$%k%7%9%F%`$NFCDj$N>l=j$+$i%3%s%F%s%D$r<h$C$F$-$F(B
$B%/%i%$%"%s%H$KAw$jJV$9$h$&$K$7$^$9!#$H$-$K$O!"$=$NBe$o$j$K(B
$B%/%i%$%"%s%H$K%j%/%(%9%H$5$l$?%3%s%F%s%D$OJL$N(B URL $B$K$"$k$3$H$r(B
$BCN$i$;$F!"%/%i%$%"%s%H$,?7$7$$(B URL $B$X?7$7$$%j%/%(%9%H$r9T$J$&$h$&$K(B
$B$9$kJ}$,K>$^$7$$$3$H$,$"$j$^$9!#$3$l$O(B<em>$B%j%@%$%l%/%7%g%s(B</em>$B$H(B
$B8F$P$l$F$$$F!"(B<directive module="mod_alias">Redirect</directive>
$B%G%#%l%/%F%#%V$K$h$j<BAu$5$l$F$$$^$9!#$?$H$($P!"(B
<directive module="core">DocumentRoot</directive> $B$N2<$N%G%#%l%/%H%j(B
<code>/foo/</code> $B$,?7$7$$%G%#%l%/%H%j(B <code>/bar/</code> $B$K0\F0$7$?$H$-$O!"(B
$B0J2<$N$h$&$K$7$F%/%i%$%"%s%H$,?7$7$$>l=j$N%3%s%F%s%D$r%j%/%(%9%H$9$k$h$&$K(B
$B;X<($9$k$3$H$,$G$-$^$9(B:</p>
<p>上の節で説明した設定用のディレクティブは Apache に
ファイルシステムの特定の場所からコンテンツを取ってきて
クライアントに送り返すようにします。ときには、その代わりに
クライアントにリクエストされたコンテンツは別の URL にあることを
知らせて、クライアントが新しい URL へ新しいリクエストを行なうように
する方が望ましいことがあります。これは<em>リダイレクション</em>と
呼ばれていて、<directive module="mod_alias">Redirect</directive>
ディレクティブにより実装されています。たとえば、
<directive module="core">DocumentRoot</directive> の下のディレクトリ
<code>/foo/</code> が新しいディレクトリ <code>/bar/</code> に移動したときは、
以下のようにしてクライアントが新しい場所のコンテンツをリクエストするように
指示することができます:</p>
<example>Redirect permanent /foo/
http://www.example.com/bar/</example>
<p>$B$3$l$O!"(B<code>/foo/</code> $B$G;O$^$k$9$Y$F$N(B URL-Path $B$r!"(B
<code>www.example.com</code> $B%5!<%P$N(B <code>/bar/</code> $B$,(B
<code>/foo/</code> $B$KCV49$5$l$?$b$N$K%j%@%$%l%/%H$7$^$9!#(B
$B%5!<%P$O<+J,<+?H$N%5!<%P$@$1$G$J$/!"$I$N%5!<%P$K$G$b%/%i%$%"%s%H$r(B
$B%j%@%$%l%/%H$9$k$3$H$,$G$-$^$9!#(B</p>
<p>これは、<code>/foo/</code> で始まるすべての URL-Path を、
<code>www.example.com</code> サーバの <code>/bar/</code>
<code>/foo/</code> に置換されたものにリダイレクトします。
サーバは自分自身のサーバだけでなく、どのサーバにでもクライアントを
リダイレクトすることができます。</p>
<p>Apache $B$O$h$jJ#;($J=q$-49$($NLdBj$N$?$a$K!"(B
<directive module="mod_alias">RedirectMatch</directive> $B%G%#%l%/%F%#%V$r(B
$BDs6!$7$F$$$^$9!#$?$H$($P!"%5%$%H$N%[!<%`%Z!<%8$r0c$&%5%$%H$K%j%@%$%l%/%H(B
$B$9$k$1$l$I!"B>$N%j%/%(%9%H$O$=$N$^$^07$&!"$H$$$&$H$-$O0J2<$N@_Dj$r(B
$B;H$$$^$9(B:</p>
<p>Apache はより複雑な書き換えの問題のために、
<directive module="mod_alias">RedirectMatch</directive> ディレクティブを
提供しています。たとえば、サイトのホームページを違うサイトにリダイレクト
するけれど、他のリクエストはそのまま扱う、というときは以下の設定を
使います:</p>
<example>RedirectMatch permanent ^/$
http://www.example.com/startpage.html</example>
<p>$B$"$k$$$O!"0l;~E*$K%5%$%H$N$9$Y$F$N%Z!<%8$rB>$N%5%$%H$NFCDj$N(B
$B%Z!<%8$X%j%@%$%l%/%H$9$k$H$-$O!"0J2<$r;H$$$^$9(B:</p>
<p>あるいは、一時的にサイトのすべてのページを他のサイトの特定の
ページへリダイレクトするときは、以下を使います:</p>
<example>RedirectMatch temp .*
http://othersite.example.com/startpage.html</example>
</section>
<section id="proxy"><title>$B%j%P!<%9%W%m%-%7(B</title>
<section id="proxy"><title>リバースプロキシ</title>
<p>Apache $B$O1s3VCO$K$"$k%I%-%e%a%s%H$r%m!<%+%k$N%5!<%P$N(B URL $B6u4V$K(B
$B;}$C$F$/$k$3$H$b$G$-$^$9!#$3$N<jK!$O(B<em>$B%j%P!<%9%W%m%-%7(B</em>$B$H8F$P$l$F$$$^$9!#(B
$B%&%'%V%5!<%P$,1s3VCO$N%I%-%e%a%s%H$r<hF@$7$F%/%i%$%"%s%H$KAw$jJV$9$N$,(B
$B%W%m%-%7%5!<%P$NF0:n$N$h$&$K8+$($k$+$i$G$9!#%/%i%$%"%s%H$K$O%I%-%e%a%s%H$,(B
$B%j%P!<%9%W%m%-%7%5!<%P$+$iAw$i$l$F$-$F$$$k$h$&$K8+$($kE@$,DL>o$N(B
$B%W%m%-%7$H$O0[$J$j$^$9!#(B</p>
<p>Apache は遠隔地にあるドキュメントをローカルのサーバの URL 空間に
持ってくることもできます。この手法は<em>リバースプロキシ</em>と呼ばれています。
ウェブサーバが遠隔地のドキュメントを取得してクライアントに送り返すのが
プロキシサーバの動作のように見えるからです。クライアントにはドキュメントが
リバースプロキシサーバから送られてきているように見える点が通常の
プロキシとは異なります。</p>
<p>$B<!$NNc$G$O!"%/%i%$%"%s%H$,(B <code>/foo/</code> $B%G%#%l%/%H%j$N2<$K$"$k(B
$B%I%-%e%a%s%H$r%j%/%(%9%H$9$k$H!"%5!<%P$,(B <code>internal.example.com</code> $B$N(B
<code>/bar/</code> $B%G%#%l%/%H%j$+$i<hF@$7$F!"$5$b%m!<%+%k%5!<%P$+$i$N(B
$B%I%-%e%a%s%H$N$h$&$K$7$F%/%i%$%"%s%H$KJV$7$^$9!#(B</p>
<p>次の例では、クライアントが <code>/foo/</code> ディレクトリの下にある
ドキュメントをリクエストすると、サーバが <code>internal.example.com</code>
<code>/bar/</code> ディレクトリから取得して、さもローカルサーバからの
ドキュメントのようにしてクライアントに返します。</p>
<example>
ProxyPass /foo/ http://internal.example.com/bar/<br />
@@ -224,76 +224,76 @@ ProxyPassReverseCookieDomain internal.example.com public.example.com<br />
ProxyPassReverseCookiePath /foo/ /bar/
</example>
<p><directive module="mod_proxy">ProxyPass</directive> $B%G%#%l%/%F%#%V$O(B
$B%5!<%P$,E,@Z$J%I%-%e%a%s%H$r<hF@$9$k$h$&$K@_Dj$7!"(B
<directive module="mod_proxy">ProxyPassReverse</directive> $B%G%#%l%/%F%#%V$O(B
<code>internal.example.com</code> $B$+$i$N%j%@%$%l%/%H$,%m!<%+%k%5!<%P$N(B
$BE,@Z$J%G%#%l%/%H%j$r;X$9$h$&$K=q$-49$($^$9!#(B
$BF1MM$K(B <directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
$B$H(B <directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
$B$G%P%C%/%(%s%IB&%5!<%P$NH/9T$7$?(B Cookie $B$r=q$-49$($k$3$H$,$G$-$^$9!#(B</p>
<p>$B$?$@$7!"%I%-%e%a%s%H$NCf$N%j%s%/$O=q$-49$($i$l$J$$!"(B
$B$H$$$&$3$H$OCN$C$F$*$$$F$/$@$5$$!#(B
$B$G$9$+$i!"(B<code>internal.example.com</code> $B$X$N@dBP%Q%9$K$h$k%j%s%/$G$O!"(B
$B%/%i%$%"%s%H$,%W%m%-%7%5!<%P$rH4$1=P$7$F(B <code>internal.example.com</code> $B$K(B
$BD>@\%j%/%(%9%H$rAw$k!"$H$$$&$3$H$K$J$j$^$9!#(B
$B%5!<%I%Q!<%F%#@=%b%8%e!<%k$N(B <a
<p><directive module="mod_proxy">ProxyPass</directive> ディレクティブは
サーバが適切なドキュメントを取得するように設定し、
<directive module="mod_proxy">ProxyPassReverse</directive> ディレクティブは
<code>internal.example.com</code> からのリダイレクトがローカルサーバの
適切なディレクトリを指すように書き換えます。
同様に <directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
<directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
でバックエンド側サーバの発行した Cookie を書き換えることができます。</p>
<p>ただし、ドキュメントの中のリンクは書き換えられない、
ということは知っておいてください。
ですから、<code>internal.example.com</code> への絶対パスによるリンクでは、
クライアントがプロキシサーバを抜け出して <code>internal.example.com</code>
直接リクエストを送る、ということになります。
サードパーティ製モジュールの <a
href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>
$B$O!"(BHTML $B$H(B XHTML $BCf$N%j%s%/$r=q$-49$($k$3$H$,$G$-$^$9!#(B</p>
は、HTML と XHTML 中のリンクを書き換えることができます。</p>
</section>
<section id="rewrite"><title>$B%j%i%$%H%(%s%8%s(B</title>
<section id="rewrite"><title>リライトエンジン</title>
<p>$B$h$j0lAX6/NO$JCV49$,I,MW$J$H$-$O!"(B<module>mod_rewrite</module>
$B$,Ds6!$9$k%j%i%$%H%(%s%8%s$,Lr$KN)$D$G$7$g$&!#(B
$B$3$N%b%8%e!<%k$K$h$jDs6!$5$l$k%G%#%l%/%F%#%V$O(B
$B%V%i%&%6$N<oN`!"%j%/%(%9%H85$N(B IP $B%"%I%l%9$J$I$N%j%/%(%9%H$NFCD'$r(B
$B;H$C$FAw$jJV$9%3%s%F%s%D$N>l=j$r7h$a$^$9!#$5$i$K!"(B<module>mod_rewrite</module>
$B$O30It$N%G!<%?%Y!<%9%U%!%$%k$d%W%m%0%i%`$r;H$C$F%j%/%(%9%H$N07$$J}$r(B
$B7h$a$k$3$H$b$G$-$^$9!#%j%i%$%H%(%s%8%s$O>e$G5s$2$i$l$F$$$k;0$D$N%^%C%T%s%0(B
$B$9$Y$F$r9T$J$&$3$H$,$G$-$^$9(B: $BFbIt$N%j%@%$%l%/%H(B ($B%(%$%j%"%9(B)$B!"(B
$B30It$N%j%@%$%l%/%H!"%W%m%-%7$G$9!#(Bmod_rewrite $B$r;H$&B?$/$N<BMQE*$JNc$O(B
<a href="misc/rewriteguide.html">URL $B%j%i%$%H%,%$%I(B</a>
$B$G@bL@$5$l$F$$$^$9!#(B</p>
<p>より一層強力な置換が必要なときは、<module>mod_rewrite</module>
が提供するリライトエンジンが役に立つでしょう。
このモジュールにより提供されるディレクティブは
ブラウザの種類、リクエスト元の IP アドレスなどのリクエストの特徴を
使って送り返すコンテンツの場所を決めます。さらに、<module>mod_rewrite</module>
は外部のデータベースファイルやプログラムを使ってリクエストの扱い方を
決めることもできます。リライトエンジンは上で挙げられている三つのマッピング
すべてを行なうことができます: 内部のリダイレクト (エイリアス)、
外部のリダイレクト、プロキシです。mod_rewrite を使う多くの実用的な例は
<a href="misc/rewriteguide.html">URL リライトガイド</a>
で説明されています。</p>
</section>
<section id="notfound"><title>File Not Found</title>
<p>$BI,$:!"%j%/%(%9%H$5$l$?(B URL $B$KBP1~$9$k%U%!%$%k$,%U%!%$%k%7%9%F%`$K(B
$BL5$$$H$$$&>l9g$,H/@8$7$^$9!#$3$l$,5/$3$k$N$K$O$$$/$D$+$NM}M3$,$"$j$^$9!#(B
$B>l9g$K$h$C$F$O!"%I%-%e%a%s%H$rJL$N>l=j$K0\F0$7$?7k2L$G$"$k$3$H$,$"$j$^$9!#(B
$B$3$N>l9g$O!"%/%i%$%"%s%H$K%j%=!<%9$N?7$7$$0LCV$rCN$i$;$k$?$a$K(B
<a href="#redirect">URL $B%j%@%$%l%/%7%g%s(B</a>$B$r;H$&$N$,:GA1$NJ}K!$G$9!#(B
$B$=$&$9$k$3$H$K$h$C$F!"%j%=!<%9$O?7$7$$0LCV$K0\F0$7$F$$$k$1$l$I$b!"(B
$B8E$$%V%C%/%^!<%/$d%j%s%/$,F0:n$7B3$1$k$h$&$K$9$k$3$H$,$G$-$^$9!#(B</p>
<p>必ず、リクエストされた URL に対応するファイルがファイルシステムに
無いという場合が発生します。これが起こるのにはいくつかの理由があります。
場合によっては、ドキュメントを別の場所に移動した結果であることがあります。
この場合は、クライアントにリソースの新しい位置を知らせるために
<a href="#redirect">URL リダイレクション</a>を使うのが最善の方法です。
そうすることによって、リソースは新しい位置に移動しているけれども、
古いブックマークやリンクが動作し続けるようにすることができます。</p>
<p>"File Not Found" $B%(%i!<$N$b$&0l$D$N$h$/$"$kM}M3$O!"(B
$B%V%i%&%6$X$ND>@\F~NO$d(B HTML $B%j%s%/$+$i$N6vH/E*$J(B URL $B$NF~NO4V0c$$$G$9!#(B
Apache $B$O$3$NLdBj$r2~A1$9$k$?$a$K!"(B<module>mod_speling</module>
$B%b%8%e!<%k(B ($B0U?^E*$JDV$j4V0c$$(B)
($BLuCm(B: $B@5$7$/$O(B spelling) $B$rDs6!$7$F$$$^$9!#$3$N%b%8%e!<%k$,(B
$B;HMQ$5$l$F$$$k$H$-$O!"(B"File Not Found" $B%(%i!<$r2#<h$j$7$F!"(B
$B;w$?%U%!%$%kL>$N%j%=!<%9$rC5$7$^$9!#$b$70l$D$@$18+$D$+$C$?>l9g$O(B
mod_speling $B$O%/%i%$%"%s%H$K@5$7$$0LCV$rCN$i$;$k$?$a$K(B HTTP $B%j%@%$%l%/%H$r(B
$BAw$j$^$9!#$b$7J#?t$N!V6a$$!W%U%!%$%k$,8+$D$+$C$?>l9g$O!"$=$l$i(B
$BBeBX$H$J$j$($k$b$N$N%j%9%H$,%/%i%$%"%s%H$KI=<($5$l$^$9!#(B</p>
<p>"File Not Found" エラーのもう一つのよくある理由は、
ブラウザへの直接入力や HTML リンクからの偶発的な URL の入力間違いです。
Apache はこの問題を改善するために、<module>mod_speling</module>
モジュール (意図的な綴り間違い)
(訳注: 正しくは spelling) を提供しています。このモジュールが
使用されているときは、"File Not Found" エラーを横取りして、
似たファイル名のリソースを探します。もし一つだけ見つかった場合は
mod_speling はクライアントに正しい位置を知らせるために HTTP リダイレクトを
送ります。もし複数の「近い」ファイルが見つかった場合は、それら
代替となりえるもののリストがクライアントに表示されます。</p>
<p>mod_speling $B$NHs>o$KM-MQ$J5!G=$O!"BgJ8;z>.J8;z$r6hJL$;$:$K(B
$B%U%!%$%kL>$rHf3S$9$k$b$N$G$9!#$3$l$O(B URL $B$H(B unix $B$N(B
$B%U%!%$%k%7%9%F%`$,N>J}$H$bBgJ8;z>.J8;z$r6hJL$9$k$b$N$G$"$k!"(B
$B$H$$$&$3$H$r%f!<%6$,CN$i$J$$%7%9%F%`$GLr$KN)$A$^$9!#$?$@$7!"(B
$B;~@^$N(B URL $BD{@5DxEY$G:Q$^$:!"(Bmod_speling $B$r$h$jB?$/;HMQ$9$k$H!"%5!<%P$K(B
$B$5$i$J$kIi2Y$,$+$+$j$^$9!#$9$Y$F$N!V@5$7$/$J$$!W%j%/%(%9%H$N8e$K(B
URL $B$N%j%@%$%l%/%H$H%/%i%$%"%s%H$+$i$N?7$7$$%j%/%(%9%H$,$/$k$3$H$K(B
$B$J$j$^$9$+$i!#(B</p>
<p>mod_speling の非常に有用な機能は、大文字小文字を区別せずに
ファイル名を比較するものです。これは URL と unix の
ファイルシステムが両方とも大文字小文字を区別するものである、
ということをユーザが知らないシステムで役に立ちます。ただし、
時折の URL 訂正程度で済まず、mod_speling をより多く使用すると、サーバに
さらなる負荷がかかります。すべての「正しくない」リクエストの後に
URL のリダイレクトとクライアントからの新しいリクエストがくることに
なりますから。</p>
<p>$B%3%s%F%s%D$N0LCV$r7h$a$h$&$H$9$k$9$Y$F$N;n$_$,<:GT$9$k$H!"(B
Apache $B$O!"(BHTTP $B%9%F!<%?%9%3!<%I(B 404 (file not found) $B$H6&$K(B
$B%(%i!<%Z!<%8$rJV$7$^$9!#$3$N%(%i!<%Z!<%8$N304Q$O(B
<p>コンテンツの位置を決めようとするすべての試みが失敗すると、
Apache は、HTTP ステータスコード 404 (file not found) と共に
エラーページを返します。このエラーページの外観は
<directive module="core">ErrorDocument</directive>
$B%G%#%l%/%F%#%V$G@)8f$5$l!"(B
<a href="custom-error.html">$B%+%9%?%`%(%i!<%l%9%]%s%9(B</a> $B$G(B
$B@bL@$5$l$F$$$k$h$&$K!"=@Fp$J@_Dj$r9T$J$&$3$H$,$G$-$^$9!#(B</p>
ディレクティブで制御され、
<a href="custom-error.html">カスタムエラーレスポンス</a> で
説明されているように、柔軟な設定を行なうことができます。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990:659902 (outdated) -->
@@ -21,41 +21,41 @@
-->
<manualpage metafile="examples.xml.meta">
<parentdocument href="./">$B%P!<%A%c%k%[%9%H(B</parentdocument>
<title>$B%P!<%A%c%k%[%9%H$NNc(B</title>
<parentdocument href="./">バーチャルホスト</parentdocument>
<title>バーチャルホストの例</title>
<summary>
<p>$B$3$NJ8=q$O!"%P!<%A%c%k%[%9%H$N@_Dj$N:]$K(B
$B$h$/$"$k<ALd$KEz$($k$b$N$G$9!#A[Dj$7$F$$$kBP>]$O(B <a
href="name-based.html">$BL>A0%Y!<%9(B</a> $B$d(B <a
href="ip-based.html">IP $B%Y!<%9(B</a> $B$N%P!<%A%c%k%[%9%H$r;H$C$F(B
$B0l$D$N%5!<%P$GJ#?t$N%&%'%V%5%$%H$r1?MQ$7$F$$$k>u67$G$9!#(B
<p>この文書は、バーチャルホストの設定の際に
よくある質問に答えるものです。想定している対象は <a
href="name-based.html">名前ベース</a> や <a
href="ip-based.html">IP ベース</a> のバーチャルホストを使って
一つのサーバで複数のウェブサイトを運用している状況です。
</p>
</summary>
<section id="purename"><title>$B0l$D$N(B IP $B%"%I%l%9$G$$$/$D$+$NL>A0%Y!<%9$N(B
$B%&%'%V%5%$%H$r<B9T$9$k(B</title>
<section id="purename"><title>一つの IP アドレスでいくつかの名前ベースの
ウェブサイトを実行する</title>
<p>$B%5!<%P$O(B IP $B%"%I%l%9$r0l$D3d$jEv$F$i$l$F$$$F!"(BDNS $B$G%^%7%s$K(B
$BJ#?t$NL>A0(B (CNAME) $B$,;XDj$5$l$F$$$^$9!#$3$N%^%7%s$G(B
<code>www.example.com</code> $B$H(B <code>www.example.org</code>
$B$N$?$a$N%&%'%V%5!<%P$r<B9T$5$;$?$$$H$7$^$9!#(B</p>
<p>サーバは IP アドレスを一つ割り当てられていて、DNS でマシンに
複数の名前 (CNAME) が指定されています。このマシンで
<code>www.example.com</code> <code>www.example.org</code>
のためのウェブサーバを実行させたいとします。</p>
<note><title>$BCm(B</title><p>
Apache $B%5!<%P$N@_Dj$G%P!<%A%c%k%[%9%H$N@_Dj$r$7$?$@$1$G!"(B
$BCN$i$J$$4V$K$=$N%[%9%HL>$KBP1~$9$k(B DNS $B$N%(%s%H%j$,(B
$B:n@.$5$l$?$j$O$7$^$;$s!#$=$N%5!<%P$N(B IP $B%"%I%l%9$K2r7h$5$l$k(B
$B$h$&$K(B DNS $B$KL>A0$rEPO?$7$J$1$l$P(B<em>$B$J$j$^$;$s(B</em>$B!#(B
$B$=$&$G$J$$$HC/$b$"$J$?$N%&%'%V%5%$%H$r8+$k$3$H$O$G$-$^$;$s!#(B
$B%m!<%+%k$G$N%F%9%H$N$?$a$K(B <code>hosts</code> $B%U%!%$%k$K(B
$B%(%s%H%j$rDI2C$9$k$3$H$b$G$-$^$9$,!"$3$N>l9g$O$=$N(B
hosts $B%(%s%H%j$N$"$k%^%7%s$+$i$7$+F0:n$7$^$;$s!#(B</p>
<note><title></title><p>
Apache サーバの設定でバーチャルホストの設定をしただけで、
知らない間にそのホスト名に対応する DNS のエントリが
作成されたりはしません。そのサーバの IP アドレスに解決される
ように DNS に名前を登録しなければ<em>なりません</em>。
そうでないと誰もあなたのウェブサイトを見ることはできません。
ローカルでのテストのために <code>hosts</code> ファイルに
エントリを追加することもできますが、この場合はその
hosts エントリのあるマシンからしか動作しません。</p>
</note>
<example>
<title>$B%5!<%P@_Dj(B</title>
<title>サーバ設定</title>
# Ensure that Apache listens on port 80<br />
Listen 80<br />
@@ -84,18 +84,18 @@
&lt;/VirtualHost&gt;
</example>
<p>$B%"%9%?%j%9%/$O$9$Y$F$N%"%I%l%9$K%^%C%A$7$^$9$N$G!"<g%5!<%P$O(B
$B%j%/%(%9%H$r07$$$^$;$s!#(B<code>www.example.com</code> $B$O(B
$B:G=i$K$"$k$?$a!"M%@h=g0L$O0lHV9b$/$J$j!"(B<cite>default</cite> $B$b$7$/$O(B
<cite>primary</cite> $B$N%5!<%P$H9M$($k$3$H$,$G$-$^$9!#$D$^$j!"%j%/%(%9%H$,(B
$B$I$N(B <code>ServerName</code> $B%G%#%l%/%F%#%V$K$b%^%C%A$7$J$$>l9g!"(B
$B0lHV:G=i$N(B <code>VirtualHost</code> $B$K$h$j07$o$l$^$9!#(B</p>
<p>アスタリスクはすべてのアドレスにマッチしますので、主サーバは
リクエストを扱いません。<code>www.example.com</code>
最初にあるため、優先順位は一番高くなり、<cite>default</cite> もしくは
<cite>primary</cite> のサーバと考えることができます。つまり、リクエストが
どの <code>ServerName</code> ディレクティブにもマッチしない場合、
一番最初の <code>VirtualHost</code> により扱われます。</p>
<note><title>$BCm(B</title>
<note><title></title>
<p><code>*</code> $B$r%7%9%F%`$N<B:]$N(B IP $B%"%I%l%9$KCV$-49$($k(B
$B$3$H$b$G$-$^$9!#$=$N>l9g$O(B <code>VirtualHost</code> $B$N0z?t$O(B
<code>NameVirtualHost</code> $B$N0z?t$HF1$8$K(B<em>$B$7$J$1$l$P$J$j$^$;$s(B
<p><code>*</code> をシステムの実際の IP アドレスに置き換える
こともできます。その場合は <code>VirtualHost</code> の引数は
<code>NameVirtualHost</code> の引数と同じに<em>しなければなりません
</em>:</p>
<example>
@@ -105,37 +105,37 @@
# etc ...
</example>
<p>$B$7$+$7!"(BIP $B%"%I%l%9$,M=B,IT2DG=$J%7%9%F%`(B
$B!=!=Nc$($P%W%m%P%$%@$+$iF0E*$K(B IP $B%"%I%l%9$r<hF@$7$F2?$i$+$N(B
$B%@%$%J%_%C%/(B DNS $B$r;H$C$F$$$k>l9g$J$I!=!=$K$*$$$F$O!"(B<code>*</code>
$B;XDj$O$5$i$KJXMx$G$9!#(B<code>*</code> $B$O$9$Y$F$N(B IP $B%"%I%l%9$K(B
$B%^%C%A$7$^$9$N$G!"$3$N@_Dj$K$7$F$*$1$P(B IP $B%"%I%l%9$,JQ99$5$l$F$b(B
$B@_DjJQ99$;$:$KF0:n$7$^$9!#(B</p>
<p>しかし、IP アドレスが予測不可能なシステム
――例えばプロバイダから動的に IP アドレスを取得して何らかの
ダイナミック DNS を使っている場合など――においては、<code>*</code>
指定はさらに便利です。<code>*</code> はすべての IP アドレスに
マッチしますので、この設定にしておけば IP アドレスが変更されても
設定変更せずに動作します。</p>
</note>
<p>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%F%#%s%0$G$O$[$\$9$Y$F$N>u67$G!"(B
$B>e5-$N@_Dj$G4uK>$N@_Dj$K$J$C$F$$$k$3$H$G$7$g$&!#(B
$B<B:]$3$N@_Dj$,F0:n$7$J$$$N$O!"(BIP $B%"%I%l%9$d%]!<%H$N0c$$$K$h$C$F(B
$B0c$&%3%s%F%s%D$rAw$k$H$-$@$1$G$9!#(B</p>
<p>名前ベースのバーチャルホスティングではほぼすべての状況で、
上記の設定で希望の設定になっていることでしょう。
実際この設定が動作しないのは、IP アドレスやポートの違いによって
違うコンテンツを送るときだけです。</p>
</section>
<section id="twoips"><title>$BJ#?t$N(B IP $B%"%I%l%9$N$"$k%[%9%H$GL>A0%Y!<%9$N(B
$B%[%9%F%#%s%0$r9T$J$&(B</title>
<section id="twoips"><title>複数の IP アドレスのあるホストで名前ベースの
ホスティングを行なう</title>
<note>
<title>$BCm(B</title><p>$B$3$3$G@bL@$5$l$F$$$kJ}K!$O(B IP $B%"%I%l%9$,(B
$B2?8D$"$C$F$bF1MM$K$G$-$^$9!#(B</p>
<title></title><p>ここで説明されている方法は IP アドレスが
何個あっても同様にできます。</p>
</note>
<p>$B%5!<%P$K$OFs$D(B IP $B%"%I%l%9$,$D$$$F$$$^$9!#0l$DL\(B
(<code>172.20.30.40</code>) $B$G$O<g%5!<%P(B
<code>server.domain.com</code> $B$r07$$!"$b$&0lJ}(B
(<code>172.20.30.50</code>) $B$G$OFs$D$+$=$l0J>e$N?t$N(B
$B%P!<%A%c%k%[%9%H$r07$$$^$9!#(B</p>
<p>サーバには二つ IP アドレスがついています。一つ目
(<code>172.20.30.40</code>) では主サーバ
<code>server.domain.com</code> を扱い、もう一方
(<code>172.20.30.50</code>) では二つかそれ以上の数の
バーチャルホストを扱います。</p>
<example>
<title>$B%5!<%P$N@_Dj(B</title>
<title>サーバの設定</title>
Listen 80<br />
<br />
@@ -167,29 +167,29 @@
&lt;/VirtualHost&gt;
</example>
<p><code>172.20.30.50</code> $B0J30$N%"%I%l%9$X$N%j%/%(%9%H$O<g%5!<%P(B
$B$,07$$$^$9!#(B<code>172.20.30.50</code> $B$X$N!"L$CN$N%[%9%HL>$^$?$O(B
<code>Host:</code> $B%X%C%@$J$7$N%j%/%(%9%H$O(B <code>www.example.com</code>
$B$,07$$$^$9!#(B</p>
<p><code>172.20.30.50</code> 以外のアドレスへのリクエストは主サーバ
が扱います。<code>172.20.30.50</code> への、未知のホスト名または
<code>Host:</code> ヘッダなしのリクエストは <code>www.example.com</code>
が扱います。</p>
</section>
<section id="intraextra"><title>$B0c$&(B IP $B%"%I%l%9(B ($BNc$($P!"FbIt$H30It%"%I%l%9(B)
$B$GF1$8%3%s%F%s%D$rAw$k(B</title>
<section id="intraextra"><title>違う IP アドレス (例えば、内部と外部アドレス)
で同じコンテンツを送る</title>
<p>$B%5!<%P%^%7%s$O(B IP $B%"%I%l%9$rFs$D(B (<code>192.168.1.1</code>
$B$H(B <code>172.20.30.40</code>) $B;}$C$F$$$^$9!#$3$N%^%7%s$OFbIt(B
($B%$%s%H%i%M%C%H(B) $B$H(B $B30It(B ($B%$%s%?!<%M%C%H(B) $B$N%M%C%H%o!<%/$N4V$K(B
$B$"$j$^$9!#(B<code>server.example.com</code> $B$O%M%C%H%o!<%/$N30$+$i$O(B
$B30It%"%I%l%9(B (<code>172.20.30.40</code>) $B$H$7$F2r7h$5$l$^$9$,!"(B
$B%M%C%H%o!<%/$NCf$+$i$OFbIt%"%I%l%9(B (<code>192.168.1.1</code>)
$B$H$7$F2r7h$5$l$^$9!#(B</p>
<p>サーバマシンは IP アドレスを二つ (<code>192.168.1.1</code>
<code>172.20.30.40</code>) 持っています。このマシンは内部
(イントラネット) と 外部 (インターネット) のネットワークの間に
あります。<code>server.example.com</code> はネットワークの外からは
外部アドレス (<code>172.20.30.40</code>) として解決されますが、
ネットワークの中からは内部アドレス (<code>192.168.1.1</code>)
として解決されます。</p>
<p><code>VirtualHost</code> $B0l$D$@$1$G%5!<%P$,FbIt$N%j%/%(%9%H$H(B
$B30It$N%j%/%(%9%H$NN>J}$KF1$8%3%s%F%s%D$G1~Ez$9$k$h$&$K$G$-$^$9!#(B</p>
<p><code>VirtualHost</code> 一つだけでサーバが内部のリクエストと
外部のリクエストの両方に同じコンテンツで応答するようにできます。</p>
<example>
<title>$B%5!<%P$N@_Dj(B</title>
<title>サーバの設定</title>
NameVirtualHost 192.168.1.1<br />
NameVirtualHost 172.20.30.40<br />
@@ -203,29 +203,29 @@
&lt;/VirtualHost&gt;
</example>
<p>$B$3$l$G$I$A$i$N%M%C%H%o!<%/$+$i$N%j%/%(%9%H$bF1$8(B <code>VirtualHost</code>
$B$G07$o$l$k$h$&$K$J$j$^$9!#(B</p>
<p>これでどちらのネットワークからのリクエストも同じ <code>VirtualHost</code>
で扱われるようになります。</p>
<note><title>$BCm(B:</title><p>$BFbIt%M%C%H%o!<%/$G$O40A4$J%[%9%HL>$N(B
<code>server.example.com</code> $B$NBe$o$j$K!"C1$K(B <code>server</code>
$B$r;H$&$3$H$,$G$-$^$9!#(B</p>
<note><title>:</title><p>内部ネットワークでは完全なホスト名の
<code>server.example.com</code> の代わりに、単に <code>server</code>
を使うことができます。</p>
<p>$B>e$NNc$G$O!"(BIP $B%"%I%l%9$N%j%9%H$r!"$9$Y$F$N%"%I%l%9$K(B
$BF1$8%3%s%F%s%D$G1~Ez$9$k(B <code>*</code> $B$KCV$-49$($i$l$^$9!#(B</p>
<p>上の例では、IP アドレスのリストを、すべてのアドレスに
同じコンテンツで応答する <code>*</code> に置き換えられます。</p>
</note>
</section>
<section id="port"><title>$B0c$&%]!<%H$G0c$&%5%$%H$r1?1D$9$k(B</title>
<section id="port"><title>違うポートで違うサイトを運営する</title>
<p>$BF1$8(B IP $B$KJ#?t$N%I%a%$%s$,$"$j!"$5$i$KJ#?t$N%]!<%H$r;H$C$F(B
$B%j%/%(%9%H$r07$$$?$$$H$-$,$"$j$^$9!#(B"NameVirtualHost" $B%?%0$NCf$G(B
$B%]!<%H$rDj5A$9$k$3$H$G!"$3$l$rF0:n$5$;$i$l$^$9!#(B
NameVirtualHost name:port $BL5$7$d(B Listen $B%G%#%l%/%F%#%V$G(B
&lt;VirtualHost name:port&gt; $B$r;H$*$&$H$7$F$b!"$=$N@_Dj$OF0:n$7$^$;$s!#(B</p>
<p>同じ IP に複数のドメインがあり、さらに複数のポートを使って
リクエストを扱いたいときがあります。"NameVirtualHost" タグの中で
ポートを定義することで、これを動作させられます。
NameVirtualHost name:port 無しや Listen ディレクティブで
&lt;VirtualHost name:port&gt; を使おうとしても、その設定は動作しません。</p>
<example>
<title>$B%5!<%P$N@_Dj(B</title>
<title>サーバの設定</title>
Listen 80<br />
Listen 8080<br />
@@ -264,14 +264,14 @@
</section>
<section id="ip"><title>IP $B%Y!<%9$N%P!<%A%c%k%[%9%F%#%s%0(B</title>
<section id="ip"><title>IP ベースのバーチャルホスティング</title>
<p>$B%5!<%P$O(B <code>www.example.com</code> $B$H(B <code>www.example.org</code>
$B$K$=$l$>$l2r7h$5$l$k!"Fs$D$N(B IP $B%"%I%l%9(B (<code>172.20.30.40</code> $B$H(B
<code>172.20.30.50</code>) $B$,$"$j$^$9!#(B</p>
<p>サーバは <code>www.example.com</code> <code>www.example.org</code>
にそれぞれ解決される、二つの IP アドレス (<code>172.20.30.40</code>
<code>172.20.30.50</code>) があります。</p>
<example>
<title>$B%5!<%P$N@_Dj(B</title>
<title>サーバの設定</title>
Listen 80<br />
<br />
@@ -290,22 +290,22 @@
&lt;/VirtualHost&gt;
</example>
<p><code>&lt;VirtualHost&gt;</code> $B%G%#%l%/%F%#%V$N$I$l$G$b(B
$B;XDj$5$l$F$$$J$$%"%I%l%9(B ($BNc$($P(B <code>localhost</code>) $B$O!"(B
$B<g%5!<%P$,$"$l$P$=$3$K9T$-$^$9!#(B</p>
<p><code>&lt;VirtualHost&gt;</code> ディレクティブのどれでも
指定されていないアドレス (例えば <code>localhost</code>) は、
主サーバがあればそこに行きます。</p>
</section>
<section id="ipport"><title>$B%]!<%H%Y!<%9$H(B IP $B%Y!<%9$N:.$6$C$?(B
$B%P!<%A%c%k%[%9%H(B</title>
<section id="ipport"><title>ポートベースと IP ベースの混ざった
バーチャルホスト</title>
<p>$B%5!<%P%^%7%s$O$=$l$>$l(B <code>www.example.com</code> $B$H(B
<code>www.example.org</code> $B$K$=$l$>$l2r7h$5$l$k!"(BIP $B%"%I%l%9$rFs$D(B
(<code>172.20.30.40</code> $B$H(B <code>172.20.30.50</code>) $B;}$C$F$$$^$9!#(B
$B$I$A$i$b%]!<%H(B 80 $B$H(B 8080 $B$G%[%9%H$rAv$i$;$^$9!#(B</p>
<p>サーバマシンはそれぞれ <code>www.example.com</code>
<code>www.example.org</code> にそれぞれ解決される、IP アドレスを二つ
(<code>172.20.30.40</code> <code>172.20.30.50</code>) 持っています。
どちらもポート 80 と 8080 でホストを走らせます。</p>
<example>
<title>$B%5!<%P$N@_Dj(B</title>
<title>サーバの設定</title>
Listen 172.20.30.40:80<br />
Listen 172.20.30.40:8080<br />
@@ -343,14 +343,14 @@
</section>
<section id="mixed"><title>$BL>A0%Y!<%9$H(B IP $B%Y!<%9$r:.$<$?(B
$B%P!<%A%c%k%[%9%H(B</title>
<section id="mixed"><title>名前ベースと IP ベースを混ぜた
バーチャルホスト</title>
<p>$B$$$/$D$+$N%^%7%s$G$OL>A0%Y!<%9$N!"$=$NB>$G$O(B IP $B%Y!<%9$N%P!<%A%c%k(B
$B%[%9%H$r$7$^$9!#(B</p>
<p>いくつかのマシンでは名前ベースの、その他では IP ベースのバーチャル
ホストをします。</p>
<example>
<title>$B%5!<%P$N@_Dj(B</title>
<title>サーバの設定</title>
Listen 80<br />
<br />
@@ -395,14 +395,14 @@
</section>
<section id="proxy"><title><code>Virtual_host</code> $B$H(B
mod_proxy $B$rJ;MQ$9$k(B</title>
<section id="proxy"><title><code>Virtual_host</code>
mod_proxy を併用する</title>
<p>$B<!$NNc$O!"%U%m%s%HB&$N%P!<%A%c%k%[%9%H$GB>$N%^%7%s$X%W%m%/%7$7$^$9!#(B
$BNc$G$O(B <code>192.168.111.2</code> $B$N%^%7%s$G$O%P!<%A%c%k%[%9%HL>$O(B
$BF1$8L>A0$G@_Dj$5$l$F$$$^$9!#J#?t$N%[%9%HL>$r0lBf$N%^%7%s$K%W%m%/%7$9$k(B
$B>l9g$O!"(B<directive module="mod_proxy">ProxyPreserveHost On</directive>
$B%G%#%l%/%F%#%V$r;H$C$F!"4uK>$N%[%9%HL>$rEO$;$k$h$&$K$J$j$^$9!#(B
<p>次の例は、フロント側のバーチャルホストで他のマシンへプロクシします。
例では <code>192.168.111.2</code> のマシンではバーチャルホスト名は
同じ名前で設定されています。複数のホスト名を一台のマシンにプロクシする
場合は、<directive module="mod_proxy">ProxyPreserveHost On</directive>
ディレクティブを使って、希望のホスト名を渡せるようになります。
</p>
<example>
@@ -416,18 +416,18 @@
</section>
<section id="default"><title><code>_default_</code> $B$N%P!<%A%c%k%[%9%H$r(B
$B;H$&(B</title>
<section id="default"><title><code>_default_</code> のバーチャルホストを
使う</title>
<section id="defaultallports"><title>$B$9$Y$F$N%]!<%H$KBP$9$k(B
<code>_default_</code> $B%P!<%A%c%k%[%9%H(B</title>
<section id="defaultallports"><title>すべてのポートに対する
<code>_default_</code> バーチャルホスト</title>
<p>$BL$;XDj$N(B IP $B%"%I%l%9$H%]!<%H!"(B<em>$B$D$^$j(B</em>$BB>$N%P!<%A%c%k%[%9%H$K(B
$B;H$o$l$F$$$J$$%"%I%l%9$H%]!<%H$NAH$_9g$o$;!"$X$N(B<em>$B$9$Y$F$N(B</em>$B%j%/%(%9%H$r(B
$B<u$1<h$j$^$9!#(B</p>
<p>未指定の IP アドレスとポート、<em>つまり</em>他のバーチャルホストに
使われていないアドレスとポートの組み合わせ、への<em>すべての</em>リクエストを
受け取ります。</p>
<example>
<title>$B%5!<%P$N@_Dj(B</title>
<title>サーバの設定</title>
&lt;VirtualHost _default_:*&gt;<br />
<indent>
@@ -436,30 +436,30 @@
&lt;/VirtualHost&gt;
</example>
<p>$B$3$N$h$&$K%o%$%k%I%+!<%I$N%]!<%H$G%G%U%)%k%H$N%P!<%A%c%k%[%9%H$r(B
$B;XDj$9$k$H!"<g%5!<%P$K%j%/%(%9%H$,9T$/$N$rKI$2$^$9!#(B</p>
<p>このようにワイルドカードのポートでデフォルトのバーチャルホストを
指定すると、主サーバにリクエストが行くのを防げます。</p>
<p>$B%G%U%)%k%H$N%P!<%A%c%k%[%9%H$OL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$K(B
$B;H$o$l$F$$$k%"%I%l%9$H%]!<%H$NAH$KAw$i$l$?%j%/%(%9%H$r07$&$3$H$O(B
$B$"$j$^$;$s!#%j%/%(%9%H$,ITL@$J(B <code>Host:</code> $B%X%C%@$d$=$N(B
$B%X%C%@$,$J$+$C$?$j$9$k>l9g$O4pK\L>A0%Y!<%9%P!<%A%c%k%[%9%H(B ($B$=$N(B
$B%"%I%l%9$H%]!<%H$G@_Dj%U%!%$%kCf$G:G=i$N%P!<%A%c%k%[%9%H(B) $B$K$h$j(B
$B07$o$l$^$9!#(B</p>
<p>デフォルトのバーチャルホストは名前ベースのバーチャルホストに
使われているアドレスとポートの組に送られたリクエストを扱うことは
ありません。リクエストが不明な <code>Host:</code> ヘッダやその
ヘッダがなかったりする場合は基本名前ベースバーチャルホスト (その
アドレスとポートで設定ファイル中で最初のバーチャルホスト) により
扱われます。</p>
<p>$B$I$s$J%j%/%(%9%H$G$b(B <directive module="mod_alias">AliasMatch</directive>
$B$d(B <directive module="mod_rewrite">RewriteRule</directive> $B$r;H$C$F(B
$BC10l$N>pJs%Z!<%8(B ($B$d%9%/%j%W%H(B) $B$K=q$-49$($k$3$H$,$G$-$^$9!#(B</p>
<p>どんなリクエストでも <directive module="mod_alias">AliasMatch</directive>
<directive module="mod_rewrite">RewriteRule</directive> を使って
単一の情報ページ (やスクリプト) に書き換えることができます。</p>
</section>
<section id="defaultdifferentports"><title>$B0c$&%]!<%H$N$?$a$N(B
<code>_default_</code> $B%P!<%A%c%k%[%9%H(B</title>
<section id="defaultdifferentports"><title>違うポートのための
<code>_default_</code> バーチャルホスト</title>
<p>$B0l$D$a$N@_Dj$H$[$\F1$8$G$9$,!"%5!<%P$OJ#?t$N%]!<%H$r(B listen $B$7$F$*$j!"(B
80 $BHV%]!<%H$KBP$7$FFs$D$a$N(B <code>_default_</code> $B%P!<%A%c%k%[%9%H$r(B
$B@_Dj$7$?$$>l9g$G$9!#(B</p>
<p>一つめの設定とほぼ同じですが、サーバは複数のポートを listen しており、
80 番ポートに対して二つめの <code>_default_</code> バーチャルホストを
設定したい場合です。</p>
<example>
<title>$B%5!<%P$N@_Dj(B</title>
<title>サーバの設定</title>
&lt;VirtualHost _default_:80&gt;<br />
<indent>
@@ -476,20 +476,20 @@
&lt;/VirtualHost&gt;
</example>
<p>80 $BHV%]!<%H$N%G%U%)%k%H%P!<%A%c%k%[%9%H(B ($B%o%$%k%I%+!<%I%]!<%H$N(B
$B%G%U%)%k%H%P!<%A%c%k%[%9%H$h$j$bA0$K=q$+$l$F$$$J$1$l$P(B<em>$B$J$j$^$;$s(B</em>) $B$O(B
$BL$;XDj$N(B IP $B%"%I%l%9$KAw$i$l$?$9$Y$F$N%j%/%(%9%H$r07$$$^$9!#(B
$B<g%5!<%P$O%j%/%(%9%H$r07$$$^$;$s!#(B</p>
<p>80 番ポートのデフォルトバーチャルホスト (ワイルドカードポートの
デフォルトバーチャルホストよりも前に書かれていなければ<em>なりません</em>) は
未指定の IP アドレスに送られたすべてのリクエストを扱います。
主サーバはリクエストを扱いません。</p>
</section>
<section id="defaultoneport"><title>$B0l$D$N%]!<%H$KBP$7$F$@$1$N(B
<code>_default_</code> $B%P!<%A%c%k%[%9%H(B</title>
<section id="defaultoneport"><title>一つのポートに対してだけの
<code>_default_</code> バーチャルホスト</title>
<p>80 $BHV%]!<%H$K$O%G%U%)%k%H$N%P!<%A%c%k%[%9%H$,I,MW$G!"B>$N(B
$B%P!<%A%c%k%[%9%H$O%G%U%)%k%H$,I,MW$J$$>l9g$G$9!#(B</p>
<p>80 番ポートにはデフォルトのバーチャルホストが必要で、他の
バーチャルホストはデフォルトが必要ない場合です。</p>
<example>
<title>$B%5!<%P$N@_Dj(B</title>
<title>サーバの設定</title>
&lt;VirtualHost _default_:80&gt;<br />
DocumentRoot /www/default<br />
@@ -497,28 +497,28 @@
&lt;/VirtualHost&gt;
</example>
<p>80 $BHV%]!<%H$X$N%"%I%l%9L$;XDj$N%j%/%(%9%H$O%G%U%)%k%H$N%P!<%A%c%k(B
$B%[%9%H$+$iAw$i$l$^$9!#B>$NL$;XDj$N%"%I%l%9$H%]!<%H$X$N%j%/%(%9%H$O(B
$B<g%5!<%P$+$iAw$i$l$^$9!#(B</p>
<p>80 番ポートへのアドレス未指定のリクエストはデフォルトのバーチャル
ホストから送られます。他の未指定のアドレスとポートへのリクエストは
主サーバから送られます。</p>
</section>
</section>
<section id="migrate"><title>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$+$i(B IP $B%Y!<%9$N(B
$B%P!<%A%c%k%[%9%H$K0\9T$9$k(B</title>
<section id="migrate"><title>名前ベースのバーチャルホストから IP ベースの
バーチャルホストに移行する</title>
<p>$B%[%9%HL>$,L>A0(B <code>www.example.org</code> $B$N%P!<%A%c%k%[%9%H(B
(<a href="#name">$BL>A0%Y!<%9(B</a>$B$NNc$N(B 2 $BHVL\$N@_Dj(B) $B$,@lMQ$N(B IP $B%"%I%l%9$r(B
$BF@$?$H$7$^$9!#L>A0%Y!<%9$N%P!<%A%c%k%[%9%H$N8E$$(B IP $B%"%I%l%9$r(B
$B%-%c%C%7%e$7$F$$$k%M!<%`%5!<%P$d%W%m%-%7$N$?$a$K0\9T4|4VCf$ON>J}$N(B
$B%P!<%A%c%k%[%9%H$rDs6!$7$?$$$H$7$^$9!#(B</p>
<p>ホスト名が名前 <code>www.example.org</code> のバーチャルホスト
(<a href="#name">名前ベース</a>の例の 2 番目の設定) が専用の IP アドレスを
得たとします。名前ベースのバーチャルホストの古い IP アドレスを
キャッシュしているネームサーバやプロキシのために移行期間中は両方の
バーチャルホストを提供したいとします。</p>
<p>$BEz$O4JC1$G$9!#C1$K?7$7$$(B IP $B%"%I%l%9(B (<code>172.20.30.50</code>)
$B$r(B <code>VirtualHost</code> $B%G%#%l%/%F%#%V$KDI2C$9$k$3$H$G(B
$B$G$-$^$9!#(B</p>
<p>答は簡単です。単に新しい IP アドレス (<code>172.20.30.50</code>)
<code>VirtualHost</code> ディレクティブに追加することで
できます。</p>
<example>
<title>$B%5!<%P@_Dj(B</title>
<title>サーバ設定</title>
Listen 80<br />
ServerName www.example.com<br />
@@ -544,27 +544,27 @@
&lt;/VirtualHost&gt;
</example>
<p>$B$3$N%P!<%A%c%k%[%9%H$O?7$7$$%"%I%l%9(B (IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$H$7$F(B)
$B$H8E$$%"%I%l%9(B($BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$H$7$F(B) $B$NN>J}$+$i(B
$B%"%/%;%9$G$-$^$9!#(B</p>
<p>このバーチャルホストは新しいアドレス (IP ベースのバーチャルホストとして)
と古いアドレス(名前ベースのバーチャルホストとして) の両方から
アクセスできます。</p>
</section>
<section id="serverpath"><title><code>ServerPath</code> $B%G%#%l%/%F%#%V$r(B
$B;H$&(B</title>
<section id="serverpath"><title><code>ServerPath</code> ディレクティブを
使う</title>
<p>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$,Fs$D$"$k%5!<%P$,$"$k$H$7$^$9!#(B
$B@5$7$$%P!<%A%c%k%[%9%H$rF@$k$?$a$K$O%/%i%$%"%s%H$O@5$7$$(B
<code>Host:</code> $B%X%C%@$rAw$i$J$1$l$P$J$j$^$;$s!#(B
$B8E$$(B HTTP/1.0 $B$O$=$N$h$&$J%X%C%@$rAw$i$J$$$N$G!"(BApache $B$O%/%i%$%"%s%H$,(B
$B$I$N%P!<%A%c%k%[%9%H$r0U?^$7$?$N$+$5$C$Q$j$o$+$j$^$;$s(B
($B$J$N$G!"<g%P!<%A%c%k%[%9%H$G%j%/%(%9%H$r07$$$^$9(B)$B!#(B
$B2DG=$J8B$j$N2<0L8_49@-$rF@$k$?$a!"L>A0%Y!<%9$N%P!<%A%c%k%[%9%H$N(B
URL $B@\F,<-$X$N%j%s%/$N=q$+$l$?%Z!<%8$rJV$9!"(B
$B<g%P!<%A%c%k%[%9%H$,:n@.$5$l$^$9!#(B</p>
<p>名前ベースのバーチャルホストが二つあるサーバがあるとします。
正しいバーチャルホストを得るためにはクライアントは正しい
<code>Host:</code> ヘッダを送らなければなりません。
古い HTTP/1.0 はそのようなヘッダを送らないので、Apache はクライアントが
どのバーチャルホストを意図したのかさっぱりわかりません
(なので、主バーチャルホストでリクエストを扱います)。
可能な限りの下位互換性を得るため、名前ベースのバーチャルホストの
URL 接頭辞へのリンクの書かれたページを返す、
主バーチャルホストが作成されます。</p>
<example>
<title>$B%5!<%P$N@_Dj(B</title>
<title>サーバの設定</title>
NameVirtualHost 172.20.30.40<br />
<br />
@@ -601,22 +601,22 @@
&lt;/VirtualHost&gt;
</example>
<p><directive module="core">ServerPath</directive> $B%G%#%l%/%F%#%V$N@_Dj$K(B
$B$h$j!"(BURL <code>http://www.sub1.domain.tld/sub1/</code> $B$O(B
<em>$B>o$K(B</em> sub1-vhost $B$K$h$j07$o$l$^$9!#(BURL
<code>http://www.sub1.domain.tld/</code> $B$X$N%j%/%(%9%H$O(B
$B%/%i%$%"%s%H$,@5$7$$(B <code>Host:</code> $B%X%C%@$rAw$C$?$H$-$K$N$_(B
sub1-vhost $B$+$iAw$i$l$^$9!#(B<code>Host:</code> $B%X%C%@$,$J$1$l$P(B
$B%/%i%$%"%s%H$O<g%[%9%H$N>pJs%Z!<%8$rF@$^$9!#(B</p>
<p><directive module="core">ServerPath</directive> ディレクティブの設定に
より、URL <code>http://www.sub1.domain.tld/sub1/</code>
<em>常に</em> sub1-vhost により扱われます。URL
<code>http://www.sub1.domain.tld/</code> へのリクエストは
クライアントが正しい <code>Host:</code> ヘッダを送ったときにのみ
sub1-vhost から送られます。<code>Host:</code> ヘッダがなければ
クライアントは主ホストの情報ページを得ます。</p>
<p>$B0l$D4qL/$JF0:n$r$9$kE@$,$"$k$3$H$O3P$($F$*$$$F$/$@$5$$!#(B
<code>http://www.sub2.domain.tld/sub1/</code> $B$X$N%j%/%(%9%H$b(B
<code>Host:</code> $B%X%C%@$,$J$1$l$P(B sub1-vhost $B$K$h$j07$o$l$^$9!#(B</p>
<p>一つ奇妙な動作をする点があることは覚えておいてください。
<code>http://www.sub2.domain.tld/sub1/</code> へのリクエストも
<code>Host:</code> ヘッダがなければ sub1-vhost により扱われます。</p>
<p>$B@5$7$$(B <code>Host:</code> $B%X%C%@$rAw$C$?%/%i%$%"%s%H$O$I$A$i$N(B
URL$B!"(B<em>$B$D$^$j(B</em>$B@\F,<-$,$"$kJ}$bL5$$J}$b;H$($k$h$&$K(B
<directive module="mod_rewrite">RewriteRule</directive> $B%G%#%l%/%F%#%V$,(B
$B;H$o$l$F$$$^$9!#(B</p>
<p>正しい <code>Host:</code> ヘッダを送ったクライアントはどちらの
URL、<em>つまり</em>接頭辞がある方も無い方も使えるように
<directive module="mod_rewrite">RewriteRule</directive> ディレクティブが
使われています。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 659902 -->
@@ -21,52 +21,52 @@
-->
<manualpage metafile="fd-limits.xml.meta">
<parentdocument href="./">$B%P!<%A%c%k%[%9%H(B</parentdocument>
<title>$B%U%!%$%k5-=R;R$N8B3&(B</title>
<parentdocument href="./">バーチャルホスト</parentdocument>
<title>ファイル記述子の限界</title>
<summary>
<p>$B$?$/$5$s$N%P!<%A%c%k%[%9%H$r1?MQ$9$k>l9g!"$b$7!"(B
$B3F%P!<%A%c%k%[%9%H$4$H$K0[$J$k%m%0%U%!%$%k$,;XDj$7$F$"$k$H!"(B
Apache $B$,%U%!%$%k5-=R;R(B (<cite>$B%U%!%$%k%O%s%I%k(B</cite>$B$H$b8F$P$l$^$9(B)
$B$r;H$$@Z$C$F$7$^$&$3$H$,$"$j$^$9!#(BApache $B$,;HMQ$9$k%U%!%$%k(B
$B5-=R;R$N?t$O!"3F%(%i!<%m%0%U%!%$%k$K$D$-(B 1 $B$D!"B>$N%m%0%U%!%$%k$N(B
$B%G%#%l%/%F%#%V$K$D$-(B 1 $B$D!"$5$i$KFbIt$G;HMQ$9$k(B 10 $B$+$i(B 20$B!"(B
$B$N9g7W$K$J$j$^$9!#(BUnix $B%*%Z%l!<%F%#%s%0%7%9%F%`$G$O%W%m%;%9$4$H$K(B
$B;HMQ2DG=$J%U%!%$%k5-=R;R$N?t$r@)8B$7$F$$$^$9!#$?$$$F$$$N>l9g$O(B 64 $B$G!"(B
$BIaDL$OBg$-$JCM$N%O!<%I%j%_%C%H$^$GA}$d$9$3$H$,$G$-$^$9!#(B</p>
<p>たくさんのバーチャルホストを運用する場合、もし、
各バーチャルホストごとに異なるログファイルが指定してあると、
Apache がファイル記述子 (<cite>ファイルハンドル</cite>とも呼ばれます)
を使い切ってしまうことがあります。Apache が使用するファイル
記述子の数は、各エラーログファイルにつき 1 つ、他のログファイルの
ディレクティブにつき 1 つ、さらに内部で使用する 10 から 20、
の合計になります。Unix オペレーティングシステムではプロセスごとに
使用可能なファイル記述子の数を制限しています。たいていの場合は 64 で、
普通は大きな値のハードリミットまで増やすことができます。</p>
<p>Apache $B$OI,MW$K1~$8$F>e8B$r3HBg$7$h$&$H;n$_$^$9$,!"(B
$B0J2<$N$h$&$J>l9g$K$O$&$^$/$$$+$J$$$+$b$7$l$^$;$s!#(B</p>
<p>Apache は必要に応じて上限を拡大しようと試みますが、
以下のような場合にはうまくいかないかもしれません。</p>
<ol>
<li>$BMxMQ$7$F$$$k%7%9%F%`$G(B <code>setrlimit()</code>
$B%7%9%F%`%3!<%k$,Ds6!$5$l$F$$$J$$!#(B</li>
<li>利用しているシステムで <code>setrlimit()</code>
システムコールが提供されていない。</li>
<li>$B%7%9%F%`>e$G(B <code>setrlimit</code>(RLIMIT_NOFILE) $B$,F0:n$7$J$$(B
($B$?$H$($P(B Solaris 2.3 $B$N$h$&$K(B)$B!#(B</li>
<li>システム上で <code>setrlimit</code>(RLIMIT_NOFILE) が動作しない
(たとえば Solaris 2.3 のように)。</li>
<li>$BMW5a$5$l$k%U%!%$%k5-=R;R$N?t$,(B
$B%O!<%I%j%_%C%H$rD6$($F$7$^$&!#(B</li>
<li>要求されるファイル記述子の数が
ハードリミットを超えてしまう。</li>
<li>$B%7%9%F%`$K%U%!%$%k5-=R;R$K4X$7$FJL$N@)8B$,B8:_$7$F$7$^$C$F$$$k!#(B
$B$?$H$($P!"(Bstdio $B%9%H%j!<%`$G$O%U%!%$%k5-=R;R$r(B 256 $B0J>e;H$($J$$(B
(Solaris 2)$B!"$J$I!#(B</li>
<li>システムにファイル記述子に関して別の制限が存在してしまっている。
たとえば、stdio ストリームではファイル記述子を 256 以上使えない
(Solaris 2)、など。</li>
</ol>
<p>$BLdBj$,H/@8$7$?;~$K<h$jF@$kBP=hJ}K!$O<!$N$H$*$j(B:</p>
<p>問題が発生した時に取り得る対処方法は次のとおり:</p>
<ul>
<li>$B%m%0%U%!%$%k$N?t$r8:$i$9!#(B<directive type="section"
<li>ログファイルの数を減らす。<directive type="section"
module="core">VirtualHost</directive>
$B%;%/%7%g%s$G%m%0%U%!%$%k$r;XDj$;$:!"%a%$%s$N%m%0%U%!%$%k$K$N$_5-O?$9$k!#(B
($B$3$l$K4X$9$k>\$7$$>pJs$O0J2<$N(B<a
href="#splitlogs">$B%m%0%U%!%$%k$NJ,3d(B</a>$B$rFI$s$G$/$@$5$$!#(B)</li>
セクションでログファイルを指定せず、メインのログファイルにのみ記録する。
(これに関する詳しい情報は以下の<a
href="#splitlogs">ログファイルの分割</a>を読んでください。)</li>
<li>
$B$b$7!"A0=R$N(B 1 $B$^$?$O(B 2 $B$N>l9g$G$"$l$P!"(B
Apache $B$r5/F0$9$kA0$K%U%!%$%k5-=R;R$rA}$d$7$^$9!#(B
$B$?$H$($P<!$N$h$&$J%9%/%j%W%H$r;H$$$^$9!#(B
もし、前述の 1 または 2 の場合であれば、
Apache を起動する前にファイル記述子を増やします。
たとえば次のようなスクリプトを使います。
<example>
<code>#!/bin/sh<br />
@@ -77,44 +77,44 @@
</ul>
</summary>
<section id="splitlogs"><title>$B%m%0%U%!%$%k$NJ,3d(B</title>
<section id="splitlogs"><title>ログファイルの分割</title>
<p>$BJ#?t$N%P!<%A%c%k%[%9%H$N%m%0$rF1$8%m%0%U%!%$%k$K<}=8$7$h$&$H$7$F$$$k$H$-$K$O!"(B
$B3F%P!<%A%c%k%[%9%H$K$D$$$FE}7WE*$J2r@O$r<B9T$9$k$?$a$K8e$G%m%0%U%!%$%k$r(B
$BJ,3d$7$?$/$J$k$+$b$7$l$^$;$s!#$3$l$O0J2<$N$h$&$K$7$F<B8=$G$-$^$9!#(B</p>
<p>複数のバーチャルホストのログを同じログファイルに収集しようとしているときには、
各バーチャルホストについて統計的な解析を実行するために後でログファイルを
分割したくなるかもしれません。これは以下のようにして実現できます。</p>
<p>$B$^$:!"%P!<%A%c%k%[%9%H$N>pJs$r%m%0$N%(%s%H%j$KDI2C$9$kI,MW$,$"$j$^$9!#(B
$B$3$l$O(B <directive module="mod_log_config">LogFormat</directive>
$B%G%#%l%/%F%#%V$N(B <code>%v</code> $BJQ?t$r;H$&$3$H$G$G$-$^$9!#(B
$B$3$l$r%m%0$N%U%)!<%^%C%HJ8;zNs$N@hF,$KDI2C$7$^$9(B:</p>
<p>まず、バーチャルホストの情報をログのエントリに追加する必要があります。
これは <directive module="mod_log_config">LogFormat</directive>
ディレクティブの <code>%v</code> 変数を使うことでできます。
これをログのフォーマット文字列の先頭に追加します:</p>
<example>
LogFormat "%v %h %l %u %t \"%r\" %&gt;s %b" vhost<br />
CustomLog logs/multiple_vhost_log vhost
</example>
<p>$B$3$l$O(B common log format $B$N%m%0$r:n@.$7$^$9$,!"$=$l$>$l$N9T$N@hF,$K(B
$B@55,2=$5$l$?%P!<%A%c%k%[%9%H$NL>A0(B
<p>これは common log format のログを作成しますが、それぞれの行の先頭に
正規化されたバーチャルホストの名前
(<directive module="core">ServerName</directive>
$B%G%#%l%/%F%#%V$K=q$+$l$F$$$k$b$N(B) $B$,IU2C$5$l$^$9!#(B
($B%m%0%U%!%$%k$N%+%9%?%^%$%:$N>\:Y$K$D$$$F$O(B <a
href="../mod/mod_log_config.html#formats">Custom Log Formats</a> $B$r(B
$BFI$s$G$/$@$5$$!#(B)</p>
ディレクティブに書かれているもの) が付加されます。
(ログファイルのカスタマイズの詳細については <a
href="../mod/mod_log_config.html#formats">Custom Log Formats</a>
読んでください。)</p>
<p>$B%m%0%U%!%$%k$r3FItJ,(B ($B%P!<%A%c%k%[%9%HKh$K(B 1 $B%U%!%$%k(B) $B$KJ,$1$?$$$H$-$O!"(B
<p>ログファイルを各部分 (バーチャルホスト毎に 1 ファイル) に分けたいときは、
<code><a href="../programs/other.html">split-logfile</a></code>
$B$r;H$C$F9T$J$&$3$H$,$G$-$^$9!#%W%m%0%i%`$O(B Apache $BG[I[$N(B
<code>support</code> $B%G%#%l%/%H%j$K$"$j$^$9!#(B</p>
を使って行なうことができます。プログラムは Apache 配布の
<code>support</code> ディレクトリにあります。</p>
<p>$B0J2<$N$h$&$J%3%^%s%I$G$3$N%W%m%0%i%`$r<B9T$7$^$9(B:</p>
<p>以下のようなコマンドでこのプログラムを実行します:</p>
<example>
split-logfile &lt; /logs/multiple_vhost_log
</example>
<p>$B$3$N%W%m%0%i%`$O%P!<%A%c%k%[%9%H$N%m%0%U%!%$%k$NL>A0$H$H$b$K<B9T$5$l!"(B
$B%m%0%U%!%$%k$K8=$l$k$=$l$>$l$N%P!<%A%c%k%[%9%HKh$K0l$D$N%U%!%$%k$r:n@.$7$^$9!#(B
$B$=$l$>$l$N%U%!%$%k$O(B <code>$B%[%9%HL>(B.log</code> $B$H$$$&L>A0$K$J$j$^$9!#(B</p>
<p>このプログラムはバーチャルホストのログファイルの名前とともに実行され、
ログファイルに現れるそれぞれのバーチャルホスト毎に一つのファイルを作成します。
それぞれのファイルは <code>ホスト名.log</code> という名前になります。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990 -->
@@ -23,55 +23,55 @@
<manualpage metafile="index.xml.meta">
<parentdocument href="../"/>
<title>Apache $B%P!<%A%c%k%[%9%H@bL@=q(B</title>
<title>Apache バーチャルホスト説明書</title>
<summary>
<p><cite>$B%P!<%A%c%k%[%9%H(B</cite>$B$H$$$&MQ8l$O!"(B1 $BBf$N%^%7%s>e$G(B
(<code>www.company1.com</code> and <code>www.company2.com</code> $B$N$h$&$J(B)
$BFs$D0J>e$N%&%'%V%5%$%H$r07$&1?MQJ}K!$N$3$H$r;X$7$^$9!#(B
$B%P!<%A%c%k%[%9%H$K$O!"3F%&%'%V%5%$%H$K0c$&(B IP $B%"%I%l%9$,$"$k(B
$B!V(B<a href="ip-based.html">IP $B%Y!<%9(B</a>$B!W$H!"$=$l$>$l$N(B IP $B%"%I%l%9$K(B
$BJ#?t$NL>A0$,$"$k!V(B<a href="name-based.html">$BL>A0%Y!<%9(B</a>$B!W$H$,$"$j$^$9!#(B
$BJ#?t$N%5%$%H$,J*M}E*$KF1$8%5!<%P$G07$o$l$F$$$k!"$H$$$&$3$H$O%(%s%I%f!<%6$K$O(B
$BL@$i$+$G$O$"$j$^$;$s!#(B</p>
<p><cite>バーチャルホスト</cite>という用語は、1 台のマシン上で
(<code>www.company1.com</code> and <code>www.company2.com</code> のような)
二つ以上のウェブサイトを扱う運用方法のことを指します。
バーチャルホストには、各ウェブサイトに違う IP アドレスがある
<a href="ip-based.html">IP ベース</a>」と、それぞれの IP アドレスに
複数の名前がある「<a href="name-based.html">名前ベース</a>」とがあります。
複数のサイトが物理的に同じサーバで扱われている、ということはエンドユーザには
明らかではありません。</p>
<p>Apache $B$O!"FC$K<j$rF~$l$J$$>uBV$G(B IP $B%Y!<%9$N%P!<%A%c%k%[%9%H(B
$B$r%5%]!<%H$7$?:G=i$N%5!<%P$N0l$D$G$9!#%P!<%8%g%s(B 1.1 $B0J9_$N(B Apache
$B$G$O!"(BIP $B%Y!<%9$H%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H$NN>J}$r%5%]!<%H(B
$B$7$F$$$^$9!#%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H$O!"(B<em>$B%[%9%H%Y!<%9(B</em>$B$"$k$$$O(B
<em>$BHs(B IP $B%Y!<%9(B</em>$B$N%P!<%A%c%k%[%9%H$H8F$P$l$k$3$H$b$"$j$^$9!#(B</p>
<p>Apache は、特に手を入れない状態で IP ベースのバーチャルホスト
をサポートした最初のサーバの一つです。バージョン 1.1 以降の Apache
では、IP ベースとネームベースのバーチャルホストの両方をサポート
しています。ネームベースのバーチャルホストは、<em>ホストベース</em>あるいは
<em>非 IP ベース</em>のバーチャルホストと呼ばれることもあります。</p>
<p>$B0J2<$N%Z!<%8$G$O!"(BApache $B%P!<%8%g%s(B 1.3
$B0J9_$G$N%P!<%A%c%k%[%9%H$N%5%]!<%H$K$D$$$F$N>\:Y$r@bL@$7$^$9!#(B</p>
<p>以下のページでは、Apache バージョン 1.3
以降でのバーチャルホストのサポートについての詳細を説明します。</p>
</summary>
<seealso><module>mod_vhost_alias</module></seealso>
<seealso><a href="name-based.html">$B%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H(B</a></seealso>
<seealso><a href="ip-based.html">IP $B%Y!<%9$N%P!<%A%c%k%[%9%H(B</a></seealso>
<seealso><a href="examples.html">$B%P!<%A%c%k%[%9%H$N0lHLE*$J@_DjNc(B</a></seealso>
<seealso><a href="fd-limits.html">$B%U%!%$%k5-=R;R$N8B3&(B</a></seealso>
<seealso><a href="mass.html">$BBgNL$N%P!<%A%c%k%[%9%H$N@_Dj(B</a></seealso>
<seealso><a href="details.html">$B%P!<%A%c%k%[%9%H$N%^%C%A%s%0$K$D$$$F$N>\:Y(B</a></seealso>
<seealso><a href="name-based.html">ネームベースのバーチャルホスト</a></seealso>
<seealso><a href="ip-based.html">IP ベースのバーチャルホスト</a></seealso>
<seealso><a href="examples.html">バーチャルホストの一般的な設定例</a></seealso>
<seealso><a href="fd-limits.html">ファイル記述子の限界</a></seealso>
<seealso><a href="mass.html">大量のバーチャルホストの設定</a></seealso>
<seealso><a href="details.html">バーチャルホストのマッチングについての詳細</a></seealso>
<section id="support"><title>$B%P!<%A%c%k%[%9%H$N%5%]!<%H(B</title>
<section id="support"><title>バーチャルホストのサポート</title>
<ul>
<li><a href="name-based.html">$B%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H(B</a>
($B0l$D$N(B IP $B%"%I%l%9$KJ#?t$N%&%'%V%5%$%H(B)</li>
<li><a href="ip-based.html">IP $B%Y!<%9$N%P!<%A%c%k%[%9%H(B</a>
($B3F%&%'%V%5%$%H$K(B IP $B%"%I%l%9(B)</li>
<li><a href="examples.html">$B%P!<%A%c%k%[%9%H$N0lHLE*$J@_DjNc(B</a></li>
<li><a href="fd-limits.html">$B%U%!%$%k5-=R;R$N8B3&(B</a>
($B$^$?$O!"(B<em>$BB?2a$.$k%m%0%U%!%$%k(B</em>)</li>
<li><a href="mass.html">$BBgNL$N%P!<%A%c%k%[%9%H$N@_Dj(B</a></li>
<li><a href="details.html">$B%P!<%A%c%k%[%9%H$N%^%C%A%s%0$K$D$$$F$N>\:Y(B</a></li>
<li><a href="name-based.html">ネームベースのバーチャルホスト</a>
(一つの IP アドレスに複数のウェブサイト)</li>
<li><a href="ip-based.html">IP ベースのバーチャルホスト</a>
(各ウェブサイトに IP アドレス)</li>
<li><a href="examples.html">バーチャルホストの一般的な設定例</a></li>
<li><a href="fd-limits.html">ファイル記述子の限界</a>
(または、<em>多過ぎるログファイル</em>)</li>
<li><a href="mass.html">大量のバーチャルホストの設定</a></li>
<li><a href="details.html">バーチャルホストのマッチングについての詳細</a></li>
</ul>
</section>
<section id="directives"><title>$B@_Dj%G%#%l%/%F%#%V(B</title>
<section id="directives"><title>設定ディレクティブ</title>
<ul>
<li><directive type="section"
@@ -82,19 +82,19 @@
<li><directive module="core">ServerPath</directive></li>
</ul>
<p>$B%P!<%A%c%k%[%9%H$N@_Dj$N%G%P%C%0$r$9$k$K$O(B
Apache $B$N%3%^%s%I%i%$%s%9%$%C%A(B <code>-S</code> $B$,JXMx$G$9!#(B
$B$D$^$j!"0J2<$N%3%^%s%I$rF~NO$7$^$9(B:</p>
<p>バーチャルホストの設定のデバッグをするには
Apache のコマンドラインスイッチ <code>-S</code> が便利です。
つまり、以下のコマンドを入力します:</p>
<example>
/usr/local/apache2/bin/httpd -S
</example>
<p>$B$3$N%3%^%s%I$O(B Apache $B$,@_Dj%U%!%$%k$r$I$&2r@O$7$?$+$K$D$$$F=PNO$7$^$9!#(B
IP $B%"%I%l%9$H%5!<%PL>$rCm0U?<$/D4$Y$l$P!"(B
$B@_Dj$N4V0c$$$r8+$D$1$k=u$1$K$J$k$G$7$g$&!#(B
($BB>$N%3%^%s%I%i%$%s$N%*%W%7%g%s$O(B <program>httpd</program>
$B%W%m%0%i%`$N@bL@J8=q$r8+$F$/$@$5$$(B)</p>
<p>このコマンドは Apache が設定ファイルをどう解析したかについて出力します。
IP アドレスとサーバ名を注意深く調べれば、
設定の間違いを見つける助けになるでしょう。
(他のコマンドラインのオプションは <program>httpd</program>
プログラムの説明文書を見てください)</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 659902 -->
@@ -21,96 +21,96 @@
-->
<manualpage metafile="ip-based.xml.meta">
<parentdocument href="./">$B%P!<%A%c%k%[%9%H(B</parentdocument>
<title>Apache $B$N(B IP $B%Y!<%9$N%P!<%A%c%k%[%9%H%5%]!<%H(B</title>
<parentdocument href="./">バーチャルホスト</parentdocument>
<title>Apache の IP ベースのバーチャルホストサポート</title>
<seealso>
<a href="name-based.html">$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H%5%]!<%H(B</a>
<a href="name-based.html">名前ベースのバーチャルホストサポート</a>
</seealso>
<section id="requirements"><title>$B%7%9%F%`MW7o(B</title>
<section id="requirements"><title>システム要件</title>
<p><cite>IP $B%Y!<%9(B</cite> $B$H$$$&L>A0$,<($9$h$&$K!"%5!<%P$K$O(B
<strong>IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$=$l$>$l$K$D$-!"JL!9$N(B IP $B%"%I%l%9$,(B
$BI,MW$G$9(B</strong>$B!#J#?t$NJ*M}%3%M%/%7%g%s$r;}$C$F$$$k%^%7%s$rMQ0U$9$k$+!"(B
$B:G6a$N%*%Z%l!<%F%#%s%0%7%9%F%`$G%5%]!<%H$5$l$F$$$k%P!<%A%c%k(B
$B%$%s%?%U%'!<%9(B ($B>\:Y$O%7%9%F%`$N@bL@=q$rFI$s$G$/$@$5$$!#$?$$$F$$$O(B
"ip $B%(%$%j%"%9(B" $B$H8F$P$l$F$$$F!"@_Dj$K$OIaDL(B "ifconfig" $B%3%^%s%I$r(B
$B;H$$$^$9(B) $B$r;H$&$+$G<B8=$G$-$^$9!#(B</p>
<p><cite>IP ベース</cite> という名前が示すように、サーバには
<strong>IP ベースのバーチャルホストそれぞれにつき、別々の IP アドレスが
必要です</strong>。複数の物理コネクションを持っているマシンを用意するか、
最近のオペレーティングシステムでサポートされているバーチャル
インタフェース (詳細はシステムの説明書を読んでください。たいていは
"ip エイリアス" と呼ばれていて、設定には普通 "ifconfig" コマンドを
使います) を使うかで実現できます。</p>
</section>
<section id="howto"><title>Apache $B$N@_DjJ}K!(B</title>
<section id="howto"><title>Apache の設定方法</title>
<p>$BJ#?t$N%[%9%H$r%5%]!<%H$9$k$h$&$K(B Apache $B$r@_Dj$9$kJ}K!$O(B
$BFsDL$j$"$j$^$9!#JL$N(B <program>httpd</program> $B%G!<%b%s$r3F%[%9%HKh$K<B9T$9$k$+!"(B
$B$9$Y$F$N%P!<%A%c%k%[%9%H$r%5%]!<%H$9$k%G!<%b%s$r0l$D<B9T$9$k$+$G$9!#(B</p>
<p>複数のホストをサポートするように Apache を設定する方法は
二通りあります。別の <program>httpd</program> デーモンを各ホスト毎に実行するか、
すべてのバーチャルホストをサポートするデーモンを一つ実行するかです。</p>
<p>$B0J2<$N$H$-$K$OJ#?t$N%G!<%b%s$r;H$&$HNI$$$G$7$g$&(B:</p>
<p>以下のときには複数のデーモンを使うと良いでしょう:</p>
<ul>
<li>$B2q<R(B1 $B$O%&%'%V7PM30J30$G$O2q<R(B2 $B$+$i$O%G!<%?$rFI$^$l$?$/$J$$!"(B
$B$H$$$C$?%;%-%e%j%F%#$NJ,N%$NLdBj$,$"$k$H$-!#$3$N>l9g!"$=$l$>$l(B
<li>会社1 はウェブ経由以外では会社2 からはデータを読まれたくない、
といったセキュリティの分離の問題があるとき。この場合、それぞれ
<directive
module="mpm_common">User</directive>, <directive
module="mpm_common">Group</directive>, <directive
module="mpm_common">Listen</directive>, <directive
module="core">ServerRoot</directive> $B$N@_Dj$,0c$&Fs$D$N%G!<%b%s$r(B
$B<B9T$9$kI,MW$,$"$j$^$9!#(B</li>
module="core">ServerRoot</directive> の設定が違う二つのデーモンを
実行する必要があります。</li>
<li>$B%^%7%s$N$9$Y$F$N(B IP $B%(%$%j%"%9$r(B listen $B$9$k$@$1$N(B
$B%a%b%j$H%U%!%$%k5-=R;R$NM>M5$,$"$k$H$-!#(B<directive
module="mpm_common">Listen</directive> $B$O!V%o%$%k%I%+!<%I!W(B
$B%"%I%l%9$+!"FCDj$N%"%I%l%9$N$_$r(B listen $B$9$k$3$H$,$G$-$^$9!#(B
$B$G$9$+$i!"2?$i$+$NM}M3$GFCDj$N%"%I%l%9$r(B listen $B$7$J$1$P$J$i$J$$(B
$B$H$-$O!"$=$NFCDj$N%"%I%l%9$r$9$Y$F(B listen $B$9$kI,MW$,$"$j$^$9!#(B
($B$?$@$7!"0l$D$N(B <program>httpd</program> $B$,(B N-1 $B8D$N%"%I%l%9$r(B listen $B$7!"(B
$BJL$N(B <program>httpd</program> $B$,;D$j$N%"%I%l%9$r(B listen $B$9$k$H$$$C$?$3$H$O2DG=$G$9!#(B)</li>
<li>マシンのすべての IP エイリアスを listen するだけの
メモリとファイル記述子の余裕があるとき。<directive
module="mpm_common">Listen</directive> は「ワイルドカード」
アドレスか、特定のアドレスのみを listen することができます。
ですから、何らかの理由で特定のアドレスを listen しなけばならない
ときは、その特定のアドレスをすべて listen する必要があります。
(ただし、一つの <program>httpd</program> が N-1 個のアドレスを listen し、
別の <program>httpd</program> が残りのアドレスを listen するといったことは可能です。)</li>
</ul>
<p>$B0J2<$N$H$-$K$OC1FH$N%G!<%b%s$r;H$&$HNI$$$G$7$g$&(B:</p>
<p>以下のときには単独のデーモンを使うと良いでしょう:</p>
<ul>
<li>$B%P!<%A%c%k%[%9%H4V$G$N(B httpd $B$N@_Dj$r6&M-$7$F$b$h$$$H$-!#(B</li>
<li>バーチャルホスト間での httpd の設定を共有してもよいとき。</li>
<li>$B%^%7%s$,B?$/$N%j%/%(%9%H$r07$&$?$a!"JL%G!<%b%s$r<B9T$9$k$3$H$K$h$k(B
$B@-G=$NDc2<$N1F6A$,Cx$7$$$H$-!#(B</li>
<li>マシンが多くのリクエストを扱うため、別デーモンを実行することによる
性能の低下の影響が著しいとき。</li>
</ul>
</section>
<section id="multiple"><title>$BJ#?t%G!<%b%s$N@_Dj(B</title>
<section id="multiple"><title>複数デーモンの設定</title>
<p>$B3F%P!<%A%c%k%[%9%H$KBP$7$FJL$N(B <program>httpd</program> $B$N%$%s%9%H!<%k$r9T$J$$$^$9!#(B
$B@_Dj%U%!%$%kCf$N(B <directive module="mpm_common">Listen</directive>
$B%G%#%l%/%F%#%V$r;H$C$F!"(B
$B3F%$%s%9%H!<%k$G%G!<%b%s$,07$&(B IP $B%"%I%l%9(B ($B%P!<%A%c%k%[%9%H(B)
$B$rA*Br$7$^$9!#Nc$($P(B</p>
<p>各バーチャルホストに対して別の <program>httpd</program> のインストールを行ないます。
設定ファイル中の <directive module="mpm_common">Listen</directive>
ディレクティブを使って、
各インストールでデーモンが扱う IP アドレス (バーチャルホスト)
を選択します。例えば</p>
<example>
Listen www.smallco.com:80
</example>
<p>$B$3$3$G!"%[%9%HL>$NBe$o$j$K(B IP $B%"%I%l%9$r;H$&J}$,?d>)$5$l$F$$$k$3$H$K(B
$BCm0U$7$F$*$$$F$/$@$5$$(B
(<a href="../dns-caveats.html">DNS $B$NCm0U;v9`(B</a> $B;2>H(B)$B!#(B</p>
<p>ここで、ホスト名の代わりに IP アドレスを使う方が推奨されていることに
注意しておいてください
(<a href="../dns-caveats.html">DNS の注意事項</a> 参照)。</p>
</section>
<section id="single"><title>$BJ#?t$N%P!<%A%c%k%[%9%H$N@_Dj$r$7$?(B
$B%G!<%b%s$r0l$D@_Dj$9$k(B</title>
<section id="single"><title>複数のバーチャルホストの設定をした
デーモンを一つ設定する</title>
<p>$B$3$N>l9g$O!"0l$D$N(B <program>httpd</program> $B$,<g%5!<%P$H$9$Y$F$N%P!<%A%c%k%[%9%H$N%j%/%(%9%H$r(B
$B=hM}$7$^$9!#@_Dj%U%!%$%k$N(B <directive
module="core">VirtualHost</directive> $B%G%#%l%/%F%#%V$r;H$C$F!"(B
<p>この場合は、一つの <program>httpd</program> が主サーバとすべてのバーチャルホストのリクエストを
処理します。設定ファイルの <directive
module="core">VirtualHost</directive> ディレクティブを使って、
<directive
module="core">ServerAdmin</directive>, <directive
module="core">ServerName</directive>, <directive
module="core">DocumentRoot</directive>, <directive
module="core">ErrorLog</directive>, <directive
module="mod_log_config">TransferLog</directive>
$B$d(B <directive module="mod_log_config">CustomLog</directive>
$B@_Dj%G%#%l%/%F%#%V$NCM$,3F%[%9%HKh$K0[$J$kCM$K@_Dj$5$l$k$h$&$K$7$^$9!#(B
$BNc$($P(B</p>
<directive module="mod_log_config">CustomLog</directive>
設定ディレクティブの値が各ホスト毎に異なる値に設定されるようにします。
例えば</p>
<example>
&lt;VirtualHost www.smallco.com&gt;<br />
@@ -130,29 +130,29 @@
&lt;/VirtualHost&gt;
</example>
<p>$B$3$3$G!"%[%9%HL>$NBe$o$j$K(B IP $B%"%I%l%9$r;H$&J}$,?d>)$5$l$F$$$k$3$H$K(B
$BCm0U$7$F$*$$$F$/$@$5$$(B
(<a href="../dns-caveats.html">DNS $B$NCm0U;v9`(B</a> $B;2>H(B)$B!#(B</p>
<p>ここで、ホスト名の代わりに IP アドレスを使う方が推奨されていることに
注意しておいてください
(<a href="../dns-caveats.html">DNS の注意事項</a> 参照)。</p>
<p>$B%W%m%;%9@8@.$r@)8f$9$k%G%#%l%/%F%#%V$d$=$NB>$N$$$/$D$+$N%G%#%l%/%F%#%V$r(B
$B=|$$$F!"$[$\(B<strong>$B$9$Y$F(B</strong>$B$N@_Dj%G%#%l%/%F%#%V$r(B VirtualHost
$B%G%#%l%/%F%#%V$NCf$K=q$/$3$H$,$G$-$^$9!#%G%#%l%/%F%#%V$,(B VirtualHost
$B%G%#%l%/%F%#%V$G;HMQ$G$-$k$+$I$&$+$O(B <a href="../mod/directives.html"
>$B%G%#%l%/%F%#%V:w0z(B</a>$B$r;H$C$F(B<a
href="../mod/directive-dict.html#Context">$B%3%s%F%-%9%H(B</a>$B$N(B
$BMs$rD4$Y$F$/$@$5$$!#(B</p>
<p>プロセス生成を制御するディレクティブやその他のいくつかのディレクティブを
除いて、ほぼ<strong>すべて</strong>の設定ディレクティブを VirtualHost
ディレクティブの中に書くことができます。ディレクティブが VirtualHost
ディレクティブで使用できるかどうかは <a href="../mod/directives.html"
>ディレクティブ索引</a>を使って<a
href="../mod/directive-dict.html#Context">コンテキスト</a>の
欄を調べてください。</p>
<p><a href="../suexec.html">suEXEC$B%i%C%Q!<(B</a>$B$r;H$C$F$$$k>l9g$O!"(B
<p><a href="../suexec.html">suEXECラッパー</a>を使っている場合は、
<directive module="mod_suexec">SuexecUserGroup</directive>
$B%G%#%l%/%F%#%V$r(B VirtualHost
$B%G%#%l%/%F%#%V$NCf$G;HMQ$9$k$3$H$,$G$-$^$9!#(B</p>
ディレクティブを VirtualHost
ディレクティブの中で使用することができます。</p>
<p><em>$B%;%-%e%j%F%#(B:</em> $B%m%0%U%!%$%k$r=q$/>l=j$r;XDj$9$k$H$-$O!"(B
Apache $B$r5/F0$7$?%f!<%60J30$,$=$N%G%#%l%/%H%j$K=q$-9~$_8"8B$r(B
$B;}$C$F$$$k>l9g$K%;%-%e%j%F%#>e$N4m81$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#(B
$B>\:Y$O(B<a
href="../misc/security_tips.html">$B%;%-%e%j%F%#$N$3$D(B</a>$B%I%-%e%a%s%H$r(B
$B;2>H$7$F$/$@$5$$!#(B</p>
<p><em>セキュリティ:</em> ログファイルを書く場所を指定するときは、
Apache を起動したユーザ以外がそのディレクトリに書き込み権限を
持っている場合にセキュリティ上の危険があることに注意してください。
詳細は<a
href="../misc/security_tips.html">セキュリティのこつ</a>ドキュメントを
参照してください。</p>
</section>
</manualpage>

View File

@@ -1,4 +1,4 @@
<?xml version='1.0' encoding='iso-2022-jp' ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 420990:659902 (outdated) -->
@@ -21,59 +21,59 @@
-->
<manualpage metafile="name-based.xml.meta">
<parentdocument href="./">$B%P!<%A%c%k%[%9%H(B</parentdocument>
<title>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H(B</title>
<parentdocument href="./">バーチャルホスト</parentdocument>
<title>名前ベースのバーチャルホスト</title>
<summary>
<p>$B$3$NJ8=q$G$OL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$r$I$s$J$H$-!"(B
$B$I$&$d$C$F;H$&$+$r@bL@$7$^$9!#(B</p>
<p>この文書では名前ベースのバーチャルホストをどんなとき、
どうやって使うかを説明します。</p>
</summary>
<seealso><a href="ip-based.html">$B%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H(B</a></seealso>
<seealso><a href="details.html">$B%P!<%A%c%k%[%9%H$N%^%C%A%s%0$K$D$$$F$N>\:Y(B</a></seealso>
<seealso><a href="mass.html">$BBgNL$N%P!<%A%c%k%[%9%H$NF0E*$J@_Dj(B</a></seealso>
<seealso><a href="examples.html">$B%P!<%A%c%k%[%9%H$N0lHLE*$J@_DjNc(B</a></seealso>
<seealso><a href="examples.html#serverpath">ServerPath $B@_DjNc(B</a></seealso>
<seealso><a href="ip-based.html">ネームベースのバーチャルホスト</a></seealso>
<seealso><a href="details.html">バーチャルホストのマッチングについての詳細</a></seealso>
<seealso><a href="mass.html">大量のバーチャルホストの動的な設定</a></seealso>
<seealso><a href="examples.html">バーチャルホストの一般的な設定例</a></seealso>
<seealso><a href="examples.html#serverpath">ServerPath 設定例</a></seealso>
<section id="namevip"><title>$BL>A0%Y!<%9$H(B IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$NHf3S(B</title>
<section id="namevip"><title>名前ベースと IP ベースのバーチャルホストの比較</title>
<p>IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$G$O!"1~Ez$9$k(B
$B%P!<%A%c%k%[%9%H$X$N%3%M%/%7%g%s$r7hDj$9$k$?$a$K(B IP
$B%"%I%l%9$r;HMQ$7$^$9!#$G$9$+$i!"$=$l$>$l$N%[%9%H$K8D!9$K(B IP
$B%"%I%l%9$,I,MW$K$J$j$^$9!#$3$l$KBP$7$FL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$G$O!"(B
$B%/%i%$%"%s%H$,(B HTTP $B%X%C%@$N0lIt$H$7$F%[%9%HL>$r9p$2$k!"(B
$B$H$$$&$3$H$K0MB8$7$^$9!#$3$N5;=Q$GF10l(B IP
$B%"%I%l%9$r0[$J$kB??t$N%[%9%H$G6&M-$7$F$$$^$9!#(B</p>
<p>IP ベースのバーチャルホストでは、応答する
バーチャルホストへのコネクションを決定するために IP
アドレスを使用します。ですから、それぞれのホストに個々に IP
アドレスが必要になります。これに対して名前ベースのバーチャルホストでは、
クライアントが HTTP ヘッダの一部としてホスト名を告げる、
ということに依存します。この技術で同一 IP
アドレスを異なる多数のホストで共有しています。</p>
<p>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$ODL>oC1=c$G!"$=$l$>$l$N%[%9%HL>$H(B
$B$=$l$KBP1~$9$k@53N$J(B IP $B%"%I%l%9$r(B DNS $B$G@_Dj$7!"0[$J$k(B
$B%[%9%HL>$r6hJL$9$k$h$&$K(B Apache HTTP $B%5!<%P$r@_Dj$9$k$@$1$G$9!#(B
$B$5$i$K!"L>A0%Y!<%9$N%P!<%A%c%k%[%9%H$OITB-$9$k(B IP
$B%"%I%l%9$N<{MW$r4KOB$7$^$9!#$7$?$,$C$F!"(BIP $B%Y!<%9$N%P!<%A%c%k%[%9%H$r(B
$BA*Br$9$Y$-FCDj$NM}M3$,$J$1$l$PL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$r;H$&$Y$-$G$9!#(B
IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$r;HMQ$9$k$3$H$r9MN8$9$kM}M3$H$7$F!"(B</p>
<p>名前ベースのバーチャルホストは通常単純で、それぞれのホスト名と
それに対応する正確な IP アドレスを DNS で設定し、異なる
ホスト名を区別するように Apache HTTP サーバを設定するだけです。
さらに、名前ベースのバーチャルホストは不足する IP
アドレスの需要を緩和します。したがって、IP ベースのバーチャルホストを
選択すべき特定の理由がなければ名前ベースのバーチャルホストを使うべきです。
IP ベースのバーチャルホストを使用することを考慮する理由として、</p>
<ul>
<li>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$KBP1~$7$F$$$J$$8E$$%/%i%$%"%s%H$,$"$k(B
$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$,F/$/$?$a$K$O!"%/%i%$%"%s%H$O(B
HTTP $B%[%9%H%X%C%@$rAw$C$F$3$J$1$l$P$J$j$^$;$s!#(B
$B$3$l$O(B HTTP/1.1 $B$N;EMM$GMW5a$5$l$F$$$F!"$9$Y$F$N8=BeE*$J(B
HTTP/1.0 $B%V%i%&%6$G$b3HD%$H$7$F<BAu$5$l$F$$$^$9!#(B
$B$H$F$b8E$$%/%i%$%"%s%H$r%5%]!<%H$7$D$D!"L>A0%Y!<%9$N(B
$B%P!<%A%c%k%[%9%H$r9T$$$?$$>l9g$O!"$3$NJ8=q$N:G8e$NJ}$K(B
$B=q$+$l$F$$$k2r7h:v$K$J$k$+$b$7$l$J$$J}K!$r8+$F$/$@$5$$!#(B</li>
<li>名前ベースのバーチャルホストに対応していない古いクライアントがある
名前ベースのバーチャルホストが働くためには、クライアントは
HTTP ホストヘッダを送ってこなければなりません。
これは HTTP/1.1 の仕様で要求されていて、すべての現代的な
HTTP/1.0 ブラウザでも拡張として実装されています。
とても古いクライアントをサポートしつつ、名前ベースの
バーチャルホストを行いたい場合は、この文書の最後の方に
書かれている解決策になるかもしれない方法を見てください。</li>
<li>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$O(B SSL $B%W%m%H%3%k$NFCD'$K$h$j!"(B
SSL $B%;%-%e%"%5!<%P$K$O;H$($^$;$s!#(B</li>
<li>名前ベースのバーチャルホストは SSL プロトコルの特徴により、
SSL セキュアサーバには使えません。</li>
<li>$B%*%Z%l!<%F%#%s%0%7%9%F%`$d%M%C%H%o!<%/AuCV$N$J$+$K$O!"(B
$BJL$N(B IP $B%"%I%l%9>e$G$J$$>l9g!"J#?t$N%[%9%H$rJL07$$$G$-$J$$$h$&$J(B
$BBS0h4IM}$NJ}K!$r<BAu$7$F$$$k$b$N$,$"$j$^$9!#(B</li>
<li>オペレーティングシステムやネットワーク装置のなかには、
別の IP アドレス上でない場合、複数のホストを別扱いできないような
帯域管理の方法を実装しているものがあります。</li>
</ul>
</section>
<section id="using"><title>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$rMxMQ$9$k(B</title>
<section id="using"><title>名前ベースのバーチャルホストを利用する</title>
<related>
<modulelist>
@@ -91,53 +91,53 @@
</directivelist>
</related>
<p>$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$r;H$&$K$O!"$=$N%[%9%H$X$N(B
$B%j%/%(%9%H$r<u$1IU$1$k%5!<%P$N(B IP $B%"%I%l%9(B ($B$b$7$+$7$?$i%]!<%H$b(B)
$B$r;XDj$9$kI,MW$,$"$j$^$9!#(B
$B$3$l$O(B <directive module="core">NameVirtualHost</directive>
$B%G%#%l%/%F%#%V$G@_Dj$7$^$9!#DL>o!"(B<directive
module="core">NameVirtualHost</directive> $B$G(B
<code>*</code> $B$NB0@-$r;H$C$F%5!<%P$NA4$F$N(B IP $B%"%I%l%9$r;H$$$^$9!#(B
($BNc$($P(B SSL $B$N;HMQ$J$I$G(B) $BJ#?t$N%]!<%H$r;H$&$3$H$r7W2h$7$F$$$k$N$G$"$l$P!"(B
$B0z?t$K(B <code>*:80</code> $B$N$h$&$K%]!<%H$b4^$a$k$h$&$K$7$F$/$@$5$$!#(B
<directive module="core">NameVirtualHost</directive> $B%G%#%l%/%F%#%V$G(B
IP $B%"%I%l%9$r=q$$$F$b!"(B
$B<+F0E*$K%5!<%P$,$=$N(B IP $B%"%I%l%9$r%j%C%9%s$9$k$H$$$&$3$H$O$J$$$3$H$K(B
$BCm0U$7$F$/$@$5$$!#>\:Y$O!V(B<a href="../bind.html">Apache $B$N;H$&%"%I%l%9$H(B
$B%]!<%H$r@_Dj$9$k(B</a>$B!W$rFI$s$G$/$@$5$$!#$5$i$K!"$3$3$G;XDj$5$l$?(B
IP $B%"%I%l%9$OA4$F%5!<%P$N%M%C%H%o!<%/%$%s%?!<%U%'!<%9$H4XO"IU$1$i$l$F(B
$B$$$J$1$l$P$J$j$^$;$s!#(B</p>
<p>名前ベースのバーチャルホストを使うには、そのホストへの
リクエストを受け付けるサーバの IP アドレス (もしかしたらポートも)
を指定する必要があります。
これは <directive module="core">NameVirtualHost</directive>
ディレクティブで設定します。通常、<directive
module="core">NameVirtualHost</directive>
<code>*</code> の属性を使ってサーバの全ての IP アドレスを使います。
(例えば SSL の使用などで) 複数のポートを使うことを計画しているのであれば、
引数に <code>*:80</code> のようにポートも含めるようにしてください。
<directive module="core">NameVirtualHost</directive> ディレクティブで
IP アドレスを書いても、
自動的にサーバがその IP アドレスをリッスンするということはないことに
注意してください。詳細は「<a href="../bind.html">Apache の使うアドレスと
ポートを設定する</a>」を読んでください。さらに、ここで指定された
IP アドレスは全てサーバのネットワークインターフェースと関連付けられて
いなければなりません。</p>
<p>$B<!$O!"07$&%[%9%H$=$l$>$l$KBP$7$F(B <directive type="section"
module="core">VirtualHost</directive> $B%V%m%C%/$r(B
$B:n@.$7$F$/$@$5$$!#(B<directive module="core" type="section">VirtualHost</directive>
$B%G%#%l%/%F%#%V$N0z?t$O(B <directive module="core">NameVirtualHost</directive>
$B%G%#%l%/%F%#%V$N0z?t$HF1$8$K$7$F$/$@$5$$(B ($B$9$J$o$A!"(BIP $B%"%I%l%9$+!"A4$F$N%"%I%l%9$r0UL#$9$k(B
<code>*</code>)$B!#$=$l$>$l$N(B <directive module="core" type="section">VirtualHost</directive>
$B%G%#%l%/%F%#%V$NCf$K$O!":GDc8B!"$I$N%[%9%H$,07$o$l$k$+$r<($9(B <directive
module="core">ServerName</directive> $B%G%#%l%/%F%#%V$H!"(B
$B$=$N%[%9%HMQ$N%3%s%F%s%D$,%U%!%$%k%7%9%F%`>e$N$I$3$K$"$k$+$r<($9(B
<directive module="core">DocumentRoot</directive> $B%G%#%l%/%F%#%V$r(B
$B=q$/I,MW$,$"$j$^$9!#(B</p>
<p>次は、扱うホストそれぞれに対して <directive type="section"
module="core">VirtualHost</directive> ブロックを
作成してください。<directive module="core" type="section">VirtualHost</directive>
ディレクティブの引数は <directive module="core">NameVirtualHost</directive>
ディレクティブの引数と同じにしてください (すなわち、IP アドレスか、全てのアドレスを意味する
<code>*</code>)。それぞれの <directive module="core" type="section">VirtualHost</directive>
ディレクティブの中には、最低限、どのホストが扱われるかを示す <directive
module="core">ServerName</directive> ディレクティブと、
そのホスト用のコンテンツがファイルシステム上のどこにあるかを示す
<directive module="core">DocumentRoot</directive> ディレクティブを
書く必要があります。</p>
<note><title>$B%a%$%s%[%9%H$O$J$/$J$j$^$9(B</title>
<p>$B4{$K$"$k%&%'%V%5!<%P$K%P!<%A%c%k%[%9%H$rDI2C$9$k>l9g!"(B
$B4{B8$N%&%'%V%5!<%P$KBP$7$F$b(B <directive module="core"
<note><title>メインホストはなくなります</title>
<p>既にあるウェブサーバにバーチャルホストを追加する場合、
既存のウェブサーバに対しても <directive module="core"
type="section">VirtualHost</directive>
$B%V%m%C%/$r:n$i$J$1$l$P$J$j$^$;$s!#$3$N%P!<%A%c%k%[%9%H$N(B
<directive module="core">ServerName</directive> $B$H(B
ブロックを作らなければなりません。このバーチャルホストの
<directive module="core">ServerName</directive>
<directive module="core">DocumentRoot</directive>
$B$O!"%0%m!<%P%k$J(B <directive module="core">ServerName</directive> $B$H(B
は、グローバルな <directive module="core">ServerName</directive>
<directive module="core">DocumentRoot</directive>
$B$HF1$8$b$N$K$7$^$9!#$^$?!"$3$N%P!<%A%c%k%[%9%H$r@_Dj%U%!%$%k$NCf$G(B
$B@hF,$KCV$$$F!"%G%U%)%k%H%[%9%H$H$7$FF0:n$9$k$h$&$K$7$^$9!#(B</p>
と同じものにします。また、このバーチャルホストを設定ファイルの中で
先頭に置いて、デフォルトホストとして動作するようにします。</p>
</note>
<p>$B$?$H$($P!"(B<code>www.domain.tld</code> $B$rF0$+$7$F$$$F!"(B
$B$5$i$K%P!<%A%c%k%[%9%H(B <code>www.otherdomain.tld</code>
$B$rDI2C$9$k$H$7$^$7$g$&!#$3$N%P!<%A%c%k%[%9%H$OF10l(B IP $B$r;X$7$F$$$k$H$7$^$9!#(B
$B$=$N$h$&$J>l9g$O!"(B<code>httpd.conf</code>
$B$K0J2<$N$h$&$J%3!<%I$rDI2C$9$k$@$1$G$9(B</p>
<p>たとえば、<code>www.domain.tld</code> を動かしていて、
さらにバーチャルホスト <code>www.otherdomain.tld</code>
を追加するとしましょう。このバーチャルホストは同一 IP を指しているとします。
そのような場合は、<code>httpd.conf</code>
に以下のようなコードを追加するだけです</p>
<example>
NameVirtualHost *:80<br />
@@ -157,98 +157,98 @@
&lt;/VirtualHost&gt;<br />
</example>
<p><directive module="core">NameVirtualHost</directive> $B5Z$S(B
<directive module="core">VirtualHost</directive> $B$N$I$A$i$N>l9g$b!"(B
* $B$NItJ,$K$OL@<(E*$K(B IP $B%"%I%l%9$r;XDj$9$k$3$H$,$G$-$^$9!#(B
$BNc$($P!"$"$k(B IP $B%"%I%l%9$G$OL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$r;H$$$?$$0lJ}$G!"(B
$BJL$N(B IP $B%"%I%l%9$G$O!"B>$N(B IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$d(B
$BJLAH$NL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$r;H$$$?$$>l9g!"(B
$B$=$&@_Dj$9$k$3$H$K$J$k$G$7$g$&!#(B</p>
<p><directive module="core">NameVirtualHost</directive> 及び
<directive module="core">VirtualHost</directive> のどちらの場合も、
* の部分には明示的に IP アドレスを指定することができます。
例えば、ある IP アドレスでは名前ベースのバーチャルホストを使いたい一方で、
別の IP アドレスでは、他の IP ベースのバーチャルホストや
別組の名前ベースのバーチャルホストを使いたい場合、
そう設定することになるでしょう。</p>
<p>$BJ#?t$NL>A0$G%5!<%P%"%/%;%9$,$G$-$k$h$&$K$7$?$$$3$H$bB?$$$G$7$g$&!#(B
$B$3$N$h$&$J$3$H$O!"(B<directive module="core"
>ServerAlias</directive> $B%G%#%l%/%F%#%V$r(B <directive module="core"
<p>複数の名前でサーバアクセスができるようにしたいことも多いでしょう。
このようなことは、<directive module="core"
>ServerAlias</directive> ディレクティブを <directive module="core"
type="section">VirtualHost</directive>
$B%;%/%7%g%s$K5-=R$9$k$3$H$G<B8=$G$-$^$9!#(B
$BNc$($P>e5-$N(B <directive module="core"
type="section">VirtualHost</directive> $B$NNc$G$"$l$P!"(B
$B<!$N$h$&$K0lMw$K5s$2$i$l$?L>A0$,!"(B
$B%f!<%6$,F10l$N%&%'%V%5%$%H$H$7$FL\$K$7$F;HMQ$G$-$k%5!<%PL>$G$"$k!"(B
$B$H(B <directive module="core">ServerAlias</directive>
$B%G%#%l%/%F%#%V$G;XDj$G$-$^$9!#(B</p>
セクションに記述することで実現できます。
例えば上記の <directive module="core"
type="section">VirtualHost</directive> の例であれば、
次のように一覧に挙げられた名前が、
ユーザが同一のウェブサイトとして目にして使用できるサーバ名である、
<directive module="core">ServerAlias</directive>
ディレクティブで指定できます。</p>
<example>
ServerAlias domain.tld *.domain.tld
</example>
<p><code>domain.tld</code> $B%I%a%$%s$X$NA4$F$N%[%9%H$X$N%j%/%(%9%H$O(B
<code>www.domain.tld</code> $B$N%P!<%A%c%k%[%9%H$,=hM}$7$^$9!#(B
$BL>A0$r%^%C%A$5$;$k$?$a$K!"%o%$%k%I%+!<%IJ8;z(B * $B$d(B ?
$B$r;HMQ$9$k$3$H$b$G$-$^$9!#$b$A$m$s;W$$$D$-$NL>A0$r:n$C$F!"(B
<directive module="core">ServerName</directive> $B$d(B
<p><code>domain.tld</code> ドメインへの全てのホストへのリクエストは
<code>www.domain.tld</code> のバーチャルホストが処理します。
名前をマッチさせるために、ワイルドカード文字 * や ?
を使用することもできます。もちろん思いつきの名前を作って、
<directive module="core">ServerName</directive>
<directive module="core">ServerAlias</directive>
$B$K$=$NL>A0$r=q$/$H$$$C$?$3$H$O$G$-$^$;$s!#$^$:$O!"(B
$B$3$l$i$NL>A0$,(B $B%5!<%P$KIU$1$i$l$?(B IP $B%"%I%l%9$K%^%C%W$5$l$k$h$&$K(B
DNS $B%5!<%P$rE,@Z$K@_Dj$7$J$1$l$P$J$j$^$;$s!#(B</p>
にその名前を書くといったことはできません。まずは、
これらの名前が サーバに付けられた IP アドレスにマップされるように
DNS サーバを適切に設定しなければなりません。</p>
<p>$B:G8e$K!"(B<directive module="core"
type="section">VirtualHost</directive> $B%3%s%F%J$NCf$K(B
$BB>$N%G%#%l%/%F%#%V$r=q$/$3$H$G!"%P!<%A%c%k%[%9%H$N@_Dj$r:Y$+$/D4@0(B
$B$9$k$3$H$,$G$-$^$9!#(B
$B$[$H$s$I$N%G%#%l%/%F%#%V$O$3$l$i$N%3%s%F%J$K@_CV$9$k$3$H$,$G$-$F!"(B
$BJQ99E@$O$=$N%P!<%A%c%k%[%9%H$KBP$7$F$N$_M-8z$K$J$j$^$9!#(B
$B$I$N%G%#%l%/%F%#%V$r=q$/$3$H$,$G$-$k$+$O!"%G%#%l%/%F%#%V$N(B <a
href="../mod/directive-dist.html#context">$B%3%s%F%-%9%H(B</a> $B$r(B
$BD4$Y$F$/$@$5$$!#(B<em>$B<g%5!<%P%3%s%F%-%9%H(B</em>
<p>最後に、<directive module="core"
type="section">VirtualHost</directive> コンテナの中に
他のディレクティブを書くことで、バーチャルホストの設定を細かく調整
することができます。
ほとんどのディレクティブはこれらのコンテナに設置することができて、
変更点はそのバーチャルホストに対してのみ有効になります。
どのディレクティブを書くことができるかは、ディレクティブの <a
href="../mod/directive-dist.html#context">コンテキスト</a> を
調べてください。<em>主サーバコンテキスト</em>
(<directive module="core" type="section">VirtualHost</directive>
$B%3%s%F%J$N30(B) $B$N@_DjMQ%G%#%l%/%F%#%V$O%P!<%A%c%k%[%9%H$G$N@_Dj$G(B
$B>e=q$-$5$l$J$$>l9g$N$_;HMQ$5$l$^$9!#(B</p>
コンテナの外) の設定用ディレクティブはバーチャルホストでの設定で
上書きされない場合のみ使用されます。</p>
<p>$B%j%/%(%9%H$,Mh$k$H!"%5!<%P$O$^$::G=i$K(B <directive module="core"
<p>リクエストが来ると、サーバはまず最初に <directive module="core"
type="section">NameVirtualHost</directive>
$B$K%^%C%A$9$k(B IP $B%"%I%l%9$+$I$&$+$r%A%'%C%/$7$^$9!#%^%C%A$9$l$P(B
$B%^%C%A$7$?(B IP $B%"%I%l%9$N(B <directive module="core"
にマッチする IP アドレスかどうかをチェックします。マッチすれば
マッチした IP アドレスの <directive module="core"
type="section">VirtualHost</directive>
$B$N$=$l$>$l$N%;%/%7%g%s$NCf$+$i(B
<directive module="core">ServerName</directive> $B$+(B
のそれぞれのセクションの中から
<directive module="core">ServerName</directive>
<directive module="core">ServerAlias</directive>
$B$KMW5a$5$l$?%[%9%HL>$,$"$k$+C5$7$^$9!#(B
$B8+$D$+$l$P$=$N%5!<%PMQ$N@_Dj$r;H$$$^$9!#%^%C%A$9$k%P!<%A%c%k%[%9%H(B
$B$,8+$D$+$i$J$1$l$P!"%^%C%A$7$?(B IP $B%"%I%l%9$N(B
<strong>$B%j%9%H$N:G=i$K$"$k%P!<%A%c%k%[%9%H(B</strong> $B$,;H$o$l$^$9!#(B</p>
に要求されたホスト名があるか探します。
見つかればそのサーバ用の設定を使います。マッチするバーチャルホスト
が見つからなければ、マッチした IP アドレスの
<strong>リストの最初にあるバーチャルホスト</strong> が使われます。</p>
<p>$B7k2L$H$7$F!"%j%9%H$N:G=i$N%P!<%A%c%k%[%9%H$,(B <em>$B%G%U%)%k%H(B</em> $B$N(B
$B%P!<%A%c%k%[%9%H$K$J$j$^$9!#(BIP $B%"%I%l%9$,(B <directive
<p>結果として、リストの最初のバーチャルホストが <em>デフォルト</em> の
バーチャルホストになります。IP アドレスが <directive
module="core">NameVirtualHost</directive>
$B%G%#%l%/%F%#%V$K%^%C%A$7$?>l9g$O!"(B<em>$B%a%$%s$N%5!<%P(B</em> $B$N(B
ディレクティブにマッチした場合は、<em>メインのサーバ</em> の
<directive module="core">DocumentRoot</directive>
$B$O(B<strong>$B7h$7$F;H$o$l$^$;$s(B</strong>
$B$I$N%P!<%A%c%k%[%9%H$K$b%^%C%A$7$J$$%j%/%(%9%H$KBP$7$F!"(B
$BFCJL$J@_Dj$r$7$?$$$N$G$"$l$P!"@_Dj%U%!%$%kCf$N:G=i$N(B
<code>&lt;VirtualHost&gt;</code> $B%3%s%F%J$K$=$l$r5-=R$7$F$/$@$5$$!#(B</p>
は<strong>決して使われません</strong>
どのバーチャルホストにもマッチしないリクエストに対して、
特別な設定をしたいのであれば、設定ファイル中の最初の
<code>&lt;VirtualHost&gt;</code> コンテナにそれを記述してください。</p>
</section>
<section id="compat"><title>$B8E$$%V%i%&%6$H$N8_49@-(B</title>
<section id="compat"><title>古いブラウザとの互換性</title>
<p>$B0JA0=R$Y$?$h$&$K!"L>A0%Y!<%9$N%P!<%A%c%k%[%9%H$,@5$7$/F0:n$9$k(B
$B$?$a$KI,MW$J>pJs$rAw$C$F$3$J$$%/%i%$%"%s%H$,0MA3$H$7$FB8:_$7$F$$$^$9!#(B
$B$=$N$h$&$J%/%i%$%"%s%H$KBP$7$F$O!"3:Ev$9$k(B IP $B%"%I%l%9$K$D$$$F!"(B
$B0lHV:G=i$K@_Dj$5$l$F$$$k%P!<%A%c%k%[%9%H(B
(<cite>$B%W%i%$%^%j(B</cite>$B$NL>A0%Y!<%9$N%P!<%A%c%k%[%9%H(B)
$B$+$i%Z!<%8$,Aw$jJV$5$l$^$9!#(B</p>
<p>以前述べたように、名前ベースのバーチャルホストが正しく動作する
ために必要な情報を送ってこないクライアントが依然として存在しています。
そのようなクライアントに対しては、該当する IP アドレスについて、
一番最初に設定されているバーチャルホスト
(<cite>プライマリ</cite>の名前ベースのバーチャルホスト)
からページが送り返されます。</p>
<note><title>$B$I$N$0$i$$8E$$$N(B ?</title>
<p>$B!V8E$$!W$HI=8=$7$F$$$k>l9g!"K\Ev$K8E$$$3$H$r0UL#$7$F;H$C$F$$$^$9!#(B
$BIT9,$K$7$F:#8=:_$G$b$3$N$h$&$J8E$$%V%i%&%6$KAx6x$9$k$3$H$,$"$j$^$9!#(B
$B8=:_$N%V%i%&%6$OA4$F!"L>A0%Y!<%9$N%P!<%A%c%k%[%9%H$KI,MW$J(B
<code>Host</code> $B%X%C%@$rAw$j$^$9!#(B</p>
<note><title>どのぐらい古いの ?</title>
<p>「古い」と表現している場合、本当に古いことを意味して使っています。
不幸にして今現在でもこのような古いブラウザに遭遇することがあります。
現在のブラウザは全て、名前ベースのバーチャルホストに必要な
<code>Host</code> ヘッダを送ります。</p>
</note>
<p><a href="../mod/core.html#serverpath"><code>ServerPath</code></a>
$B%G%#%l%/%F%#%V$GBP=h$,2DG=$G$9!#$A$g$C$HIT3J9%$G$9$1$l$I$b!#(B</p>
ディレクティブで対処が可能です。ちょっと不格好ですけれども。</p>
<p>$B@_DjNc(B</p>
<p>設定例</p>
<example>
NameVirtualHost 111.22.33.44<br />
@@ -262,28 +262,28 @@
&lt;/VirtualHost&gt;<br />
</example>
<p>$B$3$NNc$K$O$I$&$$$&0UL#$,$"$k$G$7$g$&$+(B? $B$3$l$O(B
"<code>/domain</code>" $B$G;O$^$k(B URI $B$X$N%j%/%(%9%H$O$9$Y$F!"(B
$B%P!<%A%c%k%[%9%H(B <code>www.domain.tld</code> $B$G=hM}$5$l$k!"(B
$B$H$$$&0UL#$G$9!#$D$^$j!"$9$Y$F$N%/%i%$%"%s%H$G(B
<code>http://www.domain.tld/domain/</code> $B$G%"%/%;%9$G$-$k%Z!<%8$,!"(B
<code>Host:</code> $B%X%C%@$rAw$C$F$/$k%/%i%$%"%s%H$G$"$l$P(B
<code>http://www.domain.tld/</code> $B$H$7$F$b%"%/%;%9$G$-$k!"(B
$B$H$$$&0UL#$G$9!#(B</p>
<p>この例にはどういう意味があるでしょうか? これは
"<code>/domain</code>" で始まる URI へのリクエストはすべて、
バーチャルホスト <code>www.domain.tld</code> で処理される、
という意味です。つまり、すべてのクライアントで
<code>http://www.domain.tld/domain/</code> でアクセスできるページが、
<code>Host:</code> ヘッダを送ってくるクライアントであれば
<code>http://www.domain.tld/</code> としてもアクセスできる、
という意味です。</p>
<p>$B$3$l$,F0:n$9$k$h$&$K$9$k$K$O!"(B
$B%W%i%$%^%j$N%P!<%A%c%k%[%9%H$N%Z!<%8$K(B
<code>http://www.domain.tld/domain/</code> $B$X$N%j%s%/$r@_CV$7$^$9!#(B
$B$=$7$F!"%P!<%A%c%k%[%9%H$N%Z!<%8$G$O!"=c?h$JAjBP%j%s%/(B (<em>$BNc(B:</em>
"<code>file.html</code>" $B$d(B "<code>../icons/image.gif</code>")$B!"(B
$B$"$k$$$O(B <code>/domain/</code> $B$G;O$^$k%j%s%/(B (<em>$BNc(B:</em>
"<code>http://www.domain.tld/domain/misc/file.html</code>" $B$d(B
"<code>/domain/misc/file.html</code>") $B$@$1$r@_CV$7$^$9!#(B</p>
<p>これが動作するようにするには、
プライマリのバーチャルホストのページに
<code>http://www.domain.tld/domain/</code> へのリンクを設置します。
そして、バーチャルホストのページでは、純粋な相対リンク (<em>例:</em>
"<code>file.html</code>" "<code>../icons/image.gif</code>")
あるいは <code>/domain/</code> で始まるリンク (<em>例:</em>
"<code>http://www.domain.tld/domain/misc/file.html</code>"
"<code>/domain/misc/file.html</code>") だけを設置します。</p>
<p>$B$3$l$K$O!"4vJ,$+$N5,N'$,I,MW$H$J$j$^$9$,!"(B
$B$3$N$h$&$J%,%$%I%i%$%s$rCi<B$K<i$k$3$H$K$h$j!"$?$$$F$$$N>l9g!"(B
$B$9$Y$F$N%V%i%&%6$G(B $B!=(B $B?7$7$$%V%i%&%6$G$b8E$$$b$N$G$b(B $B!=(B
$B:n@.$7$?%Z!<%8$,8+$($k$H$$$&$3$H$rJ]>Z$7$^$9!#(B</p>
<p>これには、幾分かの規律が必要となりますが、
このようなガイドラインを忠実に守ることにより、たいていの場合、
すべてのブラウザで ― 新しいブラウザでも古いものでも ―
作成したページが見えるということを保証します。</p>
</section>
</manualpage>