$B%W%m%H%3%k$N35MW(B
- AJP13
$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
- $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
- $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
+プロトコルの概要
+ AJP13
プロトコルはパケット指向です。
+ 可読なプレーンテキスト形式ではなくバイナリ形式になったのは、
+ おそらくパフォーマンス上の理由によります。
+ ウェブサーバはサーブレットコンテナと TCP コネクションで通信します。
+ ソケット生成は重い処理なので、負荷を減らすために、サーブレットコンテナとの
+ TCP 接続を維持し、複数のリクエスト・レスポンス処理サイクルに対して一つの
+ コネクションを使いまわすようになっています。
+ あるリクエストにコネクションが割り当てられると、その処理サイクルが
+ 完了するまで他のものに使われることはありません。
+ つまりコネクション上では、リクエストの同時処理は行われません。
+ このため、コネクション両端での実行するコードを簡潔にできる一方で、
+ 同時に開くコネクションは多くなっています。
+ サーブレットコンテナへのコネクションを開いた後は、コネクションの状態は
+ 次のどれかになります:
- - Idle
$B%3%M%/%7%g%s>e$G=hM}$5$l$F$$$k%j%/%(%9%H$O$"$j$^$;$s!#(B
- - Assigned
$B%3%M%/%7%g%s$O%j%/%(%9%H$r=hM}Cf$G$9!#(B
+ - Idle
コネクション上で処理されているリクエストはありません。
+ - Assigned
コネクションはリクエストを処理中です。
- $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 (content-length > 0)
$B$9$l$P!"(B
- $B4pK\E*$J>pJs$ND>8e$KJL%Q%1%C%H$GE>Aw$5$l$^$9!#(B
- $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!"
+
コネクションが特定のリクエストにアサインされると、基本的な情報 (例えば
+ HTTP ヘッダ等) が圧縮された形 (例えば通常の文字列は整数にエンコードされます)
+ で転送されます。詳細は下記の「リクエストパケットの構造」を参照してください。
+ リクエストにボディが存在 (content-length > 0)
すれば、
+ 基本的な情報の直後に別パケットで転送されます。
+ この時点でおそらく、サーブレットコンテナは処理を開始できるようになります。
+ ですので、次のメッセージをウェブサーバに戻して知らせられるようになります。
- - SEND_HEADERS
$B%V%i%&%6$K%X%C%@$rAw?.$7$^$9!#(B
- - SEND_BODY_CHUNK
$B%V%i%&%6$K%\%G%#%G!<%?$N%A%c%s%/$rAw$j$^$9!#(B
+ - SEND_HEADERS
ブラウザにヘッダを送信します。
+ - SEND_BODY_CHUNK
ブラウザにボディデータのチャンクを送ります。
- - GET_BODY_CHUNK
$B%j%/%(%9%H$N%G!<%?$rA4$Fl9g(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)
- - END_RESPONSE
$B%j%/%(%9%H=hM}%5%$%/%k$r=*N;$7$^$9!#(B
+ - GET_BODY_CHUNK
リクエストのデータを全て受け取り終わっていないときに、
+ 残っているデータを受け取ります。パケットにある定まった最大長があり、任意の
+ 大きさのデータがリクエストのボディとして含まれうる場合
+ (例えばファイルのアップロードの場合) に必要となります。
+ (注: HTTP のチャンク転送とは関連ありません。)
+ - END_RESPONSE
リクエスト処理サイクルを終了します。
- $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
+ 個々のメッセージはそれぞれ異なるデータパケット形式になっています。
+ 後述の「レスポンスパケットの構造」を参照してください。
-$B4pK\%Q%1%C%H9=B$(B
- $B$3$N%W%m%H%3%k$K$O(B XDR $B$+$i/$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
- $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
- $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
+基本パケット構造
+ このプロトコルには XDR から受け継いだ部分が少しありますが、多くの点で
+ 異なります (例えば 4 バイトアライメントでないことなど) 。
+ バイトオーダー: 個々のバイトのエンディアンがどうなっているかは、
+ 私は詳しくないのですが、リトルエンディアンになっていると思います。
+ XDR 仕様でそうなっているのと、素晴らしいことに sys/socket ライブラリが
+ (C で) そういう風にできているのでそうなのだと思いました。
+ ソケット呼び出しの内部についてより詳しい方がいらっしゃいましたら、
+ ご教授ください。
+ プロトコルには 4 つのデータタイプがあります: byte, boolean,
+ integer, string です。
- - Byte
- $B%P%$%H0l$D$G$9!#(B
+ - Byte
- バイト一つです。
- Boolean
- - $B%P%$%H0l$D$G!"(B
1 = true
, 0 = false
$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
+ - バイト一つで、
1 = true
, 0 = false
です。
+ (C のように) 非零を真として扱ってしまうと、ある場合は動くかもしれませんし、
+ 動かないかもしれません。
- Integer
- 0 $B$+$i(B 2^16 (32768)
$B$NHO0O$N?t;z!#9b
+ 0 から 2^16 (32768)
の範囲の数字。高次の 2 バイトが
+ 先に格納されます。
- String
- - $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=*CpJs$O:G8e$N(B '\0' $B$r(B$B%+%&%s%H$7$J$$(B
- $B$3$H$KCm0U$7$F$/$@$5$$!=!=$3$l$O(B
strlen
$B$HF1MM$G$9!#(B
- $B$3$l$i$N=*C/$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$rl9g$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
+ - 可変長の文字列 (2^16 が長さの上限) 。長さ情報のパケット 2 バイトの後に
+ 文字列 (終端文字 '\0' を含む) が続く形式でエンコードされます。
+ エンコードされている長さ情報は最後の '\0' をカウントしない
+ ことに注意してください――これは
strlen
と同様です。
+ これらの終端文字をスキップするために、あまり意味の無いインクリメント文
+ をたくさん書かないといけないのは、
+ Java の側から見ると少し紛らわしく感じられるかもしれません。
+ こうなった理由はおそらく、Servlet コンテナから返される文字列を読み出す時に、
+ 効率よく C のコードを書けるようにする――サーブレットから返される
+ 文字列は \0 文字で終端されているので、C のコードではわざわざコピーをせずに、
+ 一つのバッファへのリファレンスを取り回すように書くことができる――
+ ためだと思われます。
+ '\0' 文字がない場合は、C では文字列の規則に合うようにコピーしなければ
+ いけなくなってしまいます。
- $B%Q%1%C%H%5%$%:(B
- $BB?$/$N%3!<%I$G$=$&$J$C$F$$$k$N$G$9$,!"%Q%1%C%H%5%$%:$N:GBg%5%$%:$O(B
- 8 * 1024 (8K)
$B$G$9!#%Q%1%C%H$N
+ パケットサイズ
+ 多くのコードでそうなっているのですが、パケットサイズの最大サイズは
+ 8 * 1024 (8K)
です。パケットの実際の長さはヘッダに
+ エンコードされて入っています。
- $B%Q%1%C%H%X%C%@(B
- $B%5!<%P$+$i%3%s%F%J$KAw=P$5$l$k%Q%1%C%H$O(B 0x1234
$B$G;O$^$j$^$9!#(B
- $B%3%s%F%J$+$i%5!<%P$KAw$i$l$k%Q%1%C%H$O(B AB
(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
+ パケットヘッダ
+ サーバからコンテナに送出されるパケットは 0x1234
で始まります。
+ コンテナからサーバに送られるパケットは AB
(ASCII コード A と
+ ASCII コード B) で始まります。この二バイトの後に、ペイロード長が (上記の形式で)
+ 続きます。このため、ペイロード長の最大値は 2^16 にできるように思えますが、
+ 実際にはコードでは最大値は 8K に設定されています。
- $B%Q%1%C%H7A<0(B (Server->Container) |
+ パケット形式 (Server->Container) |
Byte |
@@ -153,13 +153,13 @@
Contents |
0x12 |
0x34 |
- $B%G!<%?D9(B (n) |
+ データ長 (n) |
Data |
- $B%Q%1%C%H7A<0(B (Container->Server) |
+ パケット形式 (Container->Server) |
Byte |
@@ -173,98 +173,98 @@
Contents |
A |
B |
- $B%G!<%?D9(B (n) |
+ データ長 (n) |
Data |
- $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 (0x1234
$B$H%Q%1%C%HD9(B)
- $B$G$9$,!"$=$N8e$KB3$/%W%l%U%#%C%/%9%3!<%I$,$"$j$^$;$s!#(B
- $B%&%'%V%5!<%P$O
+
ほとんどのパケットで、ペイロードの最初のバイトがメッセージの型をエンコード
+ しています。例外はサーバからコンテナに送られるリクエストボディパケットです
+ ――これらは標準的なパケット形式 (0x1234
とパケット長)
+ ですが、その後に続くプレフィックスコードがありません。
+ ウェブサーバは次のメッセージをサーブレットコンテナに送出できます。
- $B%3!<%I(B |
- $B%Q%1%C%H$N7?(B |
- $B0UL#(B |
+ コード |
+ パケットの型 |
+ 意味 |
2 |
Forward Request |
- $B%j%/%(%9%H=hM}%5%$%/%k$r8eB3$N%G!<%?$H$H$b$K3+;O$9$k!#(B |
+ リクエスト処理サイクルを後続のデータとともに開始する。 |
7 |
Shutdown |
- $B%&%'%V%5!<%P$,%3%s%F%J$K!"%3%s%F%J$r=*N;$9$k$h$&$KEA$($k!#(B |
+ ウェブサーバがコンテナに、コンテナを終了するように伝える。 |
8 |
Ping |
- $B%&%'%V%5!<%P$,%3%s%F%J$K@)8f$r
+ | ウェブサーバがコンテナに制御を受け持つように伝える
+ (セキュアログインフェーズ) 。 |
10 |
CPing |
- $B%&%'%V%5!<%P$,%3%s%F%J$K(B CPong $B$GB(:B$K1~Ez$9$k$h$&$KEA$($k!#(B |
+ ウェブサーバがコンテナに CPong で即座に応答するように伝える。 |
none |
Data |
- $B%5%$%:(B (2 $B%P%$%H(B) $B$H$=$l$KB3$/%\%G%#%G!<%?!#(B |
+ サイズ (2 バイト) とそれに続くボディデータ。 |
- $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$OShutdown
- $B$r
- $B:G=i$N(B Data
$B%Q%1%C%H$O!"(BForward Request
- $B$ND>8e$K%&%'%V%5!<%P$+$iAw$i$l$^$9!#(B
- $B%5!<%V%l%C%H%3%s%F%J$O%&%'%V%5!<%P$K!"
+
基本的なセキュリティを確保するため、ホストされているマシンと同一の
+ マシンからのリクエストに対してのみ、コンテナは実際に Shutdown
+ を実行します。
+ 最初の Data
パケットは、Forward Request
+ の直後にウェブサーバから送られます。
+ サーブレットコンテナはウェブサーバに、次のタイプのメッセージを送ることが
+ できます :
- $B%3!<%I(B |
- $B%Q%1%C%H$N7?(B |
- $B0UL#(B |
+ コード |
+ パケットの型 |
+ 意味 |
3 |
Send Body Chunk |
- $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 |
+ サーブレットコンテナからウェブサーバに
+ (そしておそらくそのままブラウザに)、ボディのチャンクを送る。 |
4 |
Send Headers |
- $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 |
+ サーブレットコンテナからウェブサーバに (そしておそらくそのままブラウザに)
+ レスポンスヘッダを送る。 |
5 |
End Response |
- $B%l%9%]%s%9(B ($B$D$^$j%j%/%(%9%H=hM}%5%$%/%k(B) $B=*N;$NL\0u$rAw$k!#(B
+ | レスポンス (つまりリクエスト処理サイクル) 終了の目印を送る。
|
6 |
Get Body Chunk |
- $B$^$@A4$FE>Aw$5$l$F$$$J$$>l9g!";D$C$F$$$k%j%/%(%9%H$N%G!<%?$rまだ全て転送されていない場合、残っているリクエストのデータを受け取る。
|
9 |
- CPong $B1~Ez(B |
- CPing $B%j%/%(%9%H$K1~Ez$9$k!#(B |
+ CPong 応答 |
+ CPing リクエストに応答する。 |
- $B>e5-%a%C%;!<%8$O!"$=$l$>$lFbIt9=B$$,0[$J$C$F$$$^$9!#>\:Y$O2<5-$r$4Mw$/$@$5$$!#(B
+
上記メッセージは、それぞれ内部構造が異なっています。詳細は下記をご覧ください。
-$B%j%/%(%9%H%Q%1%C%H9=B$(B
- $B%5!<%P$+$i%3%s%F%J$XAw$i$l$k%a%C%;!<%8$,(B
- Forward Request $B7?$N>l9g(B :
+リクエストパケット構造
+ サーバからコンテナへ送られるメッセージが
+ Forward Request 型の場合 :
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
- request_headers
$B$Orequest_headers
は次のような構造になっています :
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)
- $BB0@-(B
$B$O%*%W%7%g%s$G!"
+
属性
はオプションで、次のような構造をしています :
attribute_name := sc_a_name | (sc_a_req_attribute string)
attribute_value := (string)
- $B$b$C$H$b=EMW$J%X%C%@$O(B content-length
$B$@$H$$$&$3$H$K(B
- $BCm0U$7$F$/$@$5$$!#%3%s%F%J$O
- Forward Request $BMWAG$N>\:Y$J@bL@(B
+ もっとも重要なヘッダは content-length
だということに
+ 注意してください。コンテナは次のパケットを探すかどうかを、
+ それを見て決めるからです。
+
Request prefix
- $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
+ リクエストについては全て、この値は 2 になります。他の Prefix コードの詳細は
+ 上記をご覧ください。
Method
- HTTP $B%a%=%C%I$O(B 1 $B%P%$%H$K%(%s%3!<%I$5$l$^$9(B :
+ HTTP メソッドは 1 バイトにエンコードされます :
Command Name | Code |
OPTIONS | 1 |
@@ -338,25 +338,25 @@ attribute_value := (string)
BASELINE_CONTROL | 26 |
MKACTIVITY | 27 |
- $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
+ 今後の ajp13 バージョンでは、この一覧にない、今後追加されるメソッドを
+ 送るかもしれません。
protocol, req_uri, remote_addr, remote_host, server_name,
server_port, is_ssl
- $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
+ これらはまさに文字通りのものです。どれも必要で、リクエストの毎回につき
+ 送られます。
Headers
- request_headers
$B$N9=B$$Onum_headers $B$,%(%s%3!<%I$5$l$^$9!#(B
- $B(B req_header_name
/ $BCM(B req_header_value
- $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
- sc_req_header_name
$B$N0lMw$H$=$N%3!<%I$O.J8;z$r6hJL$7$^$9(B) :
+ request_headers
の構造は次のようなものです :
+ まずヘッダの数 num_headers
がエンコードされます。
+ 次にヘッダ名 req_header_name
/ 値 req_header_value
+ の組が続きます。効率のため、一般的なヘッダは整数でエンコードして転送します。
+ ヘッダ名が基本ヘッダの一覧に無い場合は、通常通り (文字列として、長さ
+ プレフィックス付きで) 転送されます。一般的なヘッダ
+ sc_req_header_name
の一覧とそのコードは次の通りです
+ (どれも大文字小文字を区別します) :
- $BL>A0(B | $B%3!<%I$NCM(B | $B%3!<%IL>(B |
+ 名前 | コードの値 | コード名 |
accept | 0xA001 | SC_REQ_ACCEPT |
accept-charset | 0xA002 | SC_REQ_ACCEPT_CHARSET
|
@@ -378,32 +378,32 @@ attribute_value := (string)
referer | 0xA00D | SC_REQ_REFERER |
user-agent | 0xA00E | SC_REQ_USER_AGENT |
- $B$3$l$rFI$_9~$`(B Java $B$N%3!<%I$G$O!":G=i$N(B 2 $B%P%$%H@0?t$r'0xA0' $B$G$"$l$P!"%X%C%@L>$NG[Ns$N(B
- $B%$%s%G%C%/%9$r;H$$$^$9!#@hF,%P%$%H$,(B 0xA0
$B$G$J$$>l9g$O!"(B
- $B@hF,(B 2 $B%P%$%H$OJ8;zNsD9$rI=$9@0?t$G$"$k$H2r
- $B%X%C%@L>$ND9$5$O(B 0x9999 (==0xA000 -1)
$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
- $BCm(B:
- content-length
$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%#$r8e$N%Q%1%C%H$rF~NO%9%H%j!<%`$+$iFI$_9~$_$O$8$a$^$9!#(B
+ これを読み込む Java のコードでは、最初の 2 バイト整数を取り込み、
+ 目印になるバイト '0xA0'
であれば、ヘッダ名の配列の
+ インデックスを使います。先頭バイトが 0xA0
でない場合は、
+ 先頭 2 バイトは文字列長を表す整数であると解釈し、読み込みはじめます。
+ ヘッダ名の長さは 0x9999 (==0xA000 -1)
以上にならないという
+ 仮定の下に動いていて、少しあいまいですが合理的な挙動になっています。
+ 注:
+ content-length
ヘッダはとても重要です。
+ 存在していて非ゼロであれば、リクエストにはボディがある (例えば POST
+ リクエスト) と推測し、そのボディを取り込むために
+ 直後のパケットを入力ストリームから読み込みはじめます。
- $BB0@-(B
- ?
$B%W%l%U%#%C%/%9$G;O$^$kB0@-(B ($BNc(B ?context
)
- $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 :
+ 属性
+ ?
プレフィックスで始まる属性 (例 ?context
)
+ は。省略可能です。それぞれ属性の型を示す 1 バイトのコードと、
+ 値の文字列が続きます。
+ これらは順不同で送ることができます (C のコードは常に下の一覧順に
+ 送るようですが) 。
+ オプションの属性のリストの最後には、特別な終了コードが送られます。
+ コードの一覧は :
Information | Code Value | Note |
- ?context | 0x01 | $BL$?context | 0x01 | 未実装
| |
- ?servlet_path | 0x02 | $BL$?servlet_path | 0x02 | 未実装
| |
?remote_user | 0x03 | |
?auth_type | 0x04 | |
@@ -417,33 +417,33 @@ attribute_value := (string)
?ssl_key_size | 0x0B | |
are_done | 0xFF | request_terminator |
- context
$B$H(B servlet_path
$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$B&$H$b$G8+Ev$?$j$^$;$s!#(B
- remote_user
$B$H(B auth_type
$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
+ context
と servlet_path
は現在の C の
+ コードではセットされていません。また、ほとんどの Java のコードでも、
+ このフィールドで何が送られても無視されます (これらのコードの後に文字列が
+ 送られると壊れるものもあります)。
+ これがバグなのか、単に未実装なのか、歴史的経緯で残っているコードなのか
+ 分かりませんが、コネクションの両側ともで見当たりません。
+ remote_user
と auth_type
はおそらく
+ HTTP レベルの認証を参照していて、リモートユーザのユーザ名と認証に使用した
+ タイプ (例 Basic, Digest) についてやり取りします。
query_string
, ssl_cert
,
ssl_cipher
, ssl_session
- $B$O(B HTTP $B$H(B HTTPS $B$NBP1~$9$kItJ,$r;2>H$7$^$9!#(B
- jvm_route
$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
- $B$3$N4pK\B0@-0lMw$KL5$$$b$N$K$D$$$F$O!"(Breq_attribute
- $B%3!<%I(B 0x0A
$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
- $B:G8e$KB0@-$,A4$FAw?.$5$l$?8e$K!"B0@-$N=*C<$r<($9(B 0xFF
- $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
+ は HTTP と HTTPS の対応する部分を参照します。
+ jvm_route
はスティッキーセッションのサポート――
+ ロードバランスしている複数のサーバ中の特定の Tomcat インスタンスと、
+ ユーザのセッションとを紐付ける機能――に使われます。
+ この基本属性一覧に無いものについては、req_attribute
+ コード 0x0A
経由で属性を何個でも送ることができます。
+ 属性の名前と値の文字列の組を、それぞれこのコードの直後に送ります。
+ 環境変数はこの方法で伝えられます。
+ 最後に属性が全て送信された後に、属性の終端を示す 0xFF
+ が送出されます。この信号は属性の一覧の終わりを示すと同時に、リクエスト
+ パケットの終端をも示しています。
-$B%l%9%]%s%9%Q%1%C%H9=B$(B
- $B%3%s%F%J$,%5!<%P$KAw$jJV$9$3$H$N$G$-$k%a%C%;!<%8(B:
+レスポンスパケット構造
+ コンテナがサーバに送り返すことのできるメッセージ:
AJP13_SEND_BODY_CHUNK :=
prefix_code 3
@@ -474,19 +474,19 @@ AJP13_GET_BODY_CHUNK :=
prefix_code 6
requested_length (integer)
-
+
Send Body Chunk
- $B%A%c%s%/$O4pK\E*$K$O%P%$%J%j%G!<%?$G!"%V%i%&%6$KD>@\Aw$i$l$^$9!#(B
+ チャンクは基本的にはバイナリデータで、ブラウザに直接送られます。
Send Headers
- $B%9%F!<%?%9%3!<%I$H%a%C%;!<%8$,DL>o$N(B HTTP $B$NDL?.$K$O$"$j$^$9(B ($BNc(B
- 200
$B$H(B OK
)$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 :
+ ステータスコードとメッセージが通常の HTTP の通信にはあります (例
+ 200
と OK
)。レスポンスヘッダ名は、
+ リクエストヘッダ名と同様の方法でエンコードされます。
+ コードと文字列の判別方法の詳細に関しては、上記の header_encoding
+ を参照してください。
+ 一般的なヘッダのコードは :
- $BL>A0(B | $B%3!<%I$NCM(B |
+ 名前 | コードの値 |
Content-Type | 0xA001 |
Content-Language | 0xA002 |
Content-Length | 0xA003 |
@@ -499,25 +499,25 @@ AJP13_GET_BODY_CHUNK :=
Status | 0xA00A |
WWW-Authenticate | 0xA00B |
- $B%3!<%I$+%X%C%@J8;zNs$ND>8e$K$O!"%X%C%@$NCM$,%(%s%3!<%I$5$l$^$9!#(B
+ コードかヘッダ文字列の直後には、ヘッダの値がエンコードされます。
End Response
- $B%j%/%(%9%H=hM}%5%$%/%k$N=*N;$rCN$i$;$^$9!#(Breuse
$B%U%i%0$,??(B
- (==1)
$B$N>l9g!"8=:_;HMQ$7$F$$$k(B TCP $B%3%M%/%7%g%s$Oreuse $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
+ リクエスト処理サイクルの終了を知らせます。reuse
フラグが真
+ (==1)
の場合、現在使用している TCP コネクションは次の新しい
+ リクエストに使えるようになります。reuse
が偽 (C のコードでは
+ 1 以外の全て) の場合は、コネクションを閉じることになります。
Get Body Chunk
- ($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
- request_length
$B:GBg(B (8186 (8 Kbytes - 6))
- $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
- $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$B6u%Q%1%C%H(B(0x12,0x34,0x00,0x00)
- $B$rAw$jJV$7$^$9!#(B
+ (ボディのサイズが大きすぎて最初のパケットに収まらない場合や、
+ リクエストがチャンク転送された場合などには、) コンテナはリクエストからの
+ データ読み込み要求をします。サーバ側はそれに対して、最小
+ request_length
最大 (8186 (8 Kbytes - 6))
+ の範囲で、未転送で残っているリクエストボディの大きさのデータを
+ 送り返します。
+ ボディにそれ以上データが残っていない場合 (つまりサーブレットが
+ ボディの最後を超えて読み込もうとした場合) 、サーバは
+ ペイロード長 0 の空パケット(0x12,0x34,0x00,0x00)
+ を送り返します。
diff --git a/docs/manual/mod/mod_proxy_balancer.xml.ja b/docs/manual/mod/mod_proxy_balancer.xml.ja
index dcaf36a1fd..58d03881e3 100644
--- a/docs/manual/mod/mod_proxy_balancer.xml.ja
+++ b/docs/manual/mod/mod_proxy_balancer.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,66 +23,66 @@
mod_proxy_balancer
-$BIi2YJ,;6$N$?$a$N(B mod_proxy $B3HD%(B
+負荷分散のための mod_proxy 拡張
Extension
proxy_balancer.c
proxy_balancer_module
-2.1 $B0J9_(B
+2.1 以降
- $BK\%b%8%e!<%k$K$O(B mod_proxy $B$,(B$BI,MW$G$9(B$B!#(B
- HTTP
, FTP
$B$H(B AJP13
- $B%W%m%H%3%k$N%m!<%I%P%i%s%95!G=$r;}$C$F$$$^$9!#(B
+ 本モジュールには mod_proxy が必要です。
+ HTTP
, FTP
と AJP13
+ プロトコルのロードバランス機能を持っています。
- $B$G$9$+$i!"(B $B%m!<%I%P%i%s%9$rM-8z$K$9$k>l9g(B mod_proxy
- $B$H(B mod_proxy_balancer $B$,%5!<%P$KAH$_9~$^$l$F(B
- $B$$$J$1$l$P$$$1$^$;$s!#(B
+ ですから、 ロードバランスを有効にする場合 mod_proxy
+ と mod_proxy_balancer がサーバに組み込まれて
+ いなければいけません。
- $B7Y9p(B
+ 警告
$B0BA4$J%5!<%P$K$9$k(B$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
+ >安全なサーバにするまでプロクシ機能は有効にしないでください。
+ オープンプロキシサーバはあなた自身のネットワークにとっても、
+ インターネット全体にとっても危険です。
mod_proxy
- $B%m!<%I%P%i%s%5$N%9%1%8%e!<%i$N%"%k%4%j%:%`(B
- $B8=;~E@$G$O(B 2 $BRequest Counting
- $B$H!"%H%i%U%#%C%/NL$K$h$k$b$N(B Weighted Traffic Counting
- $B$,$"$j$^$9!#%P%i%s%5$N@_Dj(B lbmethod
$BCM$G!"$I$A$i$r;H$&$+;XDj$7$^$9!#(B
- $B>\:Y$O(B Proxy $B%G%#%l%/%F%#%V$r(B
- $B;2>H$7$F$/$@$5$$!#(B
+ ロードバランサのスケジューラのアルゴリズム
+ 現時点では 2 種類のロードバランサスケジューラアルゴリズムから選べます。
+ リクエスト回数によるもの Request Counting
+ と、トラフィック量によるもの Weighted Traffic Counting
+ があります。バランサの設定 lbmethod
値で、どちらを使うか指定します。
+ 詳細は Proxy ディレクティブを
+ 参照してください。
- Request Counting $B%"%k%4%j%:%`(B
- lbmethod=byrequests
$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
+ Request Counting アルゴリズム
+
lbmethod=byrequests
で有効になります。
+ このスケジューラの背景にある考え方は、様々なワーカーがそれぞれ、
+ 設定されている分担リクエスト数をきちんと受け取れるように、
+ リクエストを扱うという考え方です。次のように動作します:
- lbfactor $B$O!"(B$B$I$NDxEY%o!<%+!<$K;E;v$r?6$k$+(B
- $B$D$^$j(B$B%o!<%+!<$N%/%*!<%?(B$B$r;X$7$^$9!#$3$NCM$O(B "$BJ,C4(B"
- $BNL$rI=$9@55,2=$5$l$?CM$G$9!#(B
+ lbfactor は、どの程度ワーカーに仕事を振るか
+ つまりワーカーのクオータを指します。この値は "分担"
+ 量を表す正規化された値です。
- lbstatus $B$O!"(B$B%o!<%+!<$N%/%*!<%?$rK~$?$9$?$a$K(B
- $B$I$N$0$i$$5^$.$GF/$+$J$1$l$P$J$i$J$$$+(B$B$r;X$7$^$9!#(B
+ lbstatus は、ワーカーのクオータを満たすために
+ どのぐらい急ぎで働かなければならないかを指します。
- $B%o!<%+!<(B$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
+
ワーカーはロードバランサのメンバで、通常は、
+ サポートされるプロトコルのうちの一つを提供しているリモートホストです。
- $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
+
まず個々のワーカーにワーカークオータを割り振り、どのワーカーが最も急ぎで
+ 働かなければならないか (lbstatus が最大のもの) を調べます。
+ 次に仕事をするようにこのワーカーを選択し、選択したワーカーの lbstatus
+ を全体に割り振ったぶんだけ差し引きます。ですから、lbstatus の総量は
+ 結果的に変化しません(*)し、リクエストは期待通りに分散されます。
- $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
+
あるワーカーが無効になっても、他のものは正常にスケジュールされ続けます。
for each worker in workers
@@ -94,7 +94,7 @@
candidate lbstatus -= total factor
- $B%P%i%s%5$rl9g(B:
+ バランサを次のように設定した場合:
worker |
@@ -114,8 +114,8 @@ candidate lbstatus -= total factor
0 |
- $B$=$7$F(B b $B$,L58z$K$J$C$?>l9g!"
+
そして b が無効になった場合、次のようなスケジュールが
+ 行われます。
worker |
@@ -141,9 +141,9 @@ candidate lbstatus -= total factor
---|
(repeat) |
- $B$D$^$j$3$N$h$&$K%9%1%8%e!<%k$5$l$^$9(B: a c
+
つまりこのようにスケジュールされます: a c
d a c d a
- c d ... $B
+ c d ... 次の点に注意してください:
worker |
@@ -158,7 +158,7 @@ candidate lbstatus -= total factor
25 |
- $B$3$N5sF0$O!"
+
この挙動は、次の設定と全く同じになります:
worker |
@@ -175,8 +175,8 @@ candidate lbstatus -= total factor
This is because all values of lbfactor are normalized
with respect to the others. For:
- lbfactor $B$OA4$F@55,2=$5$l$?$b$N$G!"(B
- $BB>$H$NAjBPCM$@$+$i$G$9!#
+
lbfactor は全て正規化されたもので、
+ 他との相対値だからです。次の設定では:
worker |
@@ -189,10 +189,10 @@ candidate lbstatus -= total factor
1 |
- $B%o!<%+!<(B b $B$O!"J?6Q$7$F!"(Ba $B$H(B c
- $B$N(B 4 $BG\$N?t$N%j%/%(%9%H$r
+
ワーカー b は、平均して、a と c
+ の 4 倍の数のリクエストを受け持つことになります。
- $BN$J@_Dj$G$O!"$3$&$J$k$HM=A[$5$l$k$G$7$g$&(B:
+ 次のような非対称な設定では、こうなると予想されるでしょう:
worker |
@@ -235,23 +235,23 @@ candidate lbstatus -= total factor
---|
(repeat) |
- $B%9%1%8%e!<%k$O(B 10 $B%9%1%8%e!<%k8e$K7+$jJV$5$l!"(Ba 7 $B2s$H(B
- b 3 $B2s$G$^$P$i$KA*$P$l$^$9!#(B
+ スケジュールは 10 スケジュール後に繰り返され、a 7 回と
+ b 3 回でまばらに選ばれます。
- Weighted Traffic Counting $B%"%k%4%j%:%`(B
- lbmethod=bytraffic
$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$,!"
+
Weighted Traffic Counting アルゴリズム
+ lbmethod=bytraffic
で有効になります。
+ このスケジューラの背景にある考え方は、Request Counting
+ と非常に似ていますが、次の違いがあります:
- lbfactor $B$O(B $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 $B$rI=$7$^$9!#(B
- $B$3$NCM$bF1MM$K@55,2=$5$l$?CM$G!"%o!<%+!AwNL$r=hM}$7$?$+$r?t$($^$9!#(B
+ lbfactor は どれだけのバイト数のトラフィック量を、
+ このワーカーに処理してもらいたいか を表します。
+ この値も同様に正規化された値で、ワーカー全体のうちでの "分担"
+ 量を表現しています。リクエスト数を単純に数える代わりに、
+ どれだけの転送量を処理したかを数えます。
- $Bl9g(B:
+ 次のようにバランサを設定した場合:
worker |
@@ -264,31 +264,31 @@ candidate lbstatus -= total factor
1 |
- b $B$K$O(B a $B$d(B c $B$N(B 2 $BG\(B
- $B=hM}$7$F$[$7$$$H$$$&$3$H$K$J$j$^$9!#(B
- b $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
+ b には a や c の 2 倍
+ 処理してほしいということになります。
+ b は 2 倍の I/O を処理するという意味になり、
+ 2 倍のリクエスト数を処理するということにはなりません。
+ ですからリクエストとレスポンスのサイズが、
+ 重み付けと振り分けのアルゴリズムに効いています。
- $B%P%i%s%5%^%M!<%8%c$N%5%]!<%H$rM-8z$K$9$k(B
- $B$3$N%b%8%e!<%k$O(B mod_status $B$N%5!<%S%9$r(B
- $BI,MW$H$7$^$9(B$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
+ バランサマネージャのサポートを有効にする
+ このモジュールは mod_status のサービスを
+ 必要とします。
+ バランサマネージャを使うと、バランサのメンバーの動的な更新が
+ できます。バランサマネージャを使って、バランス係数 (lbfactor)
+ を変更したり、メンバーを変更したり、特定のメンバーを
+ オフラインモードにしたりできます。
- $B$G$9$+$i!"%m!<%I%P%i%s%54IM}5!G=$r;H$$$?$1$l$P!"(B
- mod_status $B$H(B mod_proxy_balancer
- $B$r%5!<%P$KAH$_9~$^$J$1$l$P$J$j$^$;$s!#(B
+ ですから、ロードバランサ管理機能を使いたければ、
+ mod_status と mod_proxy_balancer
+ をサーバに組み込まなければなりません。
- 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!"httpd.conf
- $B$KDI2C$7$^$9!#(B
+ foo.com ドメインのブラウザからロードバランサ管理機能を
+ 使えるようにするには、次のようなコードを httpd.conf
+ に追加します。
<Location /balancer-manager>
SetHandler balancer-manager
@@ -299,9 +299,9 @@ candidate lbstatus -= total factor
</Location>
- $B$3$&$9$k$H!"(Bhttp://your.server.name/balancer-manager
- $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
+ こうすると、http://your.server.name/balancer-manager
+ のページ経由で、ウェブブラウザからロードバランサマネージャに
+ アクセスできるようになります。
diff --git a/docs/manual/mod/mod_proxy_connect.xml.ja b/docs/manual/mod/mod_proxy_connect.xml.ja
index cdc5aa93f1..e171edff2e 100644
--- a/docs/manual/mod/mod_proxy_connect.xml.ja
+++ b/docs/manual/mod/mod_proxy_connect.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,27 +23,27 @@
mod_proxy_connect
-CONNECT
$B%j%/%(%9%H$r07$&(B
-mod_proxy $BMQ$N3HD%(B
+CONNECT
リクエストを扱う
+mod_proxy 用の拡張
Extension
proxy_connect.c
proxy_connect_module
- $BK\%b%8%e!<%k$K$O(B mod_proxy $B$,(B$BI,MW$G$9(B$B!#(B
- CONNECT
HTTP $B%a%=%C%I$r%5%]!<%H$7$^$9!#(B
- $B$3$N%a%=%C%I$OSSL$B%H%s%M%j%s%0(B$B$K;H$o$l$^$9!#(B
+ 本モジュールには mod_proxy が必要です。
+ CONNECT
HTTP メソッドをサポートします。
+ このメソッドは主にプロキシに SSL リクエストを通す
+ SSLトンネリングに使われます。
- CONNECT
$B%j%/%(%9%H$r07$($k$h$&$K$9$k$K$O(B
- mod_proxy $B$H(B mod_proxy_connect
- $B$r%5!<%P$KAH$_9~$`I,MW$,$"$j$^$9!#(B
+ CONNECT
リクエストを扱えるようにするには
+ mod_proxy と mod_proxy_connect
+ をサーバに組み込む必要があります。
- $B7Y9p(B
+ 警告
$B0BA4$J%5!<%P$K$9$k(B$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
+ >安全なサーバにするまでプロキシ機能は有効にしないでください。
+ オープンプロキシサーバはあなた自身のネットワークにとっても、
+ インターネット全体にとっても危険です。
AllowCONNECT
diff --git a/docs/manual/mod/mod_setenvif.xml.ja b/docs/manual/mod/mod_setenvif.xml.ja
index 4c7902cc2b..af657dc0cc 100644
--- a/docs/manual/mod/mod_setenvif.xml.ja
+++ b/docs/manual/mod/mod_setenvif.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,34 +23,34 @@
mod_setenvif
-$B%j%/%(%9%H$NFCD'$K4p$E$$$?4D6-JQ?t$N@_Dj$r2DG=$K$9$k(B
+リクエストの特徴に基づいた環境変数の設定を可能にする
Base
mod_setenvif.c
setenvif_module
mod_setenvif
- $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
+ モジュールは、リクエストのある側面が指定された正規表現
+ に合うかどうかによって環境変数を設定する機能を提供します。
+ これらの環境変数を使用して、サーバの他の部分がどのような動作をするかを
+ 決定することができます。
- $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!"netscape $B$r@_Dj$7$^$9!#(B
+ このモジュールが提供するディレクティブは、
+ 設定ファイルに現れる順番に適用されます。
+ それを使って、次の例のようにより複雑な設定をすることができます。
+ これは、ブラウザが mozilla ではあるけれど、MSIE ではないときに
+ netscape
を設定します。
BrowserMatch ^Mozilla netscape
BrowserMatch MSIE !netscape
-Apache $B$N4D6-JQ?t(B
+Apache の環境変数
BrowserMatch
-HTTP User-Agent $B$K4p$E$$$F4D6-JQ?t$r@_Dj$9$k(B
+HTTP User-Agent に基づいて環境変数を設定する
BrowserMatch regex [!]env-variable[=value]
[[!]env-variable[=value]] ...
@@ -60,17 +60,17 @@
FileInfo
- BrowserMatch $B$O(B
- SetEnvIf $B%G%#%l%/%F%#%V$N(B
- $BFCNc$G!"(BUser-Agent
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:
+ BrowserMatch は
+ SetEnvIf ディレクティブの
+ 特例で、User-Agent
HTTP リクエストヘッダに基づいて
+ 環境変数を設定します。以下の 2 行の効果は同じになります:
BrowserMatchNoCase Robot is_a_robot
SetEnvIfNoCase User-Agent Robot is_a_robot
- $B$=$NB>$NNc(B:
+ その他の例:
BrowserMatch ^Mozilla forms jpeg=yes browser=netscape
BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript
@@ -81,37 +81,37 @@
BrowserMatchNoCase
-HTTP User-Agent $B$K4p$E$$$FBgJ8;z>.J8;z$r6hJL$;$:$K(B
-$B4D6-JQ?t$r@_Dj$9$k(B
+HTTP User-Agent に基づいて大文字小文字を区別せずに
+環境変数を設定する
BrowserMatchNoCase regex [!]env-variable[=value]
[[!]env-variable[=value]] ...
server config
virtual hostdirectory
.htaccess
FileInfo
-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)
+Apache 1.2 以降
+ (Apache 1.2 ではこのディレクティブはもう用いられていない
+ mod_browser モジュールにありました)
- BrowserMatchNoCase $B%G%#%l%/%F%#%V$O(B
- $B0UL#E*$K$O(B BrowserMatch $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:
+ BrowserMatchNoCase ディレクティブは
+ 意味的には BrowserMatch ディレクティブと
+ 同じです。ただし、このディレクティブは大文字小文字を区別しない
+ マッチングを行ないます。例えば:
BrowserMatchNoCase mac platform=macintosh
BrowserMatchNoCase win platform=windows
- BrowserMatch $B%G%#%l%/%F%#%V$H(B
- BrowserMatchNoCase $B%G%#%l%/%F%#%V$O(B
- SetEnvIf $B%G%#%l%/%F%#%V$H(B
+
BrowserMatch ディレクティブと
+ BrowserMatchNoCase ディレクティブは
+ SetEnvIf ディレクティブと
SetEnvIfNoCase $B%G%#%l%/%F%#%V$N(B
- $BFCNc$G$9!#0J2<$N(B 2 $B9T$N8z2L$OF1$8$G$9(B:
+ module="mod_setenvif">SetEnvIfNoCase ディレクティブの
+ 特例です。以下の 2 行の効果は同じです:
BrowserMatchNoCase Robot is_a_robot
@@ -122,7 +122,7 @@
SetEnvIf
-$B%j%/%(%9%H$NB0@-$K4p$E$$$F4D6-JQ?t$r@_Dj$9$k(B
+リクエストの属性に基づいて環境変数を設定する
SetEnvIf attribute
regex [!]env-variable[=value]
@@ -134,60 +134,60 @@
SetEnvIf
- $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 attribute $B$O0J2<$N;0$D$N$I$l$+$G$9(B:
+ ディレクティブは、リクエストの属性に基づいて環境変数を定義します。
+ 最初の引数で指定できる attribute は以下の三つのどれかです:
-- HTTP $B%j%/%(%9%H%X%C%@%U%#!<%k%I(B ($B>\$7$$>pJs$O(B RFC 2616 $B$r(B
- $B;2>H$7$F$/$@$5$$(B)$B!#Nc$($P!"(B
Host
,
+ - HTTP リクエストヘッダフィールド (詳しい情報は RFC 2616 を
+ 参照してください)。例えば、
Host
,
User-Agent
, Referer
,
- Accept-Language
$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
+ Accept-Language
です。リクエストヘッダの集合を現すために
+ 正規表現を使うこともできます。
-- $B0J2<$N%j%/%(%9%H$N0lItJ,$N$I$l$+(B:
+
- 以下のリクエストの一部分のどれか:
Remote_Host
-
- $B%j%/%(%9%H$r9T$J$C$F$$$k%/%i%$%"%s%H$N%[%9%HL>(B ($B$b$7$"$l$P(B)
+ リクエストを行なっているクライアントのホスト名 (もしあれば)
Remote_Addr
-
- $B%j%/%(%9%H$r9T$J$C$F$$$k%/%i%$%"%s%H$N(B IP $B%"%I%l%9(B
+ リクエストを行なっているクライアントの IP アドレス
Server_Addr
-
- $B%j%/%(%9%H$r
+ リクエストを受け取ったサーバの IP アドレス
+ (2.0.43 以降のみ)
Request_Method
-
- $B;HMQ$5$l$F$$$k%a%=%C%IL>(B (GET
, POST
- $B$J$I(B)
+ 使用されているメソッド名 (GET
, POST
+ など)
Request_Protocol
-
- $B%j%/%(%9%H$,9T$J$o$l$?%W%m%H%3%k$NL>A0$H%P!<%8%g%s(B
- ($BNc$($P(B$B!"(B"HTTP/0.9", "HTTP/1.1" $B$J$I!#(B)
+ リクエストが行なわれたプロトコルの名前とバージョン
+ (例えば、"HTTP/0.9", "HTTP/1.1" など。)
Request_URI
-
- URL $B$N%9%-!<%`$H%[%9%H$N8e$NItJ,(B
+ URL のスキームとホストの後の部分
-- $B%j%/%(%9%H$H4XO"IU$1$i$l$k4D6-JQ?t$N%j%9%H!#$3$l$K$h$j(B
-SetEnvIf $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
-
SetEnvIf[NoCase]
$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
-attribute $B$K@55,I=8=$,;H$o$l$J$+$C$?$H$-$K$N$_9MN8$5$l$^$9!#(B
+- リクエストと関連付けられる環境変数のリスト。これにより
+SetEnvIf ディレクティブが以前のマッチの結果を
+使うことができるようになります。この方法のテストでは前の部分にある
+
SetEnvIf[NoCase]
の結果のみを使用可能です。「前」とは、
+より広い範囲に対して定義されている (サーバ全体のように) か、現在のディレクティブの
+範囲でより前の部分で定義されているか、ということです。
+環境変数である可能性は、リクエストの特性に対するマッチが存在せず、
+attribute に正規表現が使われなかったときにのみ考慮されます。
-$BFs$DL\$N0z?t(B (regex) $B$O(B Perl $B8_49$N@55,I=8=(B$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!#(Bregex $B$,(B
-attribute $B$K%^%C%A$9$k>l9g$O!";D$j$N0z?t$,I>2A$5$l$^$9!#(B
+二つ目の引数 (regex) は Perl 互換の正規表現です。
+これは POSIX.2 の egrep 形式の正規表現と似ています。regex が
+attribute にマッチする場合は、残りの引数が評価されます。
-$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
+残りの引数は設定する変数の名前で、設定される値を指定することもできます。
+これは、
varname
@@ -197,17 +197,17 @@ href="http://www.pcre.org/">Perl $B8_49$N@55,I=8=(B$B$G$9!#(B
varname=value
- $B$N$I$l$+$N7A<0$K$J$j$^$9!#(B
+ のどれかの形式になります。
- $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$rvalue $B$NM?$($i$l$?CM$K@_Dj$7$^$9!#(B
- 2.0.51 $B0J9_$G$O!"(Bregex $BFb$K(B $1
..$9
- $B$,B8:_$9$l$P$=$l$rG'<1$7!"(Bregex $B$NBP1~$9$k4]3g8L$G0O$^$l$?ItJ,$G(B
- $BCV49$7$^$9!#(B
+ 最初の形式では、値は "1" に設定されます。
+ 二つ目はもし値が定義されていればそれを取り除きます。
+ 三つ目は変数を value
の与えられた値に設定します。
+ 2.0.51 以降では、regex 内に $1
..$9
+ が存在すればそれを認識し、regex の対応する丸括弧で囲まれた部分で
+ 置換します。
-$BNc(B:
+例:
SetEnvIf Request_URI "\.gif$" object_is_image=gif
SetEnvIf Request_URI "\.jpg$" object_is_image=jpg
SetEnvIf Request_URI "\.xbm$" object_is_image=xbm
@@ -219,22 +219,22 @@ href="http://www.pcre.org/">Perl $B8_49$N@55,I=8=(B$B$G$9!#(B
SetEnvIf ^TS* ^[a-z].* HAVE_TS
- $B=i$a$N;0$D$O%j%/%(%9%H$,2hA|$G$"$k$H$-$K4D6-JQ?t(B
- object_is_image
$B$r@_Dj$7$^$9!#;M$DL\$O(B
- $B;2>H85$N%Z!<%8$,%&%'%V%5%$%H(B www.mydomain.com
$B$K$"$k$H$-$K(B
- intra_site_referral
$B$r@_Dj$7$^$9!#(B
+ 初めの三つはリクエストが画像であるときに環境変数
+ object_is_image
を設定します。四つ目は
+ 参照元のページがウェブサイト www.mydomain.com
にあるときに
+ intra_site_referral
を設定します。
- $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 HAVE_TS
$B$r@_Dj$7$^$9!#(B
+ 最後の例は、リクエストに "TS" で始まり、値が集合 [a-z] のどれかで
+ 始まるヘッダがあるときに HAVE_TS
を設定します。
-$BB>$NNc$O!"(BApache $B$N4D6-JQ?t(B
+他の例は、Apache の環境変数
SetEnvIfNoCase
-$B%j%/%(%9%H$NB0@-$K4p$E$$$FBgJ8;z>.J8;z$r6hJL$;$:$K4D6-JQ?t$r@_Dj$9$k(B
+リクエストの属性に基づいて大文字小文字を区別せずに環境変数を設定する
SetEnvIfNoCase attribute regex
[!]env-variable[=value]
[[!]env-variable[=value]] ...
@@ -242,23 +242,23 @@ href="http://www.pcre.org/">Perl $B8_49$N@55,I=8=(B$B$G$9!#(B
virtual hostdirectory
.htaccess
FileInfo
-Apache 1.3 $B0J9_(B
+Apache 1.3 以降
- SetEnvIfNoCase $B$O0UL#E*$K$O(B
- SetEnvIf $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:
+ SetEnvIfNoCase は意味的には
+ SetEnvIf ディレクティブと
+ 同じです。違いは、正規表現のマッチングが大文字小文字を区別しないで
+ 行なわれることです。例えば:
SetEnvIfNoCase Host Apache\.Org site=apache
- $B$3$l$O(B HTTP $B%j%/%(%9%H%X%C%@$K%U%#!<%k%I(B Host:
$B$,(B
- $B$"$j!"$=$NCM$,(B Apache.Org
$B$d(B apache.org
$B!"(B
- $B$=$NB>$NBgJ8;z>.J8;z$NAH$_9g$o$;$G$"$C$?$H$-$K(B site
- $B4D6-JQ?t$r(B "apache
" $B$K@_Dj$7$^$9!#(B
+ これは HTTP リクエストヘッダにフィールド Host:
が
+ あり、その値が Apache.Org
や apache.org
、
+ その他の大文字小文字の組み合わせであったときに site
+ 環境変数を "apache
" に設定します。
diff --git a/docs/manual/mod/mod_so.xml.ja b/docs/manual/mod/mod_so.xml.ja
index 24b8e9c627..7df17bde0b 100644
--- a/docs/manual/mod/mod_so.xml.ja
+++ b/docs/manual/mod/mod_so.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,107 +23,107 @@
mod_so
-$B5/F0;~$d:F5/F0;~$K起動時や再起動時に実行コードとモジュールをサーバにロードする
Extension
mod_so.c
so_module
-$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
+このモジュールは Window では (常に含まれている) Base
+モジュールです
- $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
- $BF0E*6&M-%*%V%8%'%/%H(B
- (DSO) $B5!9=$K$h$j!"
+ いくつかのオペレーティングシステムでは、サーバの再コンパイルをする代わりに、
+ このモジュールを使用して
+ 動的共有オブジェクト
+ (DSO) 機構により、実行時に Apache にモジュールを読み込ませることが
+ できます。
- Unix $B>e$G$O!"FI$_9~$^$l$k%3!<%I$ODL>o$O6&M-%*%V%8%'%/%H%U%!%$%k(B
- ($BIaDL(B .so
$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 .so
$B$+(B .dll
- $B$G$9!#(B
+ Unix 上では、読み込まれるコードは通常は共有オブジェクトファイル
+ (普通 .so
という拡張子が付いています) からです。
+ Windows 上ではこのモジュールの拡張子は .so
か .dll
+ です。
- $B7Y9p(B
- 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
+ 警告
+ Apache 1.3 のモジュールを直接 Apache 2.0 で使うことはできません
+ ― モジュールは Apache 2.0 用に動的にロードされるか、
+ 直接組み込まれるために修正されなければなりません。
-Windows $BMQ$N%m!<%I2DG=$J%b%8%e!<%k$r:n@.$9$k(B
+Windows 用のロード可能なモジュールを作成する
- $BCm(B
- 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
+ 注
+ Apache 1.3.15 と 2.0 とで Windows のモジュール名の形式は変更されました
+ ― モジュールは mod_foo.so という名前になりました。
- $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
+ まだ mod_so で ApacheModuleFoo.dll という名前のモジュールも
+ ロードされますが、新しい名前の付け方を使う方が好まれます。モジュールを
+ 2.0 用に移植しているのであれば、2.0 の習慣に合うように名前を
+ 修正してください。
- 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
+ Apache のモジュール API は UNIX と Windows 間では変更されていません。
+ 多くのモジュールは全く変更なし、もしくは簡単な変更により Windows
+ で実行できるようになります。ただし、それ以外の Windows には無い Unix
+ アーキテクチャーの機能に依存したモジュールは動作しません。
- $B%b%8%e!<%k$,Configure
- $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
- os\win32\modules.c
$B%U%!%$%k$KDI2C$9$kI,MW$,$"$j$^$9!#(B
+ モジュールが実際に動作するときは、
+ 二つの方法のどちらかでサーバに追加することができます。まず、Unix
+ と同様にサーバにコンパイルして組み込むことができます。Windows
+ 用の Apache は Unix 用の Apache にある Configure
+ プログラムがありませんので、モジュールのソースファイルを
+ ApacheCore プロジェクトファイルに追加し、シンボルを
+ os\win32\modules.c
ファイルに追加する必要があります。
- $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!"二つ目はモジュールを DLL としてコンパイルする方法です。
+ DLL は共有ライブラリで、実行時に
LoadModule
- $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
+ ディレクティブによりサーバに読み込むことができます。これらのモジュール
+ DLL はそのまま配布することが可能で、サーバを再コンパイルすることなく、Windows
+ 用の Apache のすべてのインストールで実行することができます。
- $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!"(BAP_MODULE_DECLARE_DATA
(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
+ モジュール DLL を作成するためには、
+ モジュールの作成に小さな変更を行なう必要があります。
+ つまり、モジュールのレコード (これは後で作成されます。
+ 以下を参照してください) が DLL からエクスポートされなければなりません。
+ これを行なうには、AP_MODULE_DECLARE_DATA
(Apache
+ のヘッダファイルで定義されています) をモジュールのモジュールレコード
+ 定義の部分に追加してください。たとえば、モジュールに
module foo_module;
- $B$,$"$k$H$9$k$H!"$=$l$r
+
があるとすると、それを次のもので置き換えてください。
module AP_MODULE_DECLARE_DATA foo_module;
- 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.DEF
- $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
- $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
+ Unix 上でもこのモジュールを
+ 変更無しで使い続けられるように、このマクロは Windows
+ 上でのみ効力を持ちます。.DEF
+ ファイルの方を良く知っているという場合は、
+ 代わりにそれを使ってモジュールレコードを
+ エクスポートすることもできます。
+ さあ、あなたのモジュールの DLL を作成しましょう。これを、
+ libhttpd.lib 共有ライブラリがコンパイルされたときに作成された
+ ibhttpd.lib エクスポートライブラリとリンクしてください。この時に、
+ Apache のヘッダファイルが正しい位置にあるように、
+ コンパイラの設定を変える必要があるかもしれません。
+ このライブラリはサーバルートの modules ディレクトリにあります。
+ ビルド環境が正しく設定されるように、既存のモジュール用の .dsp を
+ 取ってくるのが一番良いでしょう。もしくは、あなたの .dsp と
+ コンパイラとリンクのオプションを比較する、というものでも良いです。
- $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 modules
- $B%G%#%l%/%H%j$K%b%8%e!<%k$rCV$$$F!"(B
+
これで DLL 版のモジュールが作成されているはずです。
+ サーバルートの modules
+ ディレクトリにモジュールを置いて、
LoadModule
- $B%G%#%l%/%F%#%V$r;H$C$FFI$_9~$s$G$/$@$5$$!#(B
+ ディレクティブを使って読み込んでください。
LoadFile
-$B;XDj$5$l$?%*%V%8%'%/%H%U%!%$%k$d%i%$%V%i%j$r%j%s%/$9$k(B
+指定されたオブジェクトファイルやライブラリをリンクする
LoadFile filename [filename] ...
server config
@@ -131,13 +131,13 @@
- 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!#(BFilename $B$O@dBP%Q%9$+!"(BServerRoot $B$+$i$NAjBP%Q%9$G$9!#(B
+ LoadFile ディレクティブは、サーバが起動されたときや再起動されたときに、
+ 指定されたオブジェクトファイルやライブラリをリンクします。
+ これはモジュールが動作するために必要になるかもしれない追加の
+ コードを読み込むために使用されます。Filename は絶対パスか、ServerRoot からの相対パスです。
- $BNc(B:
+ 例:
LoadFile libexec/libxmlparse.so
@@ -146,8 +146,8 @@
LoadModule
-$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
+オブジェクトファイルやライブラリをリンクし、使用モジュールの
+リストに追加する
LoadModule module filename
server config
@@ -155,20 +155,20 @@
- LoadModule $B%G%#%l%/%F%#%V$O(B filename
- $B$H$$$&%*%V%8%'%/%H%U%!%$%k$*$h$S%i%$%V%i%j$r%j%s%/$7!"(Bmodule
- $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
- Module $B$O%U%!%$%kCf$N(B module
- $B7?$N30ItJQ?t$NL>A0$G!"%b%8%e!<%k$N%I%-%e%a%s%H$K(B
+
LoadModule ディレクティブは filename
+ というオブジェクトファイルおよびライブラリをリンクし、module
+ という名前のモジュールの構造をアクティブなモジュールのリストに追加します。
+ Module はファイル中の module
+ 型の外部変数の名前で、モジュールのドキュメントに
$B%b%8%e!<%k<1JL;R(B$B$H$7$F=q$+$l$F$$$k$b$N$G$9!#Nc(B :
+ >モジュール識別子として書かれているものです。例 :
LoadModule status_module modules/mod_status.so
- $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
+ これは ServerRoot の modules サブディレクトリから指定された名前の
+ モジュールをロードします。
diff --git a/docs/manual/mod/mod_speling.xml.ja b/docs/manual/mod/mod_speling.xml.ja
index 4ee0d5eae9..71ff8d6a25 100644
--- a/docs/manual/mod/mod_speling.xml.ja
+++ b/docs/manual/mod/mod_speling.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,9 +23,9 @@
mod_speling
-$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
+ユーザが入力したであろう間違った URL を、
+大文字小文字の区別を無視することと一つ以下の綴り間違いを許容することで
+修正を試みる
Extension
mod_speling.c
speling_module
@@ -33,38 +33,38 @@
- $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
- $BBgJ8;z>.J8;z$N6hJL$rL5;k$7(B$B!"(B$B0lJ8;z$^$G$N(B
- $BDV$j$N4V0c$$(B ($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
+ リクエストの綴りが間違っていたり、
+ 大文字小文字が違っていたりするために、Apache のコアサーバが
+ ドキュメントへのリクエストへの応答を正しく提供できないことがあります。
+ このモジュールは、他のすべてのモジュールがあきらめた後であったとしても、
+ リクエストに合うドキュメントを見つけようとすることによりこの問題の
+ 解決を試みます。このモジュールはリクエストされたディレクトリにある
+ それぞれのドキュメントの名前と、リクエストされたドキュメントの名前とを
+ 大文字小文字の区別を無視し、一文字までの
+ 綴りの間違い (文字の挿入/省略/隣合う文字の置換、間違った文字)
+ を許可して比較することにより、目的を達成しようとします。
+ この方法でリクエストに合うドキュメントの一覧が作成されます。
- $B%G%#%l%/%H%j$r%9%-%c%s$7$?8e$K!"(B
+ ディレクトリをスキャンした後に、
- - $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
+ - 適切なドキュメントが見つからなかった場合、
+ Apache はいつもと同じように処理をし、
+ 「ドキュメントが見つからない」というエラーを返します。
- - $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
+ - リクエストに「ほとんど」合うドキュメントが一つだけ見つかった場合、
+ それがリダイレクト応答として返されます。
- - $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
+ - よく似たドキュメントが複数見つかった場合、
+ そのリストがクライアントに返され、
+ クライアントが正しい候補を選択できるようにします。
CheckSpelling
-spelling $B%b%8%e!<%k$r;HMQ$9$k$h$&$K$9$k(B
+spelling モジュールを使用するようにする
CheckSpelling on|off
CheckSpelling Off
@@ -74,43 +74,43 @@
.htaccess
Options
-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 CheckSpelling
-$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
+CheckSpelling は Apache 1.1 では別配布のモジュールで、
+大文字小文字の間違いのみの機能でした。Apache 1.3 で Apache の配布に
+含まれるようになりました。Apache 1.3.2 より前では CheckSpelling
+ディレクティブは「サーバ」と「バーチャルホスト」コンテキストでのみ
+使用可能でした
- $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
+ このディレクティブは綴り用のモジュールを使用するかどうかを
+ 決めます。使用時には、以下のことを覚えておいてください
- - $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
+ - 同時にたくさんの綴りの訂正を行なわなければならないときは、
+ そのために行なわれるディレクトリのスキャンがサーバの性能に
+ 影響を与えます。
- - $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
+
- ドキュメントの中に綴りの「訂正」により
+ 意図せず合ってしまうような重要なファイルがないようにしてください。
- - $B%b%8%e!<%k$O%f!<%6L>$NDV$j$N4V0c$$(B
- (
http://my.host/~apahce/
$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
+ - モジュールはユーザ名の綴りの間違い
+ (
http://my.host/~apahce/
のように)
+ を訂正することはできません。
+ 訂正できるのはファイル名とディレクトリ名だけです。
- - $BDV$j$ND{@5$OB8:_$9$k%U%!%$%k$K87L)$KE,MQ$5$l$^$9$N$G!"(B
+
- 綴りの訂正は存在するファイルに厳密に適用されますので、
<Location /status>
- $B$O%M%4%7%(!<%7%g%s$N7k2L$N%U%!%$%k(B "/stats.html
"
- $B$H$7$F4V0c$C$F07$o$l$k$+$b$7$l$^$;$s!#(B
+ はネゴシエーションの結果のファイル "/stats.html
"
+ として間違って扱われるかもしれません。
- DAV $B$,M-8z$J%G%#%l%/%H%j$G$O(B
- mod_speling $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 doc43.html
$B$,4{$KB8:_$9$k(B
- doc34.html
$B$K%j%@%$%l%/%H$5$l$F!"(B
- $B4|BT$H$O0c$&5sF0$K$J$k$+$i$G$9!#(B
+ DAV が有効なディレクトリでは
+ mod_speling は有効にしないでください。
+ 新しく作成したリソース名を既に存在するファイル名に「修正」しようとする、
+ 例えば、新規ドキュメント doc43.html
が既に存在する
+ doc34.html
にリダイレクトされて、
+ 期待とは違う挙動になるからです。
diff --git a/docs/manual/mod/mod_status.xml.ja b/docs/manual/mod/mod_status.xml.ja
index 39abac036e..a197b614a0 100644
--- a/docs/manual/mod/mod_status.xml.ja
+++ b/docs/manual/mod/mod_status.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -22,54 +22,54 @@
-->
mod_status
-$B%5!<%P$N3hF0>u67$H@-G=$K4X$9$k>pJs$rDs6!$9$k(B
+サーバの活動状況と性能に関する情報を提供する
Base
mod_status.c
status_module
- $B$3$N(B Status $B%b%8%e!<%k$K$h$j%5!<%P4IM}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$_
+ この Status モジュールによりサーバ管理者はサーバがどのくらい
+ の性能で動作しているかを知ることができるようになります。
+ 現時点でのサーバの統計情報を読みやすい形式で現した HTML ページが
+ 表示されます。必要であれば、このページは自動的にリフレッシュさせる
+ こともできます (互換性のあるブラウザを使用している場合)。
+ 別に、現時点でのサーバの状態を単純な機械読み取り可能なリストで
+ 現すページもあります。
- $BI=<($5$l$k>pJs$O(B:
+ 表示される情報は:
- - $B%j%/%(%9%H$r07$C$F$$$k%o!<%+!<$N?t(B
+ - リクエストを扱っているワーカーの数
- - $B%"%$%I%k(B ($BLuCm(B: $B%j%/%(%9%H$r07$C$F$$$J$$(B) $B%o!<%+!<$N?t(B
+ - アイドル (訳注: リクエストを扱っていない) ワーカーの数
- - $B3F%o!<%+!<$N>uBV!"%o!<%+!<$,07$C$?%j%/%(%9%H$N?t!"(B
- $B%o!<%+!<$,Aw$C$?Am%P%$%H?t(B (*)
+ - 各ワーカーの状態、ワーカーが扱ったリクエストの数、
+ ワーカーが送った総バイト数 (*)
- - $BAm%"%/%;%9?t$HAm%P%$%H?t(B (*)
+ - 総アクセス数と総バイト数 (*)
- - $B%5!<%P$,5/F0$b$7$/$O:F5/F0$5$l$?;~9o$HF0:n$7$F$$$k;~4V(B
+ - サーバが起動もしくは再起動された時刻と動作している時間
- - $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 (*)
+ - 平均の 1 秒あたりのリクエスト数、1 秒あたりの送られたバイト数、
+ リクエストあたりのバイト数 (*)
- - $B3F%o!<%+!<$H(B Apache $BA4BN$G;HMQ$5$l$F$$$k(B CPU $B$N3d9g(B (*)
+ - 各ワーカーと Apache 全体で使用されている CPU の割合 (*)
- - $B8=;~E@$N%[%9%H$H=hM}$5$l$F$$$k%j%/%(%9%H(B (*)
+ - 現時点のホストと処理されているリクエスト (*)
- "(*)" $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
+ "(*)" の付いている情報を表示するためにはコンパイル時のオプション
+ を使用する必要があります。これらの統計情報を得るために必要な
+ コードは標準の Apache には含まれていません。
- Status $B$r;HMQ2DG=$K$9$k(B
+ Status を使用可能にする
- 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 httpd.conf
$B@_Dj%U%!%$%k$KDI2C$7$^$9(B
+ foo.com ドメインからのブラウザのみに対して
+ ステータスの報告を使用可能にするには
+ 以下のコードを httpd.conf
設定ファイルに追加します
<Location /server-status>
SetHandler server-status
@@ -80,37 +80,37 @@
</Location>
- $B$3$l$G!"%5!<%P$NE}7W>pJs$r%&%'%V%V%i%&%6$r;H$C$F(B
- http://your.server.name/server-status
$B$r%"%/%;%9$9$k$3$H$K$h$j(B
- $BCN$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#(B
+ これで、サーバの統計情報をウェブブラウザを使って
+ http://your.server.name/server-status
をアクセスすることにより
+ 知ることができるようになります。
- $B<+F099?7(B
- $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
+
自動更新
+ ブラウザが「リフレシュ」機能をサポートしていれば、ステータスページを
+ 自動的に更新するようにできます。N 秒毎に更新させるためには
http://your.server.name/server-status?refresh=N
- $B$H$$$&%Z!<%8$r%"%/%;%9$7$F$/$@$5$$!#(B
+ というページをアクセスしてください。
- $B5!3#FI$_
- http://your.server.name/server-status?auto
$B$r(B
- $B%"%/%;%9$9$k$3$H$K$h$j!"%9%F!<%?%9%U%!%$%k$N5!3#FI$_/support $B%G%#%l%/%H%j$K$"$k(B
- Perl $B%W%m%0%i%`(B log_server_status
$B$r8+$F$/$@$5$$!#(B
+ 機械読み取り可能なステータスファイル
+ http://your.server.name/server-status?auto
を
+ アクセスすることにより、ステータスファイルの機械読み取り可能なバージョンを
+ 得ることができます。これは自動的に実行されるときに便利です。
+ Apache の /support
ディレクトリにある
+ Perl プログラム log_server_status
を見てください。
- mod_status $B$,%5!<%P$KAH$_9~$^$l$F$$$k(B
- $B>l9g!"%O%s%I%i$N5!G=$O%G%#%l%/%H%j(B$BKh(B$B$N%U%!%$%k(B
- ($B$9$J$o$A(B$B!"(B.htaccess
) $B$b4^$`(B$B$9$Y$F(B$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
+ mod_status がサーバに組み込まれている
+ 場合、ハンドラの機能はディレクトリ毎のファイル
+ (すなわち、.htaccess
) も含むすべての
+ 設定ファイルで使用可能になることには注意をしておく必要があります。
+ これは、サイトによってはセキュリティに関する望ましくない結果を
+ もたらすことがあるかもしれません。
@@ -118,16 +118,16 @@
ExtendedStatus
-$B3F%j%/%(%9%H$KBP$7$F3HD%%9%F!<%?%9>pJs$rJ]B8$9$k(B
+各リクエストに対して拡張ステータス情報を保存する
ExtendedStatus On|Off
ExtendedStatus Off
server config
-ExtendedStatus $B$O(B Apache 1.3.2 $B0J9_$G$N$_;HMQ2DG=(B
+ExtendedStatus は Apache 1.3.2 以降でのみ使用可能
- $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
+ この設定はサーバ全体に対して適用され、バーチャルホスト毎に
+ 変更することはできません。拡張ステータス情報の収集はサーバの
+ 動作を遅くすることがあります。
diff --git a/docs/manual/mod/mod_suexec.xml.ja b/docs/manual/mod/mod_suexec.xml.ja
index ab4d11a45b..6be14662e3 100644
--- a/docs/manual/mod/mod_suexec.xml.ja
+++ b/docs/manual/mod/mod_suexec.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,39 +23,39 @@
mod_suexec
-$B;XDj$5$l$?%f!<%6$H%0%k!<%W$G(B CGI $B%9%/%j%W%H$r
+指定されたユーザとグループで CGI スクリプトを実行する
Extension
mod_suexec.c
suexec_module
-Apache 2.0 $B0J9_$G;HMQ2DG=(B
+Apache 2.0 以降で使用可能
- $B$3$N%b%8%e!<%k$H(B suexec $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
+ このモジュールと suexec サポートプログラム
+ により、CGI スクリプトが指定されたユーザとグループで
+ 実行されるようにできます。
-SuEXEC $B%5%]!<%H(B
+SuEXEC サポート
SuexecUserGroup
-CGI $B%W%m%0%i%`$N%f!<%6%Q!<%_%C%7%g%s!"%0%k!<%W%Q!<%_%C%7%g%s(B
+CGI プログラムのユーザパーミッション、グループパーミッション
SuexecUserGroup User Group
server config
virtual host
-SuexecUserGroup $B$O(B 2.0 $B0J9_$G$N$_;HMQ2DG=!#(B
+SuexecUserGroup は 2.0 以降でのみ使用可能。
- SuexecUserGroup $B%G%#%l%/%F%#%V$O(B CGI $B%W%m%0%i%`(B
- $B$,
+ SuexecUserGroup ディレクティブは CGI プログラム
+ が実行されるユーザとグループを指定できるようにします。CGI 以外の
+ リクエストは User ディレクティブで指定されたユーザのままで処理されます。
+ このディレクティブは Apache 1.3 における VirtualHosts の中で
+ User ディレクティブと Group ディレクティブを使う用法の代わりになります。
- $BNc(B
+ 例
SuexecUserGroup nobody nogroup
diff --git a/docs/manual/mod/mod_unique_id.xml.ja b/docs/manual/mod/mod_unique_id.xml.ja
index 1704d0ff60..9fee392749 100644
--- a/docs/manual/mod/mod_unique_id.xml.ja
+++ b/docs/manual/mod/mod_unique_id.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,176 +23,176 @@
mod_unique_id
-$B$=$l$>$l$N%j%/%(%9%H$KBP$9$k0l0U$J<1JL;R$NF~$C$?4D6-JQ?t$r(B
-$BDs6!$9$k(B
+それぞれのリクエストに対する一意な識別子の入った環境変数を
+提供する
Extension
mod_unique_id.c
unique_id_module
- $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
- UNIQUE_ID
$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
+ このモジュールは非常に制限された条件下で、
+ それぞれのリクエストに「すべて」のリクエストに対して
+ 一意に決まることが保証されている魔法のトークンを提供します。
+ この一意な識別子は、適切に設定されたクラスタでは複数の
+ マシンの間でさえも一意になります。それぞれのリクエストに対して環境変数
+ UNIQUE_ID
に識別子が設定されます。
+ 一意な識別子が便利な理由はいろいろありますが、
+ このドキュメントの目的からは外れるため、ここでは説明しません。
- $BM}O@(B
+ 理論
- $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 httpd $B%W%m%;%9(B $B$H8F$S$^$9!#(B
+ まずはじめに、Apache サーバが Unix
+ マシンでどのように動作をするかを簡単に説明します。
+ この機能は現時点では Windows NT ではサポートされていません。
+ Unix マシンでは Apache はいくつかの子プロセスを作成し、
+ その子プロセスが一つずつリクエストを処理します。それぞれの子プロセスは、
+ 生存期間中に複数のリクエストを扱うことができます。
+ この議論では子プロセス間では一切データを共有しないことにします。
+ 以後、この子プロセスのことを httpd プロセス と呼びます。
- $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$rDj$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
+ あなたのウェブサイトにはあなたが管理するいくつかのマシンがあるとします。
+ それらをまとめてクラスタと呼ぶことにします。それぞれのマシンは複数の
+ Apache を実行することもできます。
+ これらすべてをまとめたものが「宇宙」であると考えられます。
+ いくつかの仮定の下で、クラスタのマシン間がたくさん通信をすることなく、
+ この宇宙の中でそれぞれのリクエストに一意な識別子を生成できることを示します。
- $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)
+ クラスタにあるマシンは以下の要求を見たさなければなりません。
+ (マシンが一つだけだとしても、NTP で時計を合わせる方が良いです。)
- - 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|$,
+
- NTP や他のネットワーク上で時間を合わせるプロトコルによって
+ 各マシンの時間の同期が取られていること。
- - $B%b%8%e!<%k$,%[%9%HL>$r0z$$$F0c$&(B IP
- $B%"%I%l%9$r$l$N%^%7%s$N%[%9%HL>$,0c$&$3$H!#(B
+ - モジュールがホスト名を引いて違う IP
+ アドレスを受け取ることができるように、
+ クラスタのそれぞれのマシンのホスト名が違うこと。
- $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
+ オペレーティングシステムにおいては、pid (プロセス ID) が
+ 32 ビットの範囲内であることを仮定します。オペレーティングシステムの
+ pid が 32 ビットを超える場合は、簡単な修正ではありますが、
+ コードを変更する必要があります。
- $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
+ これらの仮定が満たされていると、ある時点において、
+ クラスタ内のどのマシンのどの httpd
+ プロセスでも、一意に同定することができます。これはマシンの IP
+ アドレスと httpd プロセスの pid で十分に行なうことができます。
+ ですから、リクエストに一意な識別子を生成するためには、
+ 時刻を区別する必要があるだけです。
- $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
- ( ip_addr, pid, time_stamp, counter ) $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
+ 時刻を区別するために、Unix のタイムスタンプ (UTC の 1970 年
+ 1 月 1 日からの秒数) と、16 ビットのカウンタを使います。
+ タイムスタンプの粒度は一秒ですので、一秒間の 65536
+ までの値を表現するためにカウンタを使用します。四つの値
+ ( ip_addr, pid, time_stamp, counter ) で各 httpd
+ プロセスで一秒の間に 65536 リクエストを数えあげることができます。
+ 時間が経つと pid が再利用されるという問題がありますが、
+ この問題を解決するためにカウンタが使用されます。
- 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
+ httpd の子プロセスが作成されると、カウンタは
+ (その時点のマイクロ秒 ÷ 10) modulo 65536 で初期化されます
+ (この式はいくつかのシステムにある、マイクロ秒の
+ タイマの下位ビットが異なるという問題を解決するために選ばれました)。
+ 一意な識別子が生成されたとき、使用されるタイムスタンプは
+ ウェブサーバにリクエストが到着した時刻になります。
+ カウンタは識別子が生成されるたびに増加します
+ (あふれた場合は 0 に戻ります)。
- $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
+ カーネルはプロセスをフォークすると、それぞれのプロセスのために
+ pid を生成します。pid は繰り返されることが許可されています
+ (pid の値は多くの Unix では 16 ビットですが、新しいシステムでは
+ 32 ビットに拡張されています)。
+ ですから、ある程度の時間が経過すると同じ pid が再び使用されます。
+ しかし、一秒内に再使用されなければ、
+ 四つの値の一意性は保たれます。つまり、我々はシステムが一秒間
+ に 65536 個のプロセスを起動しないと仮定しています (いくつかの Unix
+ では 32768 プロセスですが、それですらほとんどあり得ないでしょう)。
- $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$B$9$J$o$A(B$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
+ 何らかの理由で、同じ時刻が繰り返されたとしましょう。
+ つまり、システムの時計が狂っていて、もう一度過去の時刻になってしまった
+ (もしくは進みすぎていたときに、
+ 正しい時刻に戻したために再び将来の時刻になってしまった) とします。
+ この場合、pid とタイムスタンプが再使用されることが簡単に示されます。
+ カウンタ初期化用の関数は、この問題の回避を手助けしようと選択されています。
+ 本当はカウンタの初期化をするためにランダムな数字を使いたいのですが、
+ ほとんどのシステムでは簡単に使用できる数は無いことに注意してください
+ (すなわち、rand ()は使えません。rand () には seed
+ を与える必要があり、seed には時刻を使えません。一秒単位では、
+ その時刻はすでに繰り返されているからです)。
+ これは、完璧な対策ではありません。
- $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$ro$KHa4QE*$JNc$G!"この対策はどのくらい効果があるでしょうか?
+ ここでは、マシン群の中の一つは最大で一秒に 500
+ リクエストを扱うと仮定します (これを書いている時点では妥当な上限です。
+ 通常システムがすることは静的なファイルを取りだすだけではありませんから)。
+ それを行なうために、そのマシンは並行して来るクライアントの数に
+ 応じた数の子プロセスを要求します。
+ しかしながら、悲観的に考えて、一つの子プロセスが一秒に 500
+ リクエストを扱えるとします。そうすると、(一秒の精度において)
+ 時刻が同じ時を繰り返すと、この子プロセスがカウンタの値を再び使い、
+ 一意性が壊れる可能性が 1.5% あります。
+ これは非常に悲観的な例で、実世界の値では、ほとんど起こりそうにありません。
+ それでもこれが起こる可能性のあるようなシステムなら、
+ (プログラムコードを編集して)
+ カウンタを 32 ビットにするのが良いでしょう。
- $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
+ サマータイムにより時計が「戻される」ことを気にしている人が
+ いるかもしれません。ここで使用される時間は UTC であり、
+ それは「常に」進むのでここでは問題になりません。x86 上の Unix
+ はこの条件を満たすために適切な設定が必要かもしれないことに
+ 注意してください。マザーボードの時計は UTC になっていて、
+ 他の時間はそこから適切に補正されることを仮定できるように
+ 設定されなければなりません。そのような場合でさえ、NTP
+ を使っているならばリブート後にすぐ正しい UTC の時間になるでしょう。
- UNIQUE_ID
$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 [A-Za-z0-9@-]
- $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[A-Za-z0-9+/] $B$G$9$,!"(B
- +
$B$H(B /
$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
- $BUNIQUE_ID
- $BA4BN$rF)2aE*$J%H!<%/%s$H$7$F07$&$Y$-$G$9!#(B
- UNIQUE_ID
$B$OB>$N(B UNIQUE_ID
- $B$H$NEy2A@-$rD4$Y$k$?$a$@$1$K$N$_;HMQ$G$-$^$9!#(B
+ UNIQUE_ID
環境変数は 112 ビット (32 ビット IP
+ アドレス、32 ビット pid, 32 ビットタイムスタンプ、16
+ ビットカウンタの四つの組) をアルファベット [A-Za-z0-9@-]
+ を用いて MIME の base64 符号化と同様の方法により符号化し、19
+ の文字を生成することにより作成されます。MIME の base64
+ のアルファベットは実際は [A-Za-z0-9+/]
ですが、
+ +
と /
とは URL
+ では特別な符号化が必要なので、あまり望ましくありません。
+ 全ての値はネットワークバイトオーダで符号化されますので、
+ 符号は違ったバイトオーダのアーキテクチャ間で比較可能です。
+ 実際の符号化の順番は: タイムスタンプ、IP アドレス、pid,
+ カウンタです。この順には目的がありますが、
+ アプリケーションは符号を解析するべきではないことを強調しておきます。
+ アプリケーションは符号化された UNIQUE_ID
+ 全体を透過的なトークンとして扱うべきです。
+ UNIQUE_ID
は他の UNIQUE_ID
+ との等価性を調べるためだけにのみ使用できます。
- $B$3$N=gHV$O>-Mh!"4{B8$N(B UNIQUE_ID
- $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\$B%U%i%0IC(B$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
+ この順番は将来、既存の UNIQUE_ID
+ のデータベースとの衝突を心配することなく符号を変更することが
+ 可能になるように選択しています。
+ 新しい符号はタイムスタンプを最初の要素として残すのが望ましく、
+ それ以外は同じアルファベットとビット長を使うことができます。
+ タイムスタンプは本質的に増加系列ですので、
+ クラスタの全てのマシンがリクエストとサーバ機能を停止して、
+ 古い符号化方式を使用するのをやめるフラグ秒があれば十分です。
+ その後は、リクエストを再開し、
+ 新しい符号を発行することができるようになります。
- $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$Oe!"L58B$KM-8z$G$9!#$^$?!"%/%i%9%?$N%^%7%s4V$NDL?.$b;veI,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
+ 我々はこれが、
+ この問題に対する比較的移植性の高い解決法だと考えています。
+ Windows NT のようなマルチスレッドのシステムに拡張することができますし、
+ 将来必要になればさらに増やすこともできます。
+ ID は必要に応じて長くすることができますので、生成された ID
+ は実質上、無限に有効です。また、クラスタのマシン間の通信も事実上必要なく
+ (NTP による同期のみが必要で、これはオーバヘッドはあまりありません)、httpd
+ プロセス間の通信も必要ありません (通信はカーネルにより割り当てられた
+ pid の値により暗黙の内に行なわています)。
+ さらに限られた状況下では、ID はさらに短くすることができますが、
+ より多くの情報を仮定する必要がでてきます (例えば、32 ビット
+ IP アドレスはどのサイトにおいても過剰な情報ですが、
+ それの代わりになる移植性のあるものはありません)。
diff --git a/docs/manual/mod/mod_userdir.xml.ja b/docs/manual/mod/mod_userdir.xml.ja
index b7a725bcb3..03b8add7b4 100644
--- a/docs/manual/mod/mod_userdir.xml.ja
+++ b/docs/manual/mod/mod_userdir.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,81 +23,81 @@
mod_userdir
-$B%f!<%6@lMQ$N%G%#%l%/%H%j$rDs6!(B
+ユーザ専用のディレクトリを提供
Base
mod_userdir.c
userdir_module
-$B$3$N%b%8%e!<%k$O!"(B
+
このモジュールは、
http://example.com/~user/
-$B9=J8$r;H$C$F%f!<%6@lMQ%G%#%l%/%H%j$K%"%/%;%9$G$-$k$h$&$K$7$^$9!#(B
+構文を使ってユーザ専用ディレクトリにアクセスできるようにします。
-URL $B$+$i(B
-$B%U%!%$%k%7%9%F%`$X$N%^%C%T%s%0(B
+URL から
+ファイルシステムへのマッピング
public_html
-$B%A%e!<%H%j%"%k(B
+チュートリアル
UserDir
-$B%f!<%6@lMQ%G%#%l%/%H%j$N0LCV(B
+ユーザ専用ディレクトリの位置
UserDir directory-filename
server config
virtual host
- UserDir $B%G%#%l%/%F%#%V$O!"(B
- $B%f!<%6$N%I%-%e%a%s%H$X$N%j%/%(%9%H$rdirectory-filename $B$K$O
+
UserDir ディレクティブは、
+ ユーザのドキュメントへのリクエストを受けた時に使う
+ ユーザのホームディレクトリ中の、実際のディレクトリを
+ 設定します。
+ directory-filename には次のどれかを指定します:
- - $B%G%#%l%/%H%jL>$+2<$K<($9$h$&$J%Q%?!<%s!#(B
+ - ディレクトリ名か下に示すようなパターン。
- disabled
$B%-!<%o!<%I!#(B
- enabled
$B%-!<%o!<%I(B ($B2<5-;2>H(B) $B$GL@<(E*$K(B
- $B;XDj$5$l$?%f!<%60J30$N(B
- $BA4$F$N(B$B%f!<%6L>(B-$B%G%#%l%/%H%jJQ49$r(B
- $B$7$J$$$h$&$K$7$^$9!#(B
+ disabled
キーワード。
+ enabled
キーワード (下記参照) で明示的に
+ 指定されたユーザ以外の
+ 全てのユーザ名-ディレクトリ変換を
+ しないようにします。
- disabled
$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
- enabled
$B@a$K$"$C$?$H$7$F$b!"(B
- $B7h$7$F(B$B%G%#%l%/%H%jJQ49$O9T$o$l$^$;$s!#(B
+ disabled
キーワードと、スペース区切りのユーザ名リスト。
+ このリスト中に含まれるユーザ名に対しては、たとえ
+ enabled
節にあったとしても、
+ 決してディレクトリ変換は行われません。
- enebled
$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!"(Bdisabled
$B@a$K$b$"$l$PJQ49$O$5$l$^$;$s!#(B
+ enebled
キーワードとスペース区切りのユーザ名リスト。
+ 全体では変換が無効になっていたといたとしても、
+ これらのユーザ名にはディレクトリ変換が行われます。
+ ただし、disabled
節にもあれば変換はされません。
- $B$b$7(B enabled
$B$b(B disabled
- $B%-!<%o!<%I$b(B UserDir
$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
+
もし enabled
も disabled
+ キーワードも UserDir
に現われていなければ、
+ 引数はファイル名パターンとして扱われ、
+ 名前からディレクトリへの変換の指定を行なう時に使われます。
http://www.foo.com/~bob/one/two.html
- $B$X$N%j%/%(%9%H$O
+ へのリクエストは次のように変換されます:
-UserDir $B%G%#%l%/%F%#%V(B |
-$BJQ498e$N%Q%9(B |
+UserDir ディレクティブ |
+変換後のパス |
UserDir public_html | ~bob/public_html/one/two.html |
UserDir /usr/web | /usr/web/bob/one/two.html |
UserDir /home/*/www | /home/bob/www/one/two.html |
- $B
+
次のディレクティブはクライアントに対してリダイレクトを
+ 送信します:
-UserDir $B%G%#%l%/%F%#%V(B |
-$BJQ498e$N%Q%9(B |
+UserDir ディレクティブ |
+変換後のパス |
UserDir http://www.foo.com/users | http://www.foo.com/users/bob/one/two.html |
UserDir
http://www.foo.com/*/usr | http://www.foo.com/bob/usr/one/two.html |
@@ -106,63 +106,63 @@ http://www.foo.com/~*/http://www.foo.com/~bob/one/two.html |
- $B$3$N%G%#%l%/%F%#%V$r;H$&$H$-$OCm0U$7$F$/$@$5$$(B;
- "UserDir ./
" $B$O(B
- "/~root
" $B$+$i(B "/
" $B$X%^%C%W$7$^$9$,!"(B
- $B$3$l$OK>$^$7$$F0:n$G$O$J$$$G$7$g$&!#(B
- "UserDir disabled root
" $B@k8@$r(B
- $B@_Dj$NCf$K4^$a$F$*$/$3$H$r6/$/$*A&$a$7$^$9!#(B
- $BDI2C>pJs$K(B Directory
- $B%G%#%l%/%F%#%V$d(B
- $B%;%-%e%j%F%#(B
- Tips $B$N%Z!<%8$b$4Mw2<$5$$!#(B
+ このディレクティブを使うときは注意してください;
+ "UserDir ./
" は
+ "/~root
" から "/
" へマップしますが、
+ これは望ましい動作ではないでしょう。
+ "UserDir disabled root
" 宣言を
+ 設定の中に含めておくことを強くお薦めします。
+ 追加情報に Directory
+ ディレクティブや
+ セキュリティ
+ Tips のページもご覧下さい。
-$BDI2C$NNc(B:
+追加の例:
-$B>/?t$N%f!<%6$N$_$,(B UserDir
-$B%G%#%l%/%H%j$rMxMQ$7!"$=$l0J30$K$OMxMQ$5$;$?$/$J$$>l9g$O(B
-$B
+
少数のユーザのみが UserDir
+ディレクトリを利用し、それ以外には利用させたくない場合は
+次を使いましょう:
UserDir disabled
UserDir enabled user1 user2 user3
-$BBgItJ,$N%f!<%6$O(B UserDir
$B%G%#%l%/%H%j$rMxMQ$9$k$1$l$I!"(B
-$B>/?t$N?M$OIT5v2D$K$7$?$$>l9g$O!"
+
大部分のユーザは UserDir
ディレクトリを利用するけれど、
+少数の人は不許可にしたい場合は、次を使いましょう:
UserDir enabled
UserDir disabled user4 user5 user6
-$BB>$N%f!<%6%G%#%l%/%H%j$r;XDj$9$k$3$H$b$G$-$^$9!#(B
-$B
+
他のユーザディレクトリを指定することもできます。
+次のようなコマンドを使うと:
Userdir public_html /usr/web http://www.foo.com/
-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
+
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
+へのリダイレクトを送ります。
-$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
+リダイレクトを加える場合は、リストの最後の選択肢でなければなりません。
+Apache はリダイレクトが成功するかどうかを決めることはできませんので、
+リストの前の方にリダイレクトを書くと、それが必ず使用される選択肢に
+なってしまいます。
-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!"(BUserDir
-$B%G%#%l%/%F%#%V$,B8:_$7$J$1$l$P!"(BUserDir public_html
-$B$G$"$k$H2>Dj$5$l$F$$$^$7$?!#(B
+2.1.4 以降では、ユーザディレクトリ置換機能はデフォルトでは起動しません。
+それ以前のバージョンでは、UserDir
+ディレクティブが存在しなければ、UserDir public_html
+であると仮定されていました。
public_html
-$B%A%e!<%H%j%"%k(B
+チュートリアル
diff --git a/docs/manual/mod/mod_version.xml.ja b/docs/manual/mod/mod_version.xml.ja
index a3de876511..d54861cb0f 100644
--- a/docs/manual/mod/mod_version.xml.ja
+++ b/docs/manual/mod/mod_version.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -22,21 +22,21 @@
mod_version
-$B%P!<%8%g%s0MB8$N@_Dj(B
+バージョン依存の設定
Extension
mod_version.c
version_module
-$B%P!<%8%g%s(B 2.1 $B0J9_(B
+バージョン 2.1 以降
- $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 IfVersion $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
+ 様々なバージョンの httpd の異なる設定を扱うことになる、
+ テストスイートや大規模ネットワークでの使用のために設計されています。
+ このモジュールは新しいコンテナ ― IfVersion を
+ 提供します。これを使うと、数字の比較や正規表現による柔軟な
+ バージョンチェックができるようになります。
- $BNc(B
+ 例
<IfVersion 2.1.0>
# current httpd version is exactly 2.1.0
@@ -50,12 +50,12 @@
</IfVersion>
- $B>\:Y$O0J2<$rFI$s$G$/$@$5$$!#(B
+ 詳細は以下を読んでください。
IfVersion
-$B%P!<%8%g%s0MB8$N@_Dj$rF~$l$k(B
+バージョン依存の設定を入れる
<IfVersion [[!]operator] version> ...
</IfVersion>
server configvirtual host
@@ -63,30 +63,30 @@
All
- IfVersion $B$O(B httpd $B$N%P!<%8%g%s(B
- $B$,4p=`$rK~$?$7$?$H$-$K$N$_o$N(B ($B?tCM(B) $BHf3S$N$H$-$O(B version $B0z?t$O(B
- major[.minor[.patch]]
$B$H$$$&(B
- $B7A<0!"Nc$($P!"(B2.1.0
$B$d(B 2.2
$B$H$J$j$^$9!#(B
- minor $B$H(B patch $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$Ooperator $B$r(B
- $B;XDj$G$-$^$9(B:
+ IfVersion は httpd のバージョン
+ が基準を満たしたときにのみ実行させたいディレクティブを囲みます。
+ 通常の (数値) 比較のときは version 引数は
+ major[.minor[.patch]]
という
+ 形式、例えば、2.1.0
や 2.2
となります。
+ minor と patch は省略可能です。省略された場合は、
+ 0 を指定したものとみなされます。比較には次の数値 operator を
+ 指定できます:
- operator | $B@bL@(B |
- = $B$H(B == |
- $BF1$8(B httpd $B%P!<%8%g%s(B |
+ operator | 説明 |
+ = と == |
+ 同じ httpd バージョン |
> |
- $B$h$jBg$-$$(B httpd $B%P!<%8%g%s(B |
+ より大きい httpd バージョン |
>= |
- $B;XDj0J>e$N(B httpd $B%P!<%8%g%s(B |
+ 指定以上の httpd バージョン |
< |
- $B;XDjL$K~$N(B httpd $B%P!<%8%g%s(B |
+ 指定未満の httpd バージョン |
<= |
- $B;XDj0J2<$N(B httpd $B%P!<%8%g%s(B |
+ 指定以下の httpd バージョン |
- $BNc(B
+ 例
<IfVersion >= 2.1>
# this happens only in versions greater or
@@ -95,20 +95,20 @@
</IfVersion>
- $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
+ 数値比較に加えて、http のバージョン番号に対して正規表現による
+ マッチングができます。二種類の書き方があります:
- operator | $B@bL@(B |
+ operator | 説明 |
= or == |
- version $B$O(B
- /regex/ $B7A<0(B |
+ version は
+ /regex/ 形式 |
~ |
- version $B$O(B
- regex $B7A<0(B |
+ version は
+ regex 形式 |
- $BNc(B
+ 例
<IfVersion = /^2.1.[01234]$/>
# e.g. workaround for buggy versions
@@ -116,8 +116,8 @@
</IfVersion>
- $B%^%C%A%s%0$NH]Dj$rI=8=$9$k$?$a$K!"$9$Y$F$N%*%Z%l!<%?$OA0$K(B
- $B46C2Id(B (!
)$B$rIU$1$k$3$H$,$G$-$^$9(B:
+ マッチングの否定を表現するために、すべてのオペレータは前に
+ 感嘆符 (!
)を付けることができます:
<IfVersion !~ ^2.1.[01234]$>
@@ -127,8 +127,8 @@
</IfVersion>
- operator $B$,>JN,$5$l$?$H$-$O(B =
$B$H(B
- $B$_$J$5$l$^$9!#(B
+ operator が省略されたときは =
と
+ みなされます。
diff --git a/docs/manual/mod/module-dict.xml.ja b/docs/manual/mod/module-dict.xml.ja
index 7a7b65fe48..fe19260e40 100644
--- a/docs/manual/mod/module-dict.xml.ja
+++ b/docs/manual/mod/module-dict.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -22,88 +22,88 @@
- Apache $B%b%8%e!<%k$N2r@b$G;HMQ$9$kMQ8l(B
+ Apache モジュールの解説で使用する用語
- $B$3$NJ8=q$O(B Apache $B$N3F(B $B%b%8%e!<%k(B $B$r@bL@$9$k$?$a$K(B
- $B;H$o$l$F$$$kMQ8l$r@bL@$7$^$9!#(B
+ この文書は Apache の各 モジュール を説明するために
+ 使われている用語を説明します。
-$B@bL@(B
+説明
-$B%b%8%e!<%k$NL\E*$NC;$$@bL@!#(B
+モジュールの目的の短い説明。
-$B%9%F!<%?%9(B
+ステータス
- $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@-$,
+ これは、そのモジュールが Apache
+ ウェブサーバにどれくらい密接に組み込まれているかを示します。
+ 言い換えれば、モジュールを組み込み、その機能を利用するために、
+ サーバを再コンパイルする必要があるかもしれないということを示します。
+ この属性が取り得る値は以下のものです:
- MPM
- - $B%9%F!<%?%9$,(B "MPM" $B$N%b%8%e!<%k$O(B$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B$B$G$9!#(B
- $BB>$No$K(B MPM $B$r0l$D$@$1(B
- $B;HMQ$7B3$1$^$9!#$3$N
+
- ステータスが "MPM" のモジュールはマルチプロセッシングモジュールです。
+ 他の種類のモジュールとは違って、Apache は常に MPM を一つだけ
+ 使用し続けます。この種類のモジュールは基本的なリクエストの扱いと
+ ディスパッチを行ないます。
- Base
- - $B%9%F!<%?%9$,(B "Base"
- $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
+
- ステータスが "Base"
+ のモジュールは、デフォルトでコンパイルされてわざわざ設定から
+ モジュールを削除していない限り、通常は利用可能です。
- Extension
- - $B%9%F!<%?%9$,(B "Extension" $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
+ - ステータスが "Extension" のモジュールは、
+ デフォルトではコンパイルされず、サーバにも読み込まれません。
+ そのモジュールとその機能を有効にするには、
+ サーバをビルドするための設定を変更して、Apache
+ を再コンパイルする必要があります。
- Experimental
- - $B%9%F!<%?%9$,(B "Experimental" $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
+ - ステータスが "Experimental" のモジュールは、
+ Apache 配布物に同梱されていますが、
+ 使用する場合は自己責任で行なう必要があります。
+ そのモジュールは、ドキュメントも完成に向けて作成中ですし、
+ サポートされるているとは限りません。
- External
- - $B%9%F!<%?%9$,(B "External" $B$N%b%8%e!<%k$O!"4pK\(B Apache
- $BG[I[$KF1:-$5$l$^$;$s(B ("$B%5!<%I%Q!<%F%#!<%b%8%e!<%k(B")$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
+ - ステータスが "External" のモジュールは、基本 Apache
+ 配布に同梱されません ("サードパーティーモジュール")。
+ そのため、我々に責任はありませんし、
+ そのモジュールのサポートもしていません。
-$B%=!<%9%U%!%$%k(B
+ソースファイル
- $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!"(BIfModule
- $B%G%#%l%/%F%#%V$G;HMQ$5$l$kL>A0$G$b$"$j$^$9!#(B
+
これは単純に、
+ そのモジュールに必要なコードを含むソースファイルの名前を列挙したものです。
+ これは、IfModule
+ ディレクティブで使用される名前でもあります。
-$B%b%8%e!<%k<1JL;R(B
+モジュール識別子
- $B$3$NJ8;zNs$O!"%b%8%e!<%k$NF0E*FI$_9~$_$r9T$J$&$H$-$K;HMQ$9$k(B この文字列は、モジュールの動的読み込みを行なうときに使用する LoadModule
- $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 タイプの外部変数の名前です。
-$B8_49@-(B
+互換性
- $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
+ あるモジュールが Apache バージョン 2
+ の配布に含まれていなかった場合、
+ そのモジュールが導入されたバージョンがここに書かれています。
+ また、モジュールが特定のプラットフォームにのみ存在するときも
+ 詳細はここに書かれています。
diff --git a/docs/manual/mod/mpm_common.xml.ja b/docs/manual/mod/mpm_common.xml.ja
index 0d29a0a005..552fe1031d 100644
--- a/docs/manual/mod/mpm_common.xml.ja
+++ b/docs/manual/mod/mpm_common.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,15 +23,15 @@
mpm_common
-$BFs$D0J>e$N%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)
-$B$G
+二つ以上のマルチプロセッシングモジュール (MPM)
+で実装されているディレクティブのコレクション
MPM
AcceptMutex
-$BJ#?t$N;R%W%m%;%9$,%M%C%H%o!<%/%=%1%C%H$G%j%/%(%9%H$r(B
-accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$?$a$K(B
-$B;H$&J}K!(B
+複数の子プロセスがネットワークソケットでリクエストを
+accept しようとしているときに、Apache がそれらの子プロセスを直列化するために
+使う方法
AcceptMutex Default|method
AcceptMutex Default
server config
@@ -40,223 +40,223 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
- AcceptMutex $B%G%#%l%/%F%#%V$O!"(B
- $B%M%C%H%o!<%/%=%1%C%H$N%j%/%(%9%H$r(B accept $B$7$h$&$H$7$F$$$kJ#?t$N;R%W%m%;%9$r(B
- Apache $B$,D>Ns2=$9$k$?$a$K;H$&J}K!(B($B$HI,MW$J$i%m%C%/%U%!%$%k$N>l=j(B)$B$r@_Dj$7$^$9!#(B
- Apache 2.0 $B0JA0$O!"$3$N%a%=%C%I$O%3%s%Q%$%k;~$K$N$_A*Br$G$-$^$7$?!#(B
- $B:GE,$JJ}K!$O!"%"!<%-%F%/%A%c$d%W%i%C%H%[!<%`$KBg$-$/0MB8$7$^$9!#(B
- $B>\:Y$K4X$7$F$O!"(B$B@-G=$N%A%e!<%K%s%0(B
- $B%I%-%e%a%s%H$r$4Mw2<$5$$!#(B
+ AcceptMutex ディレクティブは、
+ ネットワークソケットのリクエストを accept しようとしている複数の子プロセスを
+ Apache が直列化するために使う方法(と必要ならロックファイルの場所)を設定します。
+ Apache 2.0 以前は、このメソッドはコンパイル時にのみ選択できました。
+ 最適な方法は、アーキテクチャやプラットホームに大きく依存します。
+ 詳細に関しては、性能のチューニング
+ ドキュメントをご覧下さい。
- $B$3$N%G%#%l%/%F%#%V$,(B Default
- $B$K@_Dj$5$l$F$$$l$P!"%3%s%Q%$%k;~$KA*Br$5$l$?%G%U%)%k%HCM$,;H$o$l$^$9!#(B
- $BB>$N;HMQ2DG=$J%a%=%C%I$N0lMw$O2<$K$"$j$^$9!#(B
- $BA4$F$N%a%=%C%I$,A4$F$N%W%i%C%H%[!<%`$G;HMQ2DG=$G$"$k$o$1$G$O$J$$!"(B
- $B$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#(B
- $B;HMQ2DG=$G$J$$%a%=%C%I$,;XDj$5$l$?>l9g$O!"(B
- $B;HMQ2DG=$J%a%=%C%I$N0lMw$r4^$s$@%a%C%;!<%8$,(B
- $B%(%i!<%m%0$K=PNO$5$l$^$9!#(B
+ このディレクティブが Default
+ に設定されていれば、コンパイル時に選択されたデフォルト値が使われます。
+ 他の使用可能なメソッドの一覧は下にあります。
+ 全てのメソッドが全てのプラットホームで使用可能であるわけではない、
+ ということに注意してください。
+ 使用可能でないメソッドが指定された場合は、
+ 使用可能なメソッドの一覧を含んだメッセージが
+ エラーログに出力されます。
flock<:/path/to/lockfile>
- - $B%*%W%7%g%s$N(B /path/to/lockfile
- $B%Q%i%a!<%?$GDj5A$7$?%U%!%$%k$N%m%C%/$K!"(B
-
flock(2)
$B%7%9%F%`%3!<%k$r;H$$$^$9!#(B
- $B%m%C%/%U%!%$%k$N;XDj$K$O(B LockFile
- $B%G%#%l%/%F%#%V$r;H$&$3$H$b=PMh$^$9(B($BHs?d>)$G$9(B)$B!#(B
+ - オプションの /path/to/lockfile
+ パラメータで定義したファイルのロックに、
+
flock(2)
システムコールを使います。
+ ロックファイルの指定には LockFile
+ ディレクティブを使うことも出来ます(非推奨です)。
fcntl<:/path/to/lockfile>
- - $B%*%W%7%g%s$N(B /path/to/lockfile
- $B%Q%i%a!<%?$GDj5A$7$?%U%!%$%k$N%m%C%/$K!"(B
-
fcntl(2)
$B%7%9%F%`%3!<%k$r;H$$$^$9!#(B
- $B%m%C%/%U%!%$%k$N;XDj$K$O(B LockFile
- $B%G%#%l%/%F%#%V$r;H$&$3$H$b=PMh$^$9(B($BHs?d>)$G$9(B)$B!#(B
+ - オプションの /path/to/lockfile
+ パラメータで定義したファイルのロックに、
+
fcntl(2)
システムコールを使います。
+ ロックファイルの指定には LockFile
+ ディレクティブを使うことも出来ます(非推奨です)。
file<:/path/to/lockfile>
- - $B;HMQ$G$-$k%U%!%$%k%m%C%/%k!<%A%s$NCf$G:GE,$J$b$N$r;H$$$^$9!#(B
- $B6qBNE*$K$O!"(B
fcntl
$B$,;HMQ2DG=$J>l9g$O$=$l$r;H$$!"$=$&$G$J$$>l9g$O(B
- flock
$B$r;n$7$^$9!#(B
- $B$3$N@_Dj$O%W%i%C%H%[!<%`$H(B APR $B$,Fs$D$N$&$A>/$J$/$H$b(B
- $B0l$D$r%5%]!<%H$7$F$$$k>l9g$N$_;HMQ2DG=$G$9!#(B
+ - 使用できるファイルロックルーチンの中で最適なものを使います。
+ 具体的には、
fcntl
が使用可能な場合はそれを使い、そうでない場合は
+ flock
を試します。
+ この設定はプラットホームと APR が二つのうち少なくとも
+ 一つをサポートしている場合のみ使用可能です。
posixsem
- - $BGSB>=hM}$N
+
- 排他処理の実装に POSIX 互換セマフォを使用します
sysvsem
- - $BGSB>=hM}$N
+
- 排他処理の実装に SySV 形式のセマフォを使います。
sem
- - $B;HMQ$G$-$k%;%^%U%)%k!<%A%s$NCf$G:GE,$J$b$N$r;H$$$^$9!#(B
- $B6qBNE*$K$O!"(BPosix $B8_49%;%^%U%)$,;HMQ2DG=$J>l9g$O$=$l$r;H$$!"$=$&$G$J$$>l9g$O(B
- SystemV IPC $B7A<0$N%;%^%U%)$r;n$7$^$9!#(B
- $B$3$N@_Dj$O%W%i%C%H%[!<%`$H(B APR $B$,Fs$D$N$&$A>/$J$/$H$b(B
- $B0l$D$r%5%]!<%H$7$F$$$k>l9g$N$_;HMQ2DG=$G$9!#(B
+ - 使用できるセマフォルーチンの中で最適なものを使います。
+ 具体的には、Posix 互換セマフォが使用可能な場合はそれを使い、そうでない場合は
+ SystemV IPC 形式のセマフォを試します。
+ この設定はプラットホームと APR が二つのうち少なくとも
+ 一つをサポートしている場合のみ使用可能です。
pthread
- - POSIX Threads (PThreads) $B5,3J$G=hM}$r;H$$$^$9!#(B
+ - POSIX Threads (PThreads) 規格で実装されている
+ POSIX 排他処理を使います。
- $B%3%s%Q%$%k;~$K%7%9%F%`$N%G%U%)%k%H$KA*$P$l$?$b$N$,2?$+$r8+$?$$>l9g$O!"(B
- LogLevel $B$r(B debug
- $B$K@_Dj$9$k$H$h$$$G$7$g$&!#%G%U%)%k%H$N(B AcceptMutex
- $B$,(B ErrorLog $B$K=q$-9~$^$l$^$9!#(B
+ コンパイル時にシステムのデフォルトに選ばれたものが何かを見たい場合は、
+ LogLevel を debug
+ に設定するとよいでしょう。デフォルトの AcceptMutex
+ が ErrorLog に書き込まれます。
- $B7Y9p(B
- $B$[$H$s$I$N%7%9%F%`$K$*$$$F$O!"(Bpthread
$B%*%W%7%g%s$,(B
- $BA*$P$l$F$$$k$H!";R%W%m%;%9$,(B AcceptCntl
mutex $B$r(B
- $BJ];}$7$F$$$k$H$-$K0[>o=*N;$7$?>l9g!"%5!<%P$O%j%/%(%9%H$X$N1~Ez$r(B
- $BDd;_$7$F$7$^$$$^$9!#$3$l$,H/@8$7$?>l9g$O!"%5!<%P$rI|5l$5$;$k$?$a$K$O(B
- $B
+ 警告
+ ほとんどのシステムにおいては、pthread
オプションが
+ 選ばれていると、子プロセスが AcceptCntl
mutex を
+ 保持しているときに異常終了した場合、サーバはリクエストへの応答を
+ 停止してしまいます。これが発生した場合は、サーバを復旧させるためには
+ 手動で再起動させる必要があります。
- Solaris $B$ONc30$G!"(BApache $B$b;HMQ$7$F$$$k!";R%W%m%;%9$,(B mutex $B$r(B
- $BJ];}$7$F0[>o=*N;$7$?8e$K(B mutex $B$rI|5l$5$;$k$?$a$N5!9=$rDs6!$r$7$F$$$^$9!#(B
- $B8f;HMQ$N%7%9%F%`$,(B pthread_mutexattr_setrobust_np()
$B4X?t$r(B
- $Bl9g$O!"(Bpthread
$B%*%W%7%g%s$r0BA4$K;HMQ$G$-$k(B
- $B2DG=@-$,$"$j$^$9!#(B
+ Solaris は例外で、Apache も使用している、子プロセスが mutex を
+ 保持して異常終了した後に mutex を復旧させるための機構を提供をしています。
+ 御使用のシステムが pthread_mutexattr_setrobust_np()
関数を
+ 実装している場合は、pthread
オプションを安全に使用できる
+ 可能性があります。
CoreDumpDirectory
-Apache $B$,%3%"%@%s%W$9$kA0$K0\F0$r;n$_$k%G%#%l%/%H%j(B
+Apache がコアダンプする前に移動を試みるディレクトリ
CoreDumpDirectory directory
-$B%G%U%)%k%H$N@_Dj$O@bL@J8$rFI$s$G$/$@$5$$(B
+デフォルトの設定は説明文を読んでください
server config
beosleader
mpm_winntperchildprefork
threadpoolworker
- Apache $B$,%3%"%@%s%W$9$kA0$K0\F0$r;n$_$k%G%#%l%/%H%j$r@)8f$7$^$9!#(B
- $B%G%U%)%k%HCM$O(B ServerRoot
- $B%G%#%l%/%H%j$G$9$,!"$3$N%G%#%l%/%H%j$O%5!<%P$No$O%3%"%@%s%W$O=q$-9~$^$l$^$;$s!#(B
- $B%G%P%C%0$N$?$a$K%3%"%@%s%W$,I,MW$G$"$l$P!"(B
- $B$3$N%G%#%l%/%F%#%V$r;H$C$FB>$N0LCV$K%3%"%@%s%W$r=q$-=P$9$h$&$K$G$-$^$9!#(B
+ Apache がコアダンプする前に移動を試みるディレクトリを制御します。
+ デフォルト値は ServerRoot
+ ディレクトリですが、このディレクトリはサーバの実行されているユーザ権限で
+ 書き込み可能であるべきではないので、通常はコアダンプは書き込まれません。
+ デバッグのためにコアダンプが必要であれば、
+ このディレクティブを使って他の位置にコアダンプを書き出すようにできます。
- Linux $B$G$N%3%"%@%s%W(B
- Apache $B$,(B root $B$H$7$F5/F0$5$l$F!"JL$N%f!<%6$N8"8B$K0J9_$7$?>l9g$O(B
- Linux $B$N%+!<%M%k$O%G%#%l%/%H%j$,%W%m%;%9$N8"8B$G=q$-9~$_2DG=$J>l9g$G$5$($b(B
- $B%3%"%@%s%W$r(B$BL58z(B$B$K$7$^$9!#(BApache (2.0.46 $B0J9_(B) $B$O(B
- Linux 2.4 $B0J9_$G$O%3%"%@%s%W$r9T$J$&$h$&$K:F;XDj$7$^$9$,!"$=$l$O(B
- CoreDumpDirectory $B$rL@<(E*$K@_Dj$7$?$H$-$K(B
- $B8B$j$^$9!#(B
+ Linux でのコアダンプ
+ Apache が root として起動されて、別のユーザの権限に以降した場合は
+ Linux のカーネルはディレクトリがプロセスの権限で書き込み可能な場合でさえも
+ コアダンプを無効にします。Apache (2.0.46 以降) は
+ Linux 2.4 以降ではコアダンプを行なうように再指定しますが、それは
+ CoreDumpDirectory を明示的に設定したときに
+ 限ります。
EnableExceptionHook
-$B%/%i%C%7%e$N8e$KNc30%O%s%I%i$r
+クラッシュの後に例外ハンドラを実行するフックを有効にする
EnableExceptionHook On|Off
EnableExceptionHook Off
server config
leaderperchild
preforkthreadpool
worker
-2.0.49 $B0J9_(B
+2.0.49 以降
- $B0BA4>e$NM}M3$+$i!"(B--enable-exception-hook
configure
- $B%*%W%7%g%s$rM-8z$K$7$?>l9g$K$N$_!"$3$N%G%#%l%/%F%#%V$rMxMQ$G$-$^$9!#(B
- $B30It%b%8%e!<%k$r%W%i%0%$%s$7$F!";R$,%/%i%C%7%e$7$?8e$K2?$+
+ 安全上の理由から、--enable-exception-hook
configure
+ オプションを有効にした場合にのみ、このディレクティブを利用できます。
+ 外部モジュールをプラグインして、子がクラッシュした後に何か実行できるような
+ フックを有効にします。
- $B$3$N$h$&$J30It%b%8%e!<%k$O!"4{$KFs$DB8:_$7$F$$$F!"(B
- mod_whatkilledus
$B$H(B mod_backtrace
- $B$,$3$N%U%C%/$r3hMQ$7$^$9!#$3$l$i$N>\:Y$K$D$$$F$O(B Jeff Trawick
- $B$5$s$N(B EnableExceptionHook site $B$r;2>H$7$F$/$@$5$$!#(B
+ このような外部モジュールは、既に二つ存在していて、
+ mod_whatkilledus
と mod_backtrace
+ がこのフックを活用します。これらの詳細については Jeff Trawick
+ さんの EnableExceptionHook site を参照してください。
GracefulShutdownTimeout
-$B2:$d$+$JDd;_$r$+$1$?8e!"=*N;$9$k$^$GBT$D;~4V(B
+穏やかな停止をかけた後、終了するまで待つ時間
GracefulShutDownTimeout seconds
GracefulShutDownTimeout 0
server config
preforkworker
event
-2.2 $B0J9_(B
+2.2 以降
- GracefulShutdownTimeout $B$K$O(B
- $B%5!<%P!<$,(B "graceful-stop" $B%7%0%J%k$r
+
GracefulShutdownTimeout には
+ サーバーが "graceful-stop" シグナルを受け取ってから現在の
+ リクエストの処理を最大で何秒間続けるかを指定します。
- $B$3$NCM$r%<%m$K@_Dj$9$k$H!"=hM}Cf$H$7$F;D$C$F$$$k%j%/%(%9%H$,(B
- $BA4$F40N;$9$k$^$G%5!<%P!<$O=*N;$7$^$;$s!#(B
+ この値をゼロに設定すると、処理中として残っているリクエストが
+ 全て完了するまでサーバーは終了しません。
Group
-$B%j%/%(%9%H$K1~Ez$9$k:]$K=jB0$9$k%0%k!<%W(B
+リクエストに応答する際に所属するグループ
Group unix-group
Group #-1
server config
beosleader
mpmt_os2perchildprefork
threadpoolworker
-Apache 2.0 $B0J9_$G!"%0%m!<%P%k@_Dj$G$N$_M-8z$G$9!#(B
+Apache 2.0 以降で、グローバル設定でのみ有効です。
- Group $B%G%#%l%/%F%#%V$G!"(B
- $B%j%/%(%9%H$K1~Ez$9$k:]$K=jB0$7$F$*$/%0%k!<%W$r@_Dj$7$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$r;HMQ$9$k$?$a$K$O!"(B
- $B%5!<%P$O:G=i$K(B root
$B8"8B$G5/F0$5$l$F$$$kI,MW$,$"$j$^$9!#(B
- $BHs(B root $B%f!<%6$G%5!<%P$r5/F0$7$?>l9g$O!";XDj$7$?%0%k!<%W$KJQ2=$G$-$:$K!"(B
- $B7k2LE*$K5/F0$7$?%f!<%6$NB0$9$k%0%k!<%W$Gunix-group $B$O
+ Group ディレクティブで、
+ リクエストに応答する際に所属しておくグループを設定します。
+ このディレクティブを使用するためには、
+ サーバは最初に root
権限で起動されている必要があります。
+ 非 root ユーザでサーバを起動した場合は、指定したグループに変化できずに、
+ 結果的に起動したユーザの属するグループで実行されることになります。
+ unix-group は次のうちのいずれかです:
- - $B%0%k!<%WL>(B
- - $B%0%k!<%W$rL>A0$G;2>H$7$^$9(B
+ - グループ名
+ - グループを名前で参照します
- #
$B$KB3$$$F%0%k!<%WHV9f(B
- - $B%0%k!<%W$rHV9f$G;2>H$7$^$9!#(B
+ #
に続いてグループ番号
+ - グループを番号で参照します。
- $BNc(B
+ 例
Group www-group
- $B%5!<%P$rnobody $B$r;HMQ$9$k4IM}$^$7$$Lu$G$OI,$:$7$b$"$j$^$;$s!#(B
+ サーバを実行するために特定の新しいグループを設定することを
+ お薦めします。nobody
を使用する管理者もいますが、
+ 可能であったり望ましい訳では必ずしもありません。
- $B%;%-%e%j%F%#(B
- $B@53N$K$I$s$J$3$H$r$d$C$F$$$k$N$+!"$=$N4m81@-$rCN$i$J$$$G!"(B
- Group ($B$d(B User) $B$r(B
- root
$B$K(B $B@_Dj$7$J$$$G$/$@$5$$!#(B
+ セキュリティ
+ 正確にどんなことをやっているのか、その危険性を知らないで、
+ Group (や User) を
+ root
に 設定しないでください。
- $BFC5-;v9`(B: $B$3$N%G%#%l%/%F%#%V$r(B
+
特記事項: このディレクティブを
VirtualHost
- $B$G;HMQ$9$k$3$H$O%5%]!<%H$5$l$J$/$J$j$^$7$?!#(BApache 2.0 $B$G(B
- suexec $B$r@_Dj$7$?$$>l9g$O!"(B
+ で使用することはサポートされなくなりました。Apache 2.0 で
+ suexec を設定したい場合は、
SuexecUserGroup
- $B$r;HMQ$7$F$/$@$5$$!#(B
+ を使用してください。
- $BCm0U(B
- Group $B%G%#%l%/%F%#%V$O(B
- beos $B$H(B mpmt_os2 MPM
- $B$K$bB8:_$7$^$9$,!"
+ 注意
+ Group ディレクティブは
+ beos と mpmt_os2 MPM
+ にも存在しますが、実質的に無効で、互換性のためだけに存在します。
PidFile
-$B%G!<%b%s$N%W%m%;%9(B ID
-$B$r%5!<%P$,5-O?$9$k$?$a$N%U%!%$%k(B
+デーモンのプロセス ID
+をサーバが記録するためのファイル
PidFile filename
PidFile logs/httpd.pid
server config
@@ -266,40 +266,40 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
threadpoolworker
- PidFile $B%G%#%l%/%F%#%V$G!"(B
- $B%G!<%b%s$N%W%m%;%9(B ID $B$r%5!<%P$,5-O?$9$k%U%!%$%k$r@_Dj$7$^$9!#(B
- $B%U%!%$%kL>$,@dBP%Q%9$G$J$$>l9g$O!"(B
+
PidFile ディレクティブで、
+ デーモンのプロセス ID をサーバが記録するファイルを設定します。
+ ファイル名が絶対パスでない場合は、
ServerRoot
- $B$+$i$NAjBPE*$J$b$N$H$7$F07$o$l$^$9!#(B
+ からの相対的なものとして扱われます。
- $BNc(B
+ 例
PidFile /var/run/apache.pid
- $B%5!<%P$,(B ErrorLog
- $B$d(B TransferLog
- $B$rJD$8$F3+$-D>$7$?$j!"@_Dj%U%!%$%k$r(B
- $B:FFI9~$7$?$j$5$;$k$?$a$K!"%5!<%P$K%7%0%J%k$rAw$k$3$H$,$G$-$k$H(B
- $BJXMx$J$3$H$,$"$j$^$9!#(B
- $B$3$l$O(B SIGHUP (kill -1) $B%7%0%J%k$r(B PidFile
- $B$K=q$+$l$F$$$k%W%m%;%9(B ID $B$KAw$k$3$H$G$G$-$^$9!#(B
+ サーバが ErrorLog
+ や TransferLog
+ を閉じて開き直したり、設定ファイルを
+ 再読込したりさせるために、サーバにシグナルを送ることができると
+ 便利なことがあります。
+ これは SIGHUP (kill -1) シグナルを PidFile
+ に書かれているプロセス ID に送ることでできます。
- PidFile $B$K$O!"%m%0%U%!%$%k$N@_CV0LCV$d(B
- $B%;%-%e%j%F%#(B
- $B$HA4$/F1$8Cm0UE@$,$"$j$^$9!#(B
+ PidFile には、ログファイルの設置位置や
+ セキュリティ
+ と全く同じ注意点があります。
- $BCm0U(B
- Apache 2 $B$G$O!"(B
+ 注意
+ Apache 2 では、
apachectl
- $B%9%/%j%W%H$N$_$r;HMQ$7$F%5!<%P$N(B ($B:F(B) $B5/F0$dDd;_$r(B
- $B9T$J$&$3$H$r?d>)$7$F$$$^$9!#(B
+ スクリプトのみを使用してサーバの (再) 起動や停止を
+ 行なうことを推奨しています。
Listen
-$B%5!<%P$,(B listen $B$9$k(BIP $B%"%I%l%9$H%]!<%HHV9f(B
+サーバが listen するIP アドレスとポート番号
Listen [IP-address:]portnumber [protocol]
server config
beosleader
@@ -308,85 +308,85 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
preforkthreadpoolworker
event
-Apache 2.0 $B$+$iI,?\%G%#%l%/%F%#%V!#(Bprotocol
-$B0z?t$O(B 2.1.5 $B$GDI2C!#(B
+Apache 2.0 から必須ディレクティブ。protocol
+引数は 2.1.5 で追加。
- Listen $B%G%#%l%/%F%#%V$O(B Apache
- $B$,FCDj$N(B IP $B%"%I%l%9$d%]!<%HHV9f$@$1$r(B listen $B$9$k$h$&$K;XDj$7$^$9!#(B
- $B%G%U%)%k%H$G$OA4$F$N(B IP $B%$%s%?!<%U%'!<%9$N%j%/%(%9%H$K1~Ez$7$^$9!#(B
- Listen $B%G%#%l%/%F%#%V$O(B
- $B8=:_$OI,?\$N%G%#%l%/%F%#%V$H$J$j$^$7$?!#(B
- $B$b$7@_Dj%U%!%$%k$K$J$1$l$P!"%5!<%P$O5/F0$K<:GT$7$^$9!#(B
- $B$3$l$O0JA0$N%P!<%8%g%s$N(B Apache $B$+$iJQ99$N$"$C$?ItJ,$G$9!#(B
+ Listen ディレクティブは Apache
+ が特定の IP アドレスやポート番号だけを listen するように指定します。
+ デフォルトでは全ての IP インターフェースのリクエストに応答します。
+ Listen ディレクティブは
+ 現在は必須のディレクティブとなりました。
+ もし設定ファイルになければ、サーバは起動に失敗します。
+ これは以前のバージョンの Apache から変更のあった部分です。
- Listen $B%G%#%l%/%F%#%V$G$O!"FCDj$N%]!<%H$"$k$$$O(B
- $B%"%I%l%9$H%]!<%H$NAH$_9g$o$;$+$iF~$C$F$/$k%j%/%(%9%H$KBP$7$F(B
- $B1~Ez$9$k$h$&$K;XDj$7$^$9!#(B
- $B$b$7%]!<%HHV9f$@$1$,;XDj$5$l$?>l9g$O!"%5!<%P$OA4%$%s%?!<%U%'!<%9$N(B
- $B;XDj$5$l$?%]!<%HHV9f$KBP$7$F(B listen $B$7$^$9!#(B
- IP $B%"%I%l%9$,%]!<%H$H$H$b$K;XDj$5$l$?>l9g$O!"(B
- $B%5!<%P$O;XDj$5$l$?%]!<%H$H%$%s%?!<%U%'!<%9$KBP$7$F(B listen
- $B$7$^$9!#(B
+ Listen ディレクティブでは、特定のポートあるいは
+ アドレスとポートの組み合わせから入ってくるリクエストに対して
+ 応答するように指定します。
+ もしポート番号だけが指定された場合は、サーバは全インターフェースの
+ 指定されたポート番号に対して listen します。
+ IP アドレスがポートとともに指定された場合は、
+ サーバは指定されたポートとインターフェースに対して listen
+ します。
- $BJ#?t$N%"%I%l%9$H%]!<%H$KBP$7$F(B listen $B$9$k$h$&$K!"(B
- $BJ#?t$N(B Listen $B%G%#%l%/%F%#%V$r;H$&$3$H$b$G$-$^$9!#(B
- $B%5!<%P$ONs5s$5$l$?%"%I%l%9$H%]!<%HA4$F$+$i$N%j%/%(%9%H$KBP$7$F(B
- $B1~Ez$7$^$9!#(B
+ 複数のアドレスとポートに対して listen するように、
+ 複数の Listen ディレクティブを使うこともできます。
+ サーバは列挙されたアドレスとポート全てからのリクエストに対して
+ 応答します。
- $BNc$($P!"%5!<%P$,(B 80 $BHV%]!<%H$H(B 8000 $BHV%]!<%H$NN>J}$N(B
- $B%3%M%/%7%g%s$rl9g$O!"
+
例えば、サーバが 80 番ポートと 8000 番ポートの両方の
+ コネクションを受け入れる場合は、次のようにします。
Listen 80
Listen 8000
- $BFs$D$NFCDj$N%$%s%?!<%U%'!<%9$H%]!<%HHV9f$+$i$N%3%M%/%7%g%s$r(B
- $B
+
二つの特定のインターフェースとポート番号からのコネクションを
+ 受け入れるようにするには、次のようにします。
Listen 192.170.2.1:80
Listen 192.170.2.5:8000
- IPv6 $B%"%I%l%9$O3Q3g8L$G0O$^$J$1$l$P$J$j$^$;$s!#(B
- $BNc$($P
+
IPv6 アドレスは角括弧で囲まなければなりません。
+ 例えば次の例のようにです。
Listen [2001:db8::a00:20ff:fea7:ccea]:80
- protocol $B%*%W%7%g%s0z?t$ODL>o$N@_Dj$G$OI,MW$"$j$^$;$s!#(B
- $BL5;XDj$N>l9g!"(B443 $BHV%]!<%H$K$O(B https
$B$,!"B>$N%]!<%H$K$O(B
- http
$B$,%G%U%)%k%HCM$H$7$F;HMQ$5$l$^$9!#(B
- protocol $B;XDj$O!"$I$N%b%8%e!<%k$,%j%/%(%9%H$r=hM}$9$k$+$r7hDj$7!"(B
+
protocol オプション引数は通常の設定では必要ありません。
+ 無指定の場合、443 番ポートには https
が、他のポートには
+ http
がデフォルト値として使用されます。
+ protocol 指定は、どのモジュールがリクエストを処理するかを決定し、
AcceptFilter
- $B$K$h$k%W%m%H%3%kFCM-$N:GE,2=$r9T$&$h$&$K$7$^$9!#(B
+ によるプロトコル特有の最適化を行うようにします。
- $BHsI8=`$J%]!<%H$G1?MQ$7$F$$$k:]$K$N$_(B protocol $B;XDj$,I,MW$K$J$j$^$9!#(B
- $B$?$H$($P(B https
$B$J%5%$%H$r(B 8443 $BHV%]!<%H$G1?MQ$7$F$$$k>l9g(B :
+ 非標準なポートで運用している際にのみ protocol 指定が必要になります。
+ たとえば https
なサイトを 8443 番ポートで運用している場合 :
Listen 192.170.2.1:8443 https
- $B%(%i!<>r7o(B
- $BF10l(B IP $B%"%I%l%9$H%]!<%H$NAH$K!"J#?t$N(B Listen
- $B%G%#%l%/%F%#%V$r;XDj$7$F$7$^$&$H!"(BAddress already in use
- $B$H$$$&%(%i!<%a%C%;!<%8$rエラー条件
+ 同一 IP アドレスとポートの組に、複数の Listen
+ ディレクティブを指定してしまうと、Address already in use
+ というエラーメッセージを受けることになります。
-DNS $B$NLdBj(B
+DNS の問題
Apache
-$B$,;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj(B
+が使用するアドレスとポートの設定
ListenBackLog
-$BJ]N1>uBV$N%3%M%/%7%g%s$N%-%e!<$N:GBgD9(B
+保留状態のコネクションのキューの最大長
ListenBacklog backlog
ListenBacklog 511
server config
@@ -396,24 +396,24 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
threadpoolworker
- $BJ]N1>uBV$N%3%M%/%7%g%s$N%-%e!<$N:GBgD9$G$9!#(B
- $B0lHLE*$K$OD4@0$9$kI,MW$O$"$j$^$;$s$7!"D4@0$OK>$^$7$/$"$j$^$;$s!#(B
- $B$7$+$7!"(BTCP SYN $B%U%i%C%I%"%?%C%/$N>u672<$K$*$+$l$k>l9g$K!"(B
- $BA}$d$7$?J}$,K>$^$7$$%7%9%F%`$b$"$j$^$9!#(B
- listen(2)
$B%7%9%F%`%3!<%k$N%P%C%/%m%0%Q%i%a!<%?$r(B
- $B$4Mw2<$5$$!#(B
+ 保留状態のコネクションのキューの最大長です。
+ 一般的には調整する必要はありませんし、調整は望ましくありません。
+ しかし、TCP SYN フラッドアタックの状況下におかれる場合に、
+ 増やした方が望ましいシステムもあります。
+ listen(2)
システムコールのバックログパラメータを
+ ご覧下さい。
- $B$3$NCM$O(B OS $B$K$h$j!">.$5$J?t$KM^$($i$l$^$9!#(B
- $BCM$O(B OS $BKh$K0[$J$C$F$$$^$9!#$^$?B?$/$N(B OS $B$G$O!"(B
- $B%P%C%/%m%0$H$7$F;XDj$5$l$F$$$kCM$A$g$&$I$^$G;H$C$F$$$k$o$1$G$O$J$/!"(B
- $B@_Dj$5$l$F$$$kCM$K4p$E$$$F(B ($BDL>o$O@_DjCM$h$j$bBg$-$JCM$r(B)
- $B;H$C$F$$$k$3$H$KCm0U$7$F$/$@$5$$!#(B
+ この値は OS により、小さな数に抑えられます。
+ 値は OS 毎に異なっています。また多くの OS では、
+ バックログとして指定されている値ちょうどまで使っているわけではなく、
+ 設定されている値に基づいて (通常は設定値よりも大きな値を)
+ 使っていることに注意してください。
LockFile
-$BNs2=$9$k$?$a$N%m%C%/%U%!%$%k$N0LCV(B($BHs?d>)(B)
+受付を直列化するためのロックファイルの位置(非推奨)
LockFile filename
LockFile logs/accept.lock
server config
@@ -423,27 +423,27 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
AcceptMutex
- $B$,(B fcntl
$B$d(B flock
- $B$K@_Dj$5$l$F;HMQ$5$l$F$$$k>l9g$K!";HMQ$5$l$k%m%C%/%U%!%$%k$X$N%Q%9$r(B
- LockFile $B%G%#%l%/%F%#%V$G@_Dj$7$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$ODL>o$O$=$N$^$^$K$7$F$*$-$^$9!#(B
- $Blogs $B%G%#%l%/%H%j$,(B NFS
- $B$G%^%&%s%H$5$l$F$$$k>l9g$J$I$KCM$rJQ$($^$9!#(B
- $B$J$<$J$i(B$B%m%C%/%U%!%$%k$O%m!<%+%k%G%#%9%/$K(B
- $BJ]B8$5$l$J$1$l$P$J$i$J$$(B$B$+$i$G$9!#(B
- $B%a%$%s%5!<%P%W%m%;%9$N(B PID $B$,%U%!%$%kL>$K<+F0E*$KIU2C$5$l$^$9!#(B
+ が fcntl
や flock
+ に設定されて使用されている場合に、使用されるロックファイルへのパスを
+ LockFile ディレクティブで設定します。
+ このディレクティブは通常はそのままにしておきます。
+ 主に logs
ディレクトリが NFS
+ でマウントされている場合などに値を変えます。
+ なぜならロックファイルはローカルディスクに
+ 保存されなければならないからです。
+ メインサーバプロセスの PID がファイル名に自動的に付加されます。
- $B%;%-%e%j%F%#(B
+ セキュリティ
/var/tmp
- $B$H$$$C$?!"C/$G$b=q$-9~$a$k%G%#%l%/%H%j$K%U%!%$%k$r(B
- $BCV$+$J$$(B$BJ}$,$h$$$G$9!#$J$<$J$i!"%5!<%P$,5/F0;~$K:n@.$9$k(B
- $B%m%C%/%U%!%$%k$N:n@.<+BN$rK832$9$k$3$H$K$h$C$F!"(B
- $BC/$G$b%5!<%S%95qH]%"%?%C%/$r0z$-5/$3$9$3$H$,$G$-$k$+$i$G$9!#(B
+ といった、誰でも書き込めるディレクトリにファイルを
+ 置かない方がよいです。なぜなら、サーバが起動時に作成する
+ ロックファイルの作成自体を妨害することによって、
+ 誰でもサービス拒否アタックを引き起こすことができるからです。
- $BHs?d>)(B
- $B$3$N%G%#%l%/%F%#%V$OHs?d>)$G$9!#(B 非推奨
+ このディレクティブは非推奨です。 AcceptMutex
- $B%G%#%l%/%F%#%V$GGSB>=hM}$NJ}K!$N;XDj$H$H$b$K%m%C%/%U%!%$%k$N>l=j$b;XDj$7$F$/$@$5$$!#(B
+ ディレクティブで排他処理の方法の指定とともにロックファイルの場所も指定してください。
@@ -452,52 +452,52 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
MaxClients
-$B%j%/%(%9%H$K1~Ez$9$k$?$a$K:n@.$5$l$k(B
-$B;R%W%m%;%9$N:GBg8D?t(B
+リクエストに応答するために作成される
+子プロセスの最大個数
MaxClients number
-$B>\:Y$O;HMQK!$r$4Mw2<$5$$!#(B
+詳細は使用法をご覧下さい。
server config
beosleader
preforkthreadpoolworker
- MaxClients $B%G%#%l%/%F%#%V$O!"(B
- $B1~Ez$9$k$3$H$N$G$-$kF1;~%j%/%(%9%H?t$r@_Dj$7$^$9!#(B
- MaxClients $B@)8B?t$r1[$($k%3%M%/%7%g%s$ODL>o!"(B
+
MaxClients ディレクティブは、
+ 応答することのできる同時リクエスト数を設定します。
+ MaxClients 制限数を越えるコネクションは通常、
ListenBacklog
- $B%G%#%l%/%F%#%V$G@_Dj$7$??t$^$G%-%e!<$KF~$j$^$9!#(B
- $BB>$N%j%/%(%9%H$N:G8e$^$GC#$7$F;R%W%m%;%9$,6u$/$H!"(B
- $B
+ ディレクティブで設定した数までキューに入ります。
+ 他のリクエストの最後まで達して子プロセスが空くと、
+ 次のコネクションに応答します。
- $B%9%l%C%I$rMQ$$$J$$%5!<%P(B ($B$9$J$o$A(B prefork)
- $B$G$O!"(BMaxClients
- $B$O!"%j%/%(%9%H$K1~Ez$9$k$?$a$K5/F0$5$l$k(B
- $B;R%W%m%;%9$N:GBg?t$H$J$j$^$9!#(B
- $B%G%U%)%k%HCM$O(B 256
$B$G!"$3$l$rA}2C$5$;$?$$>l9g$O!"(B
+
スレッドを用いないサーバ (すなわち prefork)
+ では、MaxClients
+ は、リクエストに応答するために起動される
+ 子プロセスの最大数となります。
+ デフォルト値は 256
で、これを増加させたい場合は、
ServerLimit
- $B$NCM$bA}2C$5$;$kI,MW$,$"$j$^$9!#(B
+ の値も増加させる必要があります。
- $B%9%l%C%I$rMQ$$$k%5!<%P$d!"%O%$%V%j%C%I%5!<%P(B ($B$9$J$o$A(B
+
スレッドを用いるサーバや、ハイブリッドサーバ (すなわち
beos worker)
- $B$G$O!"(BMaxClients
- $B$O!"%/%i%$%"%s%H$K1~Ez$G$-$k%9%l%C%I$NAm?t$r@)8B$7$^$9!#(B
- beos $B$G$N%G%U%)%k%HCM$O(B 50
$B$G$9!#(B
- $B%O%$%V%j%C%I(B MPM $B$G$N%G%U%)%k%HCM$O(B 16
+ では、MaxClients
+ は、クライアントに応答できるスレッドの総数を制限します。
+ beos でのデフォルト値は 50
です。
+ ハイブリッド MPM でのデフォルト値は 16
ServerLimit
- $B$N(B 25
$BG\(B (ThreadsPerChild) $B$G$9!#(B
+ の 25
倍 (ThreadsPerChild) です。
MaxClients
- $B$r(B 16 $B%W%m%;%90J>eI,MW$JCM$^$GA}2C$5$;$?$$>l9g$O!"(B
+ を 16 プロセス以上必要な値まで増加させたい場合は、
ServerLimit
- $B$bA}2C$5$;$kI,MW$,$"$j$^$9!#(B
+ も増加させる必要があります。
MaxMemFree
-free()
$B$,8F$P$l$J$$8B$j!"(B
-$B
+free()
が呼ばれない限り、
+主メモリアロケータが保持し続けられるメモリの最大量
MaxMemFree KBytes
MaxMemFree 0
server config
@@ -506,16 +506,16 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
threadpoolworkermpm_winnt
- MaxMemFree $B%G%#%l%/%F%#%V$O(B
- free()
$B$,8F$P$l$J$$8B$j!"(B
- $B
+ MaxMemFree ディレクティブは
+ free()
が呼ばれない限り、
+ 主アロケータが保持できる空のメモリの最大値をキロバイト単位で設定します。
+ 設定されていないか、零に設定されているときは、無制限になります。
MaxRequestsPerChild
-$B8D!9$N;R%5!<%P$,2TF/Cf$K07$&%j%/%(%9%H?t$N>e8B(B
+個々の子サーバが稼働中に扱うリクエスト数の上限
MaxRequestsPerChild number
MaxRequestsPerChild 10000
server config
@@ -525,43 +525,43 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
threadpoolworker
- MaxRequestsPerChild $B%G%#%l%/%F%#%V$O!"(B
- $B8D!9$N;R%5!<%P%W%m%;%9$,07$&$3$H$N$G$-$k%j%/%(%9%H$N@)8B?t$r(B
- $B@_Dj$7$^$9!#(BMaxRequestsPerChild
- $B8D$N%j%/%(%9%H$N8e$K!";R%W%m%;%9$O=*N;$7$^$9!#(B
- MaxRequestsPerChild $B$,(B 0
- $B$K@_Dj$5$l$F$$$k>l9g$O!"%W%m%;%9$O4|8B@Z$l$K$h$j=*N;$9$k$3$H$O$"$j$^$;$s!#(B
+ MaxRequestsPerChild ディレクティブは、
+ 個々の子サーバプロセスが扱うことのできるリクエストの制限数を
+ 設定します。MaxRequestsPerChild
+ 個のリクエストの後に、子プロセスは終了します。
+ MaxRequestsPerChild が 0
+ に設定されている場合は、プロセスは期限切れにより終了することはありません。
- $B$=$NB>$N%G%U%)%k%HCM(B
- mpm_netware $B$H(B mpm_winnt
- $B$G$N%G%U%)%k%HCM$O(B 0
$B$G$9!#(B
+ その他のデフォルト値
+ mpm_netware と mpm_winnt
+ でのデフォルト値は 0
です。
MaxRequestsPerChild
- $B$rHs%<%m$K@)8B$9$k$3$H$K$O!"Fs$D$NMxE@$,$"$j$^$9(B:
+ を非ゼロに制限することには、二つの利点があります:
- - ($B6vH/E*$J(B) $B%a%b%j!<%j!<%/$,5/$3$C$?>l9g$K(B
- $B%W%m%;%9$,>CHq$9$k%a%b%j$NAmNL$r@)8B$G$-$k(B
+ - (偶発的な) メモリーリークが起こった場合に
+ プロセスが消費するメモリの総量を制限できる
- - $B%W%m%;%9$KM-8B$N%i%$%U%?%$%`$r@_Dj$9$k$3$H$G!"(B
- $B%5!<%PIi2Y$,2<$,$C$?;~$K%W%m%;%9?t$r>/$J$/$9$k$3$H$,$G$-$k(B
+ - プロセスに有限のライフタイムを設定することで、
+ サーバ負荷が下がった時にプロセス数を少なくすることができる
- $BCm(B
- KeepAlive $B%j%/%(%9%H$N>l9g$O!"(B
- $B0l$DL\$N%j%/%(%9%H$@$1$,$3$N@)8B$K3:Ev$7$^$9!#(B
- $B$B%3%M%/%7%g%s(B$B?t$r(B
- $B@)8B$9$k$h$&$K5sF0$,JQ2=$7$^$9!#(B
+ 注
+ KeepAlive リクエストの場合は、
+ 一つ目のリクエストだけがこの制限に該当します。
+ 実効的には、一つの子プロセスあたりのコネクション数を
+ 制限するように挙動が変化します。
MaxSpareThreads
-$B%"%$%I%k%9%l%C%I$N:GBg?t(B
+アイドルスレッドの最大数
MaxSpareThreads number
-$B>\:Y$O;HMQK!$r$4Mw2<$5$$!#(B
+詳細は使用法をご覧下さい。
server config
beosleader
mpm_netwarempmt_os2
@@ -569,51 +569,51 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
- $B%"%$%I%k$J%9%l%C%I$N:GBg?t$G$9!#0[$J$k(B MPM $B$G$O$=$l$>$l!"(B
- $B$3$N%G%#%l%/%F%#%V$O0[$J$k
+ アイドルなスレッドの最大数です。異なる MPM ではそれぞれ、
+ このディレクティブは異なる取り扱われ方をされます。
- perchild $B$G$O!"(B
- $B%G%U%)%k%H$O(B MaxSpareThreads 10
$B$G$9!#(B
- $B$3$N(B MPM $B$O%"%$%I%k%9%l%C%I?t$r!"$=$l$>$l$N;R%W%m%;%9$4$H$K4F;k$7$^$9!#(B
- $B;R%W%m%;%9$K%"%$%I%k%9%l%C%I$,B?$9$.$k>l9g$O!"(B
- $B%5!<%P$O$=$N;R%W%m%;%9$K4^$^$l$k%9%l%C%I$r=*N;$7;O$a$^$9!#(B
+ perchild では、
+ デフォルトは MaxSpareThreads 10
です。
+ この MPM はアイドルスレッド数を、それぞれの子プロセスごとに監視します。
+ 子プロセスにアイドルスレッドが多すぎる場合は、
+ サーバはその子プロセスに含まれるスレッドを終了し始めます。
worker, leader,
- threadpool $B$G$O!"(B
- $B%G%U%)%k%H$O(B MaxSpareThreads 250
$B$G$9!#(B
- $B$3$N(B MPM $B$O%"%$%I%k%9%l%C%I?t$r%5!<%PA4BN$G4F;k$7$^$9!#(B
- $B%5!<%P$G%"%$%I%k%9%l%C%I?t$,B?$9$.$k>l9g$O!"(B
- $B$3$N?t;z$h$j$b>/$J$$?t$K$J$k$^$G;R%W%m%;%9$r=*N;$7$^$9!#(B
+ threadpool では、
+ デフォルトは MaxSpareThreads 250
です。
+ この MPM はアイドルスレッド数をサーバ全体で監視します。
+ サーバでアイドルスレッド数が多すぎる場合は、
+ この数字よりも少ない数になるまで子プロセスを終了します。
- mpm_netware $B$G$O!"(B
- $B%G%U%)%k%H$O(B MaxSpareThreads 100
$B$G$9!#(B
- $B$3$N(B MPM $B$O%7%s%0%k%W%m%;%9$G
+ mpm_netware では、
+ デフォルトは MaxSpareThreads 100
です。
+ この MPM はシングルプロセスで実行されますので、
+ スペアスレッド数もサーバ全体で勘定します。
- beos $B$H(B mpmt_os2 $B$O(B
- mpm_netware $B$H;w$?5sF0$r$7$^$9!#(B
- beos $B$G$N%G%U%)%k%HCM$O(B MaxSpareThreads 50
- $B$G$9!#(Bmpmt_os2 $B$G$N%G%U%)%k%HCM$O(B 10
- $B$G$9!#(B
+ beos と mpmt_os2 は
+ mpm_netware と似た挙動をします。
+ beos でのデフォルト値は MaxSpareThreads 50
+ です。mpmt_os2 でのデフォルト値は 10
+ です。
- $B@)8B;v9`(B
- MaxSpareThreads $B$N$C$F<+F0E*$KJd@5$7$^$9!#(B
+ 制限事項
+ MaxSpareThreads の取る値には制限があります。
+ Apache は次の規則に従って自動的に補正します。
- - perchild $B$G$O!"(B
- MaxSpareThreads $B$,(B
+
- perchild では、
+ MaxSpareThreads が
ThreadLimit
- $B$HEy$7$$$+$=$l0J2<$G$"$kI,MW$,$"$j$^$9!#(B
+ と等しいかそれ以下である必要があります。
- - mpm_netware $B$O(B
+
- mpm_netware は
MinSpareThreads
- $B$h$j$bBg$-$$I,MW$,$"$j$^$9!#(B
+ よりも大きい必要があります。
- leader, threadpool,
- worker $B$G$O!"(B
- MinSpareThreads $B$H(B
+ worker では、
+ MinSpareThreads と
ThreadsPerChild
- $B$G7h$^$kAmOB$HEy$7$$$+Bg$-$$I,MW$,$"$j$^$9!#(B
+ で決まる総和と等しいか大きい必要があります。
@@ -623,10 +623,10 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
MinSpareThreads
-$B%j%/%(%9%H$K1~Ez$9$k$3$H$N$G$-$k(B
-$B%"%$%I%k%9%l%C%I?t$N:G>.?t(B
+リクエストに応答することのできる
+アイドルスレッド数の最小数
MinSpareThreads number
-$B>\:Y$O;HMQJ}K!$r$4Mw2<$5$$!#(B
+詳細は使用方法をご覧下さい。
server config
beosleader
mpm_netwarempmt_os2
@@ -634,37 +634,37 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
- $B%j%/%(%9%H$K1~Ez$9$k%9%l%C%I?t$N:G>.CM$G$9!#(B
- $B0[$J$k(B MPM $B$G$O$=$l$>$l!"(B
- $B$3$N%G%#%l%/%F%#%V$O0[$J$k
+ リクエストに応答するスレッド数の最小値です。
+ 異なる MPM ではそれぞれ、
+ このディレクティブは異なる取り扱われ方をします。
- perchild $B$G$O!"(B
- $B%G%U%)%k%H$O(B MinSpareThreads 5
$B$G!"(B
- $B%"%$%I%k%9%l%C%I?t$r;R%W%m%;%9Kh$K4F;k$7$^$9!#(B
- $B$b$7;R%W%m%;%9$K==J,$J?t$N%9%l%C%I$,$J$1$l$P!"(B
- $B%5!<%P$O$=$N;R%W%m%;%9$K?7$7$$%9%l%C%I$r:n$j;O$a$^$9!#(B
- $B$G$9$+$i!"(BNumServers
- $B$r(B 10
$B$K!"(BMinSpareThreads $B$r(B
- 5
$B$K$7$?>l9g$O!":G>.$G$b(B 50 $B$N%"%$%I%k%9%l%C%I$,(B
- $B%7%9%F%`>e$K$"$k$3$H$K$J$j$^$9!#(B
+ perchild では、
+ デフォルトは MinSpareThreads 5
で、
+ アイドルスレッド数を子プロセス毎に監視します。
+ もし子プロセスに十分な数のスレッドがなければ、
+ サーバはその子プロセスに新しいスレッドを作り始めます。
+ ですから、NumServers
+ を 10
に、MinSpareThreads を
+ 5
にした場合は、最小でも 50 のアイドルスレッドが
+ システム上にあることになります。
worker, leader,
- threadpool $B$G$O!"(B
- $B%G%U%)%k%H$O(B MinSpareThreads 75
$B$G!"(B
- $B%"%$%I%k%9%l%C%I?t$r%5!<%PA4BN$G4F;k$7$^$9!#(B
- $B$b$7%5!<%P$K==J,$J?t$N%"%$%I%k%9%l%C%I$,$J$1$l$P!"(B
- $B%"%$%I%k%9%l%C%I?t$,$3$N?t$h$j$bBg$-$/$J$k$^$G(B
- $B?7$7$$;R%W%m%;%9$,@8@.$5$l$^$9!#(B
+ threadpool では、
+ デフォルトは MinSpareThreads 75
で、
+ アイドルスレッド数をサーバ全体で監視します。
+ もしサーバに十分な数のアイドルスレッドがなければ、
+ アイドルスレッド数がこの数よりも大きくなるまで
+ 新しい子プロセスが生成されます。
- mpm_netware $B$G$O!"(B
- $B%G%U%)%k%H$O(B MinSpareThreads 10
$B$G!"(B
- $B%7%s%0%k%W%m%;%9(B MPM $B$G$9$N$G!"%5!<%PA4BN$G4IM}$5$l$^$9!#(B
+ mpm_netware では、
+ デフォルトは MinSpareThreads 10
で、
+ シングルプロセス MPM ですので、サーバ全体で管理されます。
- beos $B$H(B mpmt_os2 $B$O!"(B
- mpm_netware$B$K$h$/;w$F$$$^$9!#(B
- beos $B$G$N%G%U%)%k%H$O(B MinSpareThreads 1
- $B$G$9!#(Bmpmt_os2 $B$G$N%G%U%)%k%H$O(B
- 5
$B$G$9!#(B
+ beos と mpmt_os2 は、
+ mpm_netwareによく似ています。
+ beos でのデフォルトは MinSpareThreads 1
+ です。mpmt_os2 でのデフォルトは
+ 5
です。
MaxSpareThreads
StartServers
@@ -672,8 +672,8 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
ScoreBoardFile
-$B;R%W%m%;%9$HO"7H$9$k$?$a$N%G!<%?$rJ]B8$9$k(B
-$B%U%!%$%k$N0LCV(B
+子プロセスと連携するためのデータを保存する
+ファイルの位置
ScoreBoardFile file-path
ScoreBoardFile logs/apache_status
server config
@@ -682,33 +682,33 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
threadpoolworker
- Apache $B$O?F%W%m%;%9$H;R%W%m%;%94V$NDL?.$K%9%3%"%\!<%I$rMQ$$$^$9!#(B
- $B$3$NDL?.5!G=$K%U%!%$%k$rI,MW$H$9$k%"!<%-%F%/%A%c$b$"$j$^$9!#(B
- $B%U%!%$%k$,;XDj$5$l$F$$$J$1$l$P!"(BApache $B$O$^$:%a%b%j>e(B
- ($BF?L>6&M-%a%b%j(B) $B$K%9%3%"%\!<%I$r:n$m$&$H$7!"$=$l$,<:GT$9$k$H(B
- $B%G%#%9%/>e$K%U%!%$%k(B ($B%U%!%$%k%Y!<%9$N6&M-%a%b%j(B) $B$r:n$m$&$H$7$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$r;XDj$9$k$H!"(BApache
- $B$OI,$:%G%#%9%/$K%U%!%$%k$r@8@.$7$^$9!#(B
+ Apache は親プロセスと子プロセス間の通信にスコアボードを用います。
+ この通信機能にファイルを必要とするアーキテクチャもあります。
+ ファイルが指定されていなければ、Apache はまずメモリ上
+ (匿名共有メモリ) にスコアボードを作ろうとし、それが失敗すると
+ ディスク上にファイル (ファイルベースの共有メモリ) を作ろうとします。
+ このディレクティブを指定すると、Apache
+ は必ずディスクにファイルを生成します。
- $BNc(B
+ 例
ScoreBoardFile /var/run/apache_status
- $B%U%!%$%k%Y!<%9$N6&M-%a%b%j$O!"%5!<%I%Q!<%F%#!<@=$N%"%W%j%1!<%7%g%s$G(B
- $B%9%3%"%\!<%I$KD>@\%"%/%;%9$9$kI,MW$,$"$k>l9g$KLr$KN)$A$^$9!#(B
+ ファイルベースの共有メモリは、サードパーティー製のアプリケーションで
+ スコアボードに直接アクセスする必要がある場合に役に立ちます。
- ScoreBoardFile $B$r;H$&>l9g!"(B
- RAM $B%G%#%9%/>e$KCV$/$H%9%T!<%I$,8~>e$9$k$G$7$g$&!#(B
- $B$7$+$7!"%m%0%U%!%$%k$N@_CV0LCV$d(B
- $B%;%-%e%j%F%#(B
- $B$HF1MM$NCm0UE@$,$"$k$N$G!"Cm0U$7$F$/$@$5$$!#(B
+ ScoreBoardFile を使う場合、
+ RAM ディスク上に置くとスピードが向上するでしょう。
+ しかし、ログファイルの設置位置や
+ セキュリティ
+ と同様の注意点があるので、注意してください。
-Apache $B$NDd;_$H:F5/F0(B
+Apache の停止と再起動
ReceiveBufferSize
-TCP $B
+TCP 受信バッファサイズ
ReceiveBufferSize bytes
ReceiveBufferSize 0
server config
@@ -718,15 +718,15 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
worker
- $B%5!<%P$O(B TCP $B
+
サーバは TCP 受信バッファサイズを指定されたバイト数に設定します。
- 0
$B$K$7$?>l9g!"(BOS $B$N%G%U%)%k%HCM$,;HMQ$5$l$^$9!#(B
+ 0
にした場合、OS のデフォルト値が使用されます。
SendBufferSize
-TCP $B%P%C%U%!%5%$%:(B
+TCP バッファサイズ
SendBufferSize bytes
SendBufferSize 0
server config
@@ -736,326 +736,326 @@ accept $B$7$h$&$H$7$F$$$k$H$-$K!"(BApache $B$,$=$l$i$N;R%W%m%;%9$rD>Ns2=$9$k$
threadpoolworker
- $B%5!<%P$O(B TCP $BAw?.%P%C%U%!%5%$%:$r;XDj$5$l$?%P%$%H?t$K@_Dj$7$^$9!#(B
- $B9bB.$G9b%l%$%F%s%7$J4D6-$G(B
- ($BNc(B 100ms $BDxEY!"BgN&2#CG9bB.DL?.O)$J$I(B)
- $B8E$$0lHLE*$J(B OS $B$N%G%U%)%k%HCM$rA}$d$9$N$KHs>o$KJXMx$G$9!#(B
+ サーバは TCP 送信バッファサイズを指定されたバイト数に設定します。
+ 高速で高レイテンシな環境で
+ (例 100ms 程度、大陸横断高速通信路など)
+ 古い一般的な OS のデフォルト値を増やすのに非常に便利です。
- 0
$B$K$7$?>l9g!"(BOS $B$N%G%U%)%k%HCM$,;HMQ$5$l$^$9!#(B
+ 0
にした場合、OS のデフォルト値が使用されます。
ServerLimit
-$B@_Dj2DG=$J%5!<%P%W%m%;%9?t$N>e8B(B
+設定可能なサーバプロセス数の上限
ServerLimit number
-$B>\:Y$O;HMQK!$r;2>H(B
+詳細は使用法を参照
server config
leaderperchild
preforkthreadpoolworker
- prefork MPM $B$N>l9g$O!"$3$N%G%#%l%/%F%#%V$O(B
- Apache $B%W%m%;%92TF/Cf$K$*$1$k(B
+
prefork MPM の場合は、このディレクティブは
+ Apache プロセス稼働中における
MaxClients
- $B$K@_Dj2DG=$J>e8BCM$r@_Dj$9$k$3$H$K$J$j$^$9(B
- ($BLuCm(B: prefork $B$N>l9g$OF1;~%/%i%$%"%s%H?t(B = $B%5!<%P%W%m%;%9?t$J$N$G(B) $B!#(B
- worker MPM $B$N>l9g$K$O!"$3$N%G%#%l%/%F%#%V$O(B
+ に設定可能な上限値を設定することになります
+ (訳注: prefork の場合は同時クライアント数 = サーバプロセス数なので) 。
+ worker MPM の場合には、このディレクティブは
ThreadLimit
- $B%G%#%l%/%F%#%V$HAH$_9g$o$;$F!"(B
- Apache $B%W%m%;%92TF/Cf$K$*$1$k(B
+ ディレクティブと組み合わせて、
+ Apache プロセス稼働中における
MaxClients
- $B$K@_Dj2DG=$J>e8BCM$r@_Dj$9$k$3$H$K$J$j$^$9!#(B
- $B:F5/F0Cf$K$3$N%G%#%l%/%F%#%V$rJQ99$7$F$bL5;k$5$l$^$9$,!"(B
+ に設定可能な上限値を設定することになります。
+ 再起動中にこのディレクティブを変更しても無視されますが、
MaxClients
- $B$O:F5/F0Cf$K=$@5$9$k$3$H$,$G$-$^$9!#(B
+ は再起動中に修正することができます。
- $B$3$N%G%#%l%/%F%#%V$r;HMQ$9$k:]$OFC$KCm0U$7$F$/$@$5$$!#(B
- ServerLimit $B$,I,MW0J>e$KBg$-$JCM$K(B
- $B@_Dj$5$l$?>l9g$O!"M>7W$JL$;HMQ6&M-%a%b%j$,3d$jEv$F$i$l$^$9!#(B
- ServerLimit $B$H(B
+
このディレクティブを使用する際は特に注意してください。
+ ServerLimit が必要以上に大きな値に
+ 設定された場合は、余計な未使用共有メモリが割り当てられます。
+ ServerLimit と
MaxClients
- $B$,%7%9%F%`$N07$($kHO0O$r1[$($?@_DjCM$K$J$C$F$$$k$H!"(B
- Apache $B$O5/F0$7$J$$$+!"5/F0$7$F$bIT0BDj$K$J$k$G$7$g$&!#(B
+ がシステムの扱える範囲を越えた設定値になっていると、
+ Apache は起動しないか、起動しても不安定になるでしょう。
- prefork MPM $B$G$O!"(B
+
prefork MPM では、
MaxClients
- $B$r(B 256 ($B%G%U%)%k%H(B) $B$h$j$bBg$-$JCM$K@_Dj$9$kI,MW$,$"$k;~$K$@$1;HMQ$7$F$/$@$5$$!#(B
- $B4uK>$N(B MaxClients
- $B?t$H$/$i$Y$F!"I,MW0J>e$KBg$-$JCM$r;XDj$9$k$3$H$OHr$1$F$/$@$5$$!#(B
+ を 256 (デフォルト) よりも大きな値に設定する必要がある時にだけ使用してください。
+ 希望の MaxClients
+ 数とくらべて、必要以上に大きな値を指定することは避けてください。
worker, leader,
- threadpool MPM $B$G$O!"(B
- MaxClients $B$H(B
+ threadpool MPM では、
+ MaxClients と
ThreadsPerChild
- $B$N@_Dj$G(B 16 $B%5!<%P%W%m%;%9(B ($B%G%U%)%k%H(B)
- $B0J>eI,MW$K$J$k>l9g$K$N$_;HMQ$7$F$/$@$5$$!#4uK>$N(B
- MaxClients $B$H(B
+ の設定で 16 サーバプロセス (デフォルト)
+ 以上必要になる場合にのみ使用してください。希望の
+ MaxClients と
ThreadsPerChild
- $B$H$/$i$Y$F!"I,MW$H$J$k%5!<%P%W%m%;%9?t0J>e$KBg$-$JCM$r(B
- $B@_Dj$9$k$3$H$OHr$1$F$/$@$5$$!#(B
+ とくらべて、必要となるサーバプロセス数以上に大きな値を
+ 設定することは避けてください。
- perchild MPM $B$G$O!"(B
- NumServers $B$r(B 8 ($B%G%U%)%k%H(B)
- $B$h$m$$$bBg$-$JCM$K@_Dj$9$kI,MW$,$"$k$H$-$K$N$_;HMQ$7$F$/$@$5$$!#(B
+ perchild MPM では、
+ NumServers を 8 (デフォルト)
+ よろいも大きな値に設定する必要があるときにのみ使用してください。
- $BCm0U(B
- ServerLimit 20000
$B$H$$$&@)8BIU$-$G%3%s%Q%$%k$5$l$F$$$^$9(B
- (prefork MPM $B$G$O(B 200000
) $B!#(B
- $B$3$l$O%9%Z%k%_%9$K$h$C$F8m$C$F9s$$>u67$K$J$k$N$r!"(B
- $B2sHr$9$k$?$a$N=hCV$G$9!#(B
+ 注意
+ ServerLimit 20000
という制限付きでコンパイルされています
+ (prefork MPM では 200000
) 。
+ これはスペルミスによって誤って酷い状況になるのを、
+ 回避するための処置です。
-Apache $B$NDd;_$H:F5/F0(B
+Apache の停止と再起動
StartServers
-$B5/F0;~$K@8@.$5$l$k;R%5!<%P%W%m%;%9$N?t(B
+起動時に生成される子サーバプロセスの数
StartServers number
-$B>\:Y$O;HMQJ}K!$r;2>H(B
+詳細は使用方法を参照
server config
leadermpmt_os2
preforkthreadpoolworker
- StartServers $B%G%#%l%/%F%#%V$O!"(B
- $B5/F0;~$K@8@.$5$l$k;R%5!<%P%W%m%;%9$N?t$r@_Dj$7$^$9!#(B
- $B%W%m%;%9?t$OIi2Y$K1~$8$FF0E*$K@)8f$5$l$^$9$N$G!"(B
- $BDL>o$O$3$NCM$rD4@0$9$kM}M3$O$"$^$j$J$$$G$7$g$&!#(B
+ StartServers ディレクティブは、
+ 起動時に生成される子サーバプロセスの数を設定します。
+ プロセス数は負荷に応じて動的に制御されますので、
+ 通常はこの値を調整する理由はあまりないでしょう。
- $B%G%U%)%k%HCM$O(B MPM $B$4$H$K0[$J$j$^$9!#(B
+
デフォルト値は MPM ごとに異なります。
leader, threadpool,
- worker $B$O(B StartServers 3
$B$G$9!#(B
- prefork $B$O(B 5
$B$G!"(B
- mpmt_os2 $B$O(B 2
$B$G$9!#(B
+ worker は StartServers 3
です。
+ prefork は 5
で、
+ mpmt_os2 は 2
です。
StartThreads
-$B5/F0;~$K@8@.$5$l$k%9%l%C%I$N?t(B
+起動時に生成されるスレッドの数
StartThreads number
-$B>\:Y$O;HMQJ}K!$r;2>H(B
+詳細は使用方法を参照
server config
beosmpm_netware
perchild
- $B5/F0;~$K@8@.$5$l$k%9%l%C%I$N?t$G$9!#(B
- $B%9%l%C%I?t$OIi2Y$K1~$8$FF0E*$K@)8f$5$l$^$9$N$G!"(B
- $BDL>o$O$3$NCM$rD4@0$9$kM}M3$O$"$^$j$J$$$G$7$g$&!#(B
+ 起動時に生成されるスレッドの数です。
+ スレッド数は負荷に応じて動的に制御されますので、
+ 通常はこの値を調整する理由はあまりないでしょう。
- perchild $B$G$N%G%U%)%k%H$O(B
- StartThreads 5
$B$G!"$3$N%G%#%l%/%F%#%V$O5/F0;~$K(B
- $B%W%m%;%9Kh$N%9%l%C%I?t$rDI@W$7$^$9!#(B
+ perchild でのデフォルトは
+ StartThreads 5
で、このディレクティブは起動時に
+ プロセス毎のスレッド数を追跡します。
- mpm_netware $B$G$N%G%U%)%k%H$O(B
- StartThreads 50
$B$G!"(B
- $B$3$N>l9g%W%m%;%9$O0l$D$7$+$J$$$N$G!"(B
- $B5/F0;~$K%j%/%(%9%H$K1~Ez$9$k%9%l%C%I$NAm?t$H$J$j$^$9!#(B
+ mpm_netware でのデフォルトは
+ StartThreads 50
で、
+ この場合プロセスは一つしかないので、
+ 起動時にリクエストに応答するスレッドの総数となります。
- beos $B$G$N%G%U%)%k%H$O(B StartThreads
- 10
$B$G$9!#(B
- $B$^$?!"5/F0;~$K@8@.$5$l$k%9%l%C%I$NAm?t$K$bH?1G$5$l$^$9!#(B
+ beos でのデフォルトは StartThreads
+ 10
です。
+ また、起動時に生成されるスレッドの総数にも反映されます。
ThreadLimit
-$B@_Dj2DG=$J;R%W%m%;%9Kh$N%9%l%C%I?t$N>e8B$r(B
-$B@_Dj$7$^$9(B
+設定可能な子プロセス毎のスレッド数の上限を
+設定します
ThreadLimit number
-$B>\:Y$O;HMQJ}K!$r;2>H(B
+詳細は使用方法を参照
server config
leadermpm_winnt
perchildthreadpoolworker
-Apache 2.0.41 $B$H$=$l0J9_$N(B mpm_winnt
-$B$GMxMQ2DG=(B
+Apache 2.0.41 とそれ以降の mpm_winnt
+で利用可能
- $B$3$N%G%#%l%/%F%#%V$O(B
- Apache $B%W%m%;%92TF/Cf$K$*$1$k(B
+
このディレクティブは
+ Apache プロセス稼働中における
ThreadsPerChild
- $B$K@_Dj2DG=$J>e8BCM$r@_Dj$7$^$9!#:F5/F0;~$K$3$N%G%#%l%/%F%#%V$NCM$r(B
- $BJQ99$7$F$bL5;k$5$l$^$9$,!"(B
+ に設定可能な上限値を設定します。再起動時にこのディレクティブの値を
+ 変更しても無視されますが、
ThreadsPerChild
- $B$O:F5/F0Cf$K!"$3$N%G%#%l%/%F%#%V$G;XDj$5$l$?>e8BCM$^$G(B
- $BJQ99$9$k$3$H$,$G$-$^$9!#(B
+ は再起動中に、このディレクティブで指定された上限値まで
+ 変更することができます。
- $B$3$N%G%#%l%/%F%#%V$r;HMQ$9$k:]$OFC$KCm0U$7$F$/$@$5$$!#(B
- ThreadLimit $B$,(B
+
このディレクティブを使用する際は特に注意してください。
+ ThreadLimit が
ThreadsPerChild
- $B$h$j$b$:$C$HBg$-$JCM$K@_Dj$5$l$?>l9g$O!"(B
- $BM>7W$JL$;HMQ6&M-%a%b%j$,3d$jEv$F$i$l$F$7$^$$$^$9!#(B
- ThreadLimit $B$,(B
+ よりもずっと大きな値に設定された場合は、
+ 余計な未使用共有メモリが割り当てられてしまいます。
+ ThreadLimit が
ThreadsPerChild
- $B$NN>J}$,%7%9%F%`$N07$($kHO0O$rD6$($F$$$k>l9g$O!"(B
- Apache $B$O5/F0$7$J$$$+!"5/F0$7$?$H$7$F$bIT0BDj$K$J$k$G$7$g$&!#(B
- $B$3$N%G%#%l%/%F%#%V$NCM$O:#;HMQ$7$F$$$k(B Apache $B$N(B ThreadsPerChild $B$NM=A[>e8BCM$r(B
- $BD6$($?CM$K$O@_Dj$7$J$$$G$/$@$5$$!#(B
+ の両方がシステムの扱える範囲を超えている場合は、
+ Apache は起動しないか、起動したとしても不安定になるでしょう。
+ このディレクティブの値は今使用している Apache の ThreadsPerChild の予想上限値を
+ 超えた値には設定しないでください。
- ThreadLimit $B$N%G%U%)%k%HCM$O(B
- mpm_winnt $B$N$H$-$O(B 1920
$B$G!"(B
- $BB>$N>l9g$O(B 64
$B$G$9!#(B
+ ThreadLimit のデフォルト値は
+ mpm_winnt のときは 1920
で、
+ 他の場合は 64
です。
- $BCm0U(B
+ 注意
ThreadLimit 20000
(mpm_winnt
- $B$N>l9g$O(B ThreadLimit 15000
)
- $B$H$$$&@)8BIU$-$G%3%s%Q%$%k$5$l$F$$$^$9!#(B
- $B$3$l$O%9%Z%k%_%9$K$h$C$F8m$C$F9s$$>u67$K$J$k$N$r!"(B
- $B2sHr$9$k$?$a$N=hCV$G$9!#(B
+ の場合は ThreadLimit 15000
)
+ という制限付きでコンパイルされています。
+ これはスペルミスによって誤って酷い状況になるのを、
+ 回避するための処置です。
ThreadsPerChild
-$B;R%W%m%;%9$=$l$>$l$K@8@.$5$l$k%9%l%C%I?t(B
+子プロセスそれぞれに生成されるスレッド数
ThreadsPerChild number
-$B>\:Y$O;HMQJ}K!$r;2>H(B
+詳細は使用方法を参照
server config
leadermpm_winnt
threadpoolworker
- $B$3$N%G%#%l%/%F%#%V$O!"$=$l$>$l$N;R%W%m%;%9$G@8@.$5$l$k(B
- $B%9%l%C%I?t$r@_Dj$7$^$9!#(B
- $B;R%W%m%;%9$O3+;O;~$K$3$l$i$N%9%l%C%I$r@8@.$7$F!"(B
- $B$=$N8e$O@8@.$7$^$;$s!#(Bmpm_winnt $B$N$h$&$J!"(B
- $B;R%W%m%;%9$,0l$D$7$+$J$$$h$&$J(B MPM $B$rMxMQ$7$F$$$k$N$G$"$l$P!"(B
- $B$3$NCM$O%5!<%P$NIi2YA4BN$r==J,worker $B$N$h$&$J!"(B
- $B;R%W%m%;%9$,J#?t$"$k$h$&$J(B MPM $B$rMxMQ$7$F$$$k$N$G$"$l$P!"(B
- $B%5!<%P$NDL>oIi2Y$r==J,07$($kDxEY$K!"(B
- $B%9%l%C%IAm?t(B$B$,B?$/$J$1$l$P$J$j$^$;$s!#(B
+ このディレクティブは、それぞれの子プロセスで生成される
+ スレッド数を設定します。
+ 子プロセスは開始時にこれらのスレッドを生成して、
+ その後は生成しません。mpm_winnt のような、
+ 子プロセスが一つしかないような MPM を利用しているのであれば、
+ この値はサーバの負荷全体を十分取り扱える程度に、
+ 大きくなければなりません。worker のような、
+ 子プロセスが複数あるような MPM を利用しているのであれば、
+ サーバの通常負荷を十分扱える程度に、
+ スレッド総数が多くなければなりません。
- mpm_winnt$B$G$N(B ThreadsPerChild
- $B$N%G%U%)%k%HCM$O(B 64
$B$G!"B>$N>l9g$O(B
- 25
$B$G$9!#(B
+ mpm_winntでの ThreadsPerChild
+ のデフォルト値は 64
で、他の場合は
+ 25
です。
ThreadStackSize
-$B%/%i%$%"%s%H$N%3%M%/%7%g%s$r
+クライアントのコネクションを受け持つスレッドが使用する
+スタックのバイト数
ThreadStackSize size
-NetWare $B$G$O(B 65536$B!#B>$N(B OS $B$G$O0c$C$?CM(B
+NetWare では 65536。他の OS では違った値
server config
leadermpm_netware
mpm_winntperchild
threadpoolworker
-2.1 $B0J9_(B
+2.1 以降
- $B%/%i%$%"%s%H%3%M%/%7%g%s$rThreadStackSize $B%G%#%l%/%F%#%V$G;XDj$7$^$9!#(B
- $BBgDq$N>l9g(B OS $B$N;XDj$7$F$$$k%9%?%C%/%5%$%:$N%G%U%)%k%HCM$O(B
- $BE,@Z$J$b$N$G$9$,!"D4@0$,I,MW$K$J$k>l9g$b$"$j$^$9(B:
+ クライアントコネクションを受け持ち、コネクション処理に必要なモジュールの
+ 呼び出しを行なっているスレッドの、(自動変数用の) スタックサイズは
+ ThreadStackSize ディレクティブで指定します。
+ 大抵の場合 OS の指定しているスタックサイズのデフォルト値は
+ 適切なものですが、調整が必要になる場合もあります:
- - $B%9%l%C%I%9%?%C%/%5%$%:$N%G%U%)%k%HCM$,Hf3SE*>.$5$/@_Dj$5$l$F$$$k(B
- $B%W%i%C%H%[!<%`(B ($BNc$($P(B HP-UX) $B$G$O!"<+F0JQ?tMQ$NNN0h$GBg$-$JMFNL$r(B
- $B;HMQ$9$k%5!<%I%Q!<%F%#@=%b%8%e!<%k$N$?$a$K(B Apache $B$,%/%i%C%7%e$9$k(B
- $B>l9g$b$"$j$^$9!#$=$N%b%8%e!<%k$OB>$N%W%i%C%H%[!<%`$G$O(B
- $B%9%?%C%/%5%$%:$,Bg$-$$$?$a$K!"2wD4$KF0:n$9$k$+$b$7$l$^$;$s!#(B
- $B$3$N%?%$%W$N%/%i%C%7%e$O!"(BThreadStackSize
- $B$G(B OS $B$N%G%U%)%k%HCM$h$jBg$-$JCM$r;XDj$9$k$3$H$G2r7h$7$^$9!#(B
- $B%5!<%I%Q!<%F%#@=%b%8%e!<%k$G$3$N=hCV$,I,MW$G$"$k$H5-:\$5$l$F$$$k(B
- $B>l9g$+!"(BApache $B$N=PNO$9$k%a%C%;!<%8$G%9%l%C%I%9%?%C%/%5%$%:$,(B
- $B>.$5$9$.$k$H;XE&$5$l$F$$$k>l9g$K$N$_!"$3$ND4@0$r$7$F$/$@$5$$!#(B
+ - スレッドスタックサイズのデフォルト値が比較的小さく設定されている
+ プラットホーム (例えば HP-UX) では、自動変数用の領域で大きな容量を
+ 使用するサードパーティ製モジュールのために Apache がクラッシュする
+ 場合もあります。そのモジュールは他のプラットホームでは
+ スタックサイズが大きいために、快調に動作するかもしれません。
+ このタイプのクラッシュは、ThreadStackSize
+ で OS のデフォルト値より大きな値を指定することで解決します。
+ サードパーティ製モジュールでこの処置が必要であると記載されている
+ 場合か、Apache の出力するメッセージでスレッドスタックサイズが
+ 小さすぎると指摘されている場合にのみ、この調整をしてください。
- - $B%G%U%)%k%H%9%l%C%I%9%?%C%/%5%$%:$,!"(BWeb $B%5!<%PMQES$KI,MW$JNL$h$j$b(B
- $BL@$i$+$KBg$-$9$.$k>l9g!"(BThreadStackSize
- $B$r(B OS $B$N%G%U%)%k%HCM$h$j$b>.$5$JCM$K$9$k$3$H$G!";R%W%m%;%9$"$?$j$N(B
- $B%9%l%C%I?t$r$h$jB?$/;}$?$;$i$l$k$h$&$K$J$j$^$9!#(B
- $B$3$N%?%$%W$ND4@0$O!"%F%9%H4D6-$G%&%'%V%5!<%P$r40A4$K(B
- $B%F%9%H$G$-$k>l9g$K8B$C$F9T$J$&$Y$-$G$9!#(B
- $B$^$l$KB??t$N%9%?%C%/$,MW5a$5$l$k%j%/%(%9%H$rThreadStackSize
- $B$N@_Dj$,C$5$l$k>l9g$,$"$j$^$9!#(B
+ - デフォルトスレッドスタックサイズが、Web サーバ用途に必要な量よりも
+ 明らかに大きすぎる場合、ThreadStackSize
+ を OS のデフォルト値よりも小さな値にすることで、子プロセスあたりの
+ スレッド数をより多く持たせられるようになります。
+ このタイプの調整は、テスト環境でウェブサーバを完全に
+ テストできる場合に限って行なうべきです。
+ まれに多数のスタックが要求されるリクエストを受けることがあるかも
+ しれないからです。
+ Web サーバの設定を変更すると、現在の ThreadStackSize
+ の設定が取り消される場合があります。
User
-$B%j%/%(%9%H$K1~Ez$9$k:]$KMQ$$$k%f!<%6(B ID
+リクエストに応答する際に用いるユーザ ID
User unix-userid
User #-1
server config
leaderperchild
preforkthreadpoolworker
-Apache 2.0 $B0J9_$G!"%0%m!<%P%k@_Dj$G$N$_M-8z$G$9!#(B
+Apache 2.0 以降で、グローバル設定でのみ有効です。
- User $B%G%#%l%/%F%#%V$O(B
- $B%5!<%P$,%j%/%(%9%H$K1~Ez$9$k:]$KMQ$$$k%f!<%6(B ID $B$r@_Dj$7$^$9!#(B
- $B$3$N%G%#%l%/%F%#%V$r;HMQ$9$k$?$a$K$O!"%9%?%s%I%"%m%s7?$N(B
- $B%5!<%P$O:G=i$K(B root
$B8"8B$G5/F0$5$l$F$$$kI,MW$,$"$j$^$9!#(B
- $BHs(B root $B%f!<%6$G%5!<%P$r5/F0$7$?>l9g$O!"(B
- $B8"8B$NDc$$%f!<%6$X$HJQ$o$k$3$H$,$G$-$:!"(B
- $B7k6I85$N%f!<%6$N%W%m%;%9$H$7$Froot $B$G5/F0$7$?>l9g$K?F%W%m%;%9$,(B root
- $B$H$7$Fo$JF0:n$G$9!#(B
- Unix-userid $B$O
+ User ディレクティブは
+ サーバがリクエストに応答する際に用いるユーザ ID を設定します。
+ このディレクティブを使用するためには、スタンドアロン型の
+ サーバは最初に root
権限で起動されている必要があります。
+ 非 root ユーザでサーバを起動した場合は、
+ 権限の低いユーザへと変わることができず、
+ 結局元のユーザのプロセスとして実行され続けます。
+ root
で起動した場合に親プロセスが root
+ として実行されているのは正常な動作です。
+ Unix-userid は次のどれかです。
- - $B%f!<%6L>(B
- - $B%f!<%6$rL>A0$G;2>H$7$^$9!#(B
+ - ユーザ名
+ - ユーザを名前で参照します。
- - # $B$KB3$$$F%f!<%6HV9f(B
- - $B%f!<%6$rHV9f$G;2>H$7$^$9!#(B
+ - # に続いてユーザ番号
+ - ユーザを番号で参照します。
- $B$3$N%f!<%6$O!"30It$K8+$;$k$h$&$K0U?^$7$F$$$J$$%U%!%$%k$K!"(B
- $B%"%/%;%92DG=$K$J$C$F$7$^$&$h$&$J8"8B$r;}$D$Y$-$G$O$J$$$G$9$7!"(B
- $BF1MM$K(B HTTP $B%j%/%(%9%H$KBP$7$F1~Ez$9$k$h$&$K0U?^$7$F$$$J$$(B
- $Bnobody $B%f!<%6$r;HMQ$9$k4IM}o$KK>$^$7$$$o$1$G$O$"$j$^$;$s!#(B
- $B$J$<$J$i(B nobody
$B%f!<%6$O!"%7%9%F%`$G(B
- $BB>$NLr3d$rC4$C$F$$$k$+$bCN$l$J$$$+$i$G$9!#(B
+ このユーザは、外部に見せるように意図していないファイルに、
+ アクセス可能になってしまうような権限を持つべきではないですし、
+ 同様に HTTP リクエストに対して応答するように意図していない
+ 実行コードを、実行できるような権限を持つべきではないです。
+ サーバを実行するために特定の新しいユーザとグループを
+ 設定することをお薦めいたします。
+ nobody
ユーザを使用する管理者もいますが、
+ これが常に望ましいわけではありません。
+ なぜなら nobody
ユーザは、システムで
+ 他の役割を担っているかも知れないからです。
- $B%;%-%e%j%F%#(B
- $B@53N$K$I$s$J$3$H$r$d$C$F$$$k$N$+!"$=$N4m81@-$rCN$i$J$$$G!"(B
- User ($B$d(B Group) $B$r(B root
$B$K(B
- $B@_Dj$7$J$$$G$/$@$5$$!#(B
+ セキュリティ
+ 正確にどんなことをやっているのか、その危険性を知らないで、
+ User (や Group) を root
に
+ 設定しないでください。
- perchild MPM $B$G$O!"0[$J$k%f!<%6(B ID
- $B$GJ#?t$N%P!<%A%c%k%[%9%H$rF0$+$9$3$H$rL\E*$H$7$F$$$^$9$,!"(B
- User $B$O!"AssignUserID
- $B%G%#%l%/%F%#%V$r;}$?$J$$(B VirtualHost $B%;%/%7%g%s$X$N(B
- $B%U%)!<%k%P%C%/$H$rDj5A$9$k$3$H$K$J$j$^$9!#(B
+ perchild MPM では、異なるユーザ ID
+ で複数のバーチャルホストを動かすことを目的としていますが、
+ User は、主サーバのユーザ ID
+ と、AssignUserID
+ ディレクティブを持たない VirtualHost セクションへの
+ フォールバックとを定義することになります。
- $BFC5-;v9`(B: $B$3$N%G%#%l%/%F%#%V$r(B
+
特記事項: このディレクティブを
VirtualHost
- $B$G;HMQ$9$k$3$H$O%5%]!<%H$5$l$J$/$J$j$^$7$?!#(B
- suexec $B8~$1$K%5!<%P$r@_Dj$9$k$N$G$"$l$P!"(B
+ で使用することはサポートされなくなりました。
+ suexec 向けにサーバを設定するのであれば、
SuexecUserGroup
- $B$r;HMQ$7$F$/$@$5$$!#(B
+ を使用してください。
- $BCm0U(B
- User $B%G%#%l%/%F%#%V$O(B
- beos $B$H(B mpmt_os2 MPM
- $B$K$bB8:_$7$^$9$,!"
+ 注意
+ User ディレクティブは
+ beos と mpmt_os2 MPM
+ にも存在しますが、実質的に無効で、互換性のためだけに存在します。
diff --git a/docs/manual/mod/mpm_winnt.xml.ja b/docs/manual/mod/mpm_winnt.xml.ja
index 11f45b4e91..73a8b5257e 100644
--- a/docs/manual/mod/mpm_winnt.xml.ja
+++ b/docs/manual/mod/mpm_winnt.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -24,17 +24,17 @@
mpm_winnt
Windows NT
-$B8~$1$K:GE,2=$5$l$?%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B
+向けに最適化されたマルチプロセッシングモジュール
MPM
mpm_winnt.c
mpm_winnt_module
- $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
+ このマルチプロセッシングモジュール (MPM)
+ は Windows NT でのデフォルトになります。
+ 一つの制御用プロセスを用い、これが一つの子プロセスを起動し、
+ そして子プロセスがリクエストを取り扱うためにスレッドを
+ 起動します。
CoreDumpDirectory
@@ -62,20 +62,20 @@
Win32DisableAcceptEx
-$B%M%C%H%o!<%/@\B3$N
+ネットワーク接続の受け付けに accept() をAcceptEx の代わりに使う
Win32DisableAcceptEx
-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
+AcceptEx() はデフォルトで有効になっています。AcceptEx() を無効にする
+ためにこのディレクティブを使います。
server config
-2.0.49 $B%P!<%8%g%s0J9_$G;HMQ2DG=(B
+2.0.49 バージョン以降で使用可能
- AcceptEx() $B$O(B Microsoft WinSock v2 API $B$G!">l9g$K$h$C$F$O(B
- BSD $B7A<0$N(B accept()
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 AcceptEx()
$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
- AcceptEx()
$B$r;HMQ$7$J$$$h$&$K$7$F$/$@$5$$!#(B
+ AcceptEx() は Microsoft WinSock v2 API で、場合によっては
+ BSD 形式の accept()
API よりもよい性能を発揮します。
+ よく使われている Windows 製品の中で、特にウィルススキャナや VPN パッケージ
+ の中には、バグが原因で AcceptEx()
の適切な動作を妨げるものがあります。
+ 以下のようなエラーに遭遇した場合は、このディレクティブを使用して
+ AcceptEx()
を使用しないようにしてください。
[error] (730038)An operation was attempted on something that is
diff --git a/docs/manual/mod/prefork.xml.ja b/docs/manual/mod/prefork.xml.ja
index 0cc9ede5c0..d6bcf00342 100644
--- a/docs/manual/mod/prefork.xml.ja
+++ b/docs/manual/mod/prefork.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,76 +23,76 @@
prefork
-$B%9%l%C%I$r;H$o$:!"@h9T$7$F(B fork $B$r9T$J$&%&%'%V%5!<%P$rスレッドを使わず、先行して fork を行なうウェブサーバを実装
MPM
prefork.c
mpm_prefork_module
- $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$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
+ このマルチプロセッシングモジュール (MPM) は、
+ Unix 上での Apache 1.3 のデフォルトの挙動と非常によく似た方法で
+ リクエストを処理する、スレッドを使わず、先行して fork を行なう
+ ウェブサーバを実装しています。
+ スレッドセーフでないライブラリとの互換性をとるために、
+ スレッドを避ける必要のあるサイトでは、このモジュールの使用が適切でしょう。
+ あるリクエストで発生した問題が他のリクエストに影響しないように、
+ 個々のリクエストを単離するのにも、最適な MPM です。
- $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
+
この MPM は非常に自律的なので、この MPM の設定ディレクティブを
+ 調整する必要はほとんどないでしょう。もっとも重要なことは、
MaxClients
- $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.$5$$CM$K$9$k!"(B
- $B$H$$$&$3$H$G$9!#(B
+ が、予想される同時リクエスト数を十分扱えるぐらいは大きいけれども、
+ 全プロセスに十分な物理メモリが確実に行き渡る程度には小さい値にする、
+ ということです。
Apache
-$B$,;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj(B
+が使用するアドレスとポートの設定
-$BF0:nJ}K!(B
- $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$B%9%Z%"(B
- $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
+動作方法
+ 一つのコントロールプロセスが、
+ コネクションに対して listen して、しかるべき時に応答する
+ 子プロセスを起動します。Apache は常に幾つかのスペア
+ かアイドルなサーバプロセスを維持していて、それらは入ってきた
+ リクエストに応答できるように待機しています。
+ このようにしてクライアントは、リクエストが応答される前に、
+ 新しい子プロセスが fork されるのを待たなくてもよいように
+ なっています。
- $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
+
親プロセスがリクエストに応答するの子プロセスを
+ どのように生成するかは、
StartServers,
MinSpareServers,
MaxSpareServers,
MaxClients
- $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 を超えるリクエストに応答しないといけないサイトでは、
MaxClients
- $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
+ を増やす必要があるでしょう。
+ 一方、メモリの限られているサイトでは、スラッシング
+ (メモリとディスク間で何度もスワップ) が起こるのを防ぐために
MaxClients
- $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$B@-G=$K4X$9$k%R%s%H(B
- $B$K$"$j$^$9!#(B
+ を減らす必要があるでしょう。プロセス生成のチューニングに関する
+ 詳しい情報は、性能に関するヒント
+ にあります。
- $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
- root
$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
- User $B$H(B
+
通常 Unix では親プロセスは 80 番ポートにバインドするために
+ root
で起動されますが、子プロセスやスレッドは
+ もっと低い権限のユーザで Apache によって起動されます。
+ User と
Group
- $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
+ ディレクティブは
+ Apache の子プロセスの権限を設定するのに用いられます。
+ 子プロセスはクライアントに送るコンテンツ全てを読めないといけませんが、
+ 可能な限り必要最小限の権限のみを持っているようにするべきです。
MaxRequestsPerChild
- $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
+ は、古いプロセスを停止して新しいプロセスを起動することによって、
+ どの程度の頻度でサーバがプロセスをリサイクルするかを制御します。
CoreDumpDirectory
@@ -130,23 +130,23 @@
MaxSpareServers
-$B%"%$%I%k$J;R%5!<%P%W%m%;%9$N:GBg8D?t(B
+アイドルな子サーバプロセスの最大個数
MaxSpareServers number
MaxSpareServers 10
server config
- MaxSpareServers $B%G%#%l%/%F%#%V$O!"(B
- $B%"%$%I%k$J(B$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
- MaxSpareServers $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
+ MaxSpareServers ディレクティブは、
+ アイドルな子サーバプロセスの希望最大個数を設定します。
+ アイドルプロセスとは、リクエストを扱っていないプロセスです。
+ MaxSpareServers よりも多い数がアイドルであれば、
+ 親プロセスは超過プロセスを kill します。
- $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
+
非常に混んでいるサイトでのみ、このパラメータをチューニングするべきです。
+ このパラメータを大きくするということは、大抵の場合は悪い発想です。
MinSpareServers
- $B0J2<$K@_Dj$7$?>l9g!"(BMinSpareServers
- +1
$B$K<+F0D4@0$5$l$^$9!#(B
+ 以下に設定した場合、MinSpareServers
+ +1
に自動調整されます。
MinSpareServers
StartServers
@@ -154,20 +154,20 @@
MinSpareServers
-$B%"%$%I%k$J;R%5!<%P%W%m%;%9$N:G>.8D?t(B
+アイドルな子サーバプロセスの最小個数
MinSpareServers number
MinSpareServers 5
server config
- MaxSpareServers $B%G%#%l%/%F%#%V$O!"(B
- $B%"%$%I%k$J(B$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
- MinSpareServers $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
+ MaxSpareServers ディレクティブは、
+ アイドルな子サーバプロセスの希望最小個数を設定します。
+ アイドルプロセスとは、リクエストを扱っていないプロセスです。
+ MinSpareServers よりも少ない数がアイドルであれば、
+ 親プロセスは最高で 1 秒につき 1 個の割合で新しい子プロセスを生成します。
- $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
+ 非常に混んでいるサイトでのみ、このパラメータをチューニングするべきです。
+ このパラメータを大きくするということは、大抵の場合は悪い発想です。
MaxSpareServers
StartServers
diff --git a/docs/manual/mod/quickreference.xml.ja b/docs/manual/mod/quickreference.xml.ja
index f4c1d0be7f..0529017781 100644
--- a/docs/manual/mod/quickreference.xml.ja
+++ b/docs/manual/mod/quickreference.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -21,21 +21,21 @@
-->
- $B%G%#%l%/%F%#%V(B $B%/%$%C%/%j%U%!%l%s%9(B
+ ディレクティブ クイックリファレンス
- $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
- $B%G%#%l%/%F%#%V<-=q(B$B$r(B
- $B$4Mw2<$5$$!#(B
+ ディレクティブ クイックリファレンスでは、各 Apache 設定ディレクティブの
+ 使用方法、デフォルト値、ステータスとコンテキストを示しています。
+ 各ディレクティブの、より詳しい情報に関しては
+ ディレクティブ辞書を
+ ご覧下さい。
- $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
+ 第 1 列目はディレクティブの名前と使用方法です。
+ 第 2 列目は (もしあれば) デフォルト値となっています。
+ デフォルト値が長すぎて表示しきれない場合は、最初の文字列の後ろに
+ 「 + 」が続きます。
- $BBh(B 3, 4 $BNs$O!"2<$NI=$NCm$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
+ 第 3, 4 列は、下の表の注釈に従って、
+ ディレクティブの使用できるコンテキストと、
+ ディレクティブのステータスが示されています。
diff --git a/docs/manual/mod/worker.xml.ja b/docs/manual/mod/worker.xml.ja
index dc82001ac4..45adfa9998 100644
--- a/docs/manual/mod/worker.xml.ja
+++ b/docs/manual/mod/worker.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,100 +23,100 @@
worker
-$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
+マルチスレッドとマルチプロセスのハイブリッド型
+ウェブサーバを実装したマルチプロセッシングモジュール
MPM
worker.c
mpm_worker_module
- $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/$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
+ このマルチプロセッシングモジュール (MPM)
+ は、マルチスレッドとマルチプロセスのハイブリッド型サーバを
+ 実装しています。リクエストの応答にスレッドを使うと、
+ プロセスベースのサーバよりも少ないシステム資源で、
+ 多くのリクエストに応答することができます。
+ さらに、多くのスレッドを持った複数のプロセスを維持することで、
+ プロセスベースのサーバの持つ安定性を保持しています。
- $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
- ThreadsPerChild $B$H(B
- MaxClients $B$G$9!#(B
- ThreadsPerChild $B$O(B
- $B3F;R%W%m%;%9$GMQ0U$5$l$k%9%l%C%I?t$r@)8f$7$F!"(B
- MaxClients $B$O(B
- $B5/F0$5$l$k%9%l%C%I$NAm?t$N:GBgCM$r@)8B$7$^$9!#(B
+ この MPM を制御するのに使われる最も重要なディレクティブは、
+ ThreadsPerChild と
+ MaxClients です。
+ ThreadsPerChild は
+ 各子プロセスで用意されるスレッド数を制御して、
+ MaxClients は
+ 起動されるスレッドの総数の最大値を制限します。
Apache
-$B$N;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj(B
+の使用するアドレスとポートの設定
-$BF0:nJ}K!(B
- $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
+動作方法
+ 一つの制御用プロセス (親) が子プロセスを起動します。
+ 子プロセスは
ThreadsPerChild
- $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
+ ディレクティブで指定された一定数のサーバスレッドと接続を
+ listen するスレッドを一つ作ります。
+ Listener スレッドは接続が来たときにサーバプロセスに渡します。
- Apache $B$O(B$B%9%Z%"$N(B$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
+
Apache はスペアの、つまりアイドルなサーバスレッドの
+ プールを常に維持していて、それらは入ってくるリクエストに
+ 答えられるように待機しています。
+ このようにして、クライアントはリクエストの応答が得られるようになるために
+ 新しいスレッドやプロセスが生成されるのを
+ 待たなくてもよいようになっています。
+ 起動初期時のプロセス総数は、
StartServers
- $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
- MinSpareThreads $B$H(B
+ ディレクティブで設定されます。その後の稼働中に、
+ Apache は全プロセスのアイドルスレッドの合計数を見積もって、
+ MinSpareThreads と
MaxSpareThreads
- $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 したりします。この操作は非常に自律的なので、
+ これらのディレクティブをデフォルト値から変更する必要は
+ めったにないでしょう。
+ 同時に応答することのできるクライアント数の最大数
+ (つまり全プロセス中の総スレッド数の最大値) は
MaxClients
- $B%G%#%l%/%F%#%V$G7hDj$5$l$^$9!#(B
- $B3hF0Cf$N;R%W%m%;%9?t$N:GBgCM$O(B
- MaxClients $B$r(B
- ThreadsPerChild $B$G3d$C$?(B
- $B$b$N$K$J$j$^$9!#(B
+ ディレクティブで決定されます。
+ 活動中の子プロセス数の最大値は
+ MaxClients を
+ ThreadsPerChild で割った
+ ものになります。
- $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
+
活動中の子プロセスの数と子プロセス中のサーバスレッドの数の越えられない
+ 上限を設定するディレクティブが二つあります。これらはサーバを
+ 完全に停止して、再起動することでしか変更することはできません。
ServerLimit
- $B$O3hF0Cf$N;R%W%m%;%9$N1[$($i$l$J$$>e8B$r@_Dj$7!"(B
- MaxClients $B%G%#%l%/%F%#%V(B
- $B$NCM$r(B
- ThreadsPerChild $B$NCM$G3d$C$?CM0J>e$G$"$k(B
- $BI,MW$,$"$j$^$9!#(BThreadLimit $B$O(B
- $B%5!<%P%9%l%C%I$N1[$($i$l$J$$>e8B$G!"(BThreadsPerChild $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 worker $B%G%#%l%/%F%#%V$h$j$bA0$K=q$+$l$F$$$k(B
- $BI,MW$,$"$j$^$9!#(B
+ は活動中の子プロセスの越えられない上限を設定し、
+ MaxClients ディレクティブ
+ の値を
+ ThreadsPerChild の値で割った値以上である
+ 必要があります。ThreadLimit は
+ サーバスレッドの越えられない上限で、ThreadsPerChild ディレクティブの
+ 値以上である必要があります。デフォルト以外の値を指定する場合は
+ 他の worker ディレクティブよりも前に書かれている
+ 必要があります。
- $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 MaxClients $B$G;XDj$5$l$??t$^$G(B
- $BB8:_$G$-$^$9$,!"/$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
+ 活動中の子プロセス群に加えて、少なくとも一つのサーバスレッドが
+ 既存のクライアントからの接続を扱っている終了しようとしている
+ 子プロセスがある可能性があります。終了中のプロセスは MaxClients で指定された数まで
+ 存在できますが、実際に期待される数はずっと少なくなります。この
+ 振舞いは各子プロセスを終了させないようにすることで回避できます。
+ これは以下の様にして実現できます。
-
- MaxRequestsPerChild $B$NCM$r(B 0 $B$K@_Dj$9$k(B
+ MaxRequestsPerChild の値を 0 に設定する
-
- MaxSpareThreads $B$NCM$r(B
+ MaxSpareThreads の値を
MaxClients
- $B$HF1$8CM$K$9$k(B
+ と同じ値にする
- worker MPM $B$NE57?E*$J%W%m%;%9!&%9%l%C%I@)8f$N(B
- $B@_Dj$G$O!"
+
worker MPM の典型的なプロセス・スレッド制御の
+ 設定では、次のようになります。
ServerLimit 16
@@ -127,21 +127,21 @@
ThreadsPerChild 25
- $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
- root
$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
- User $B$H(B
- Group $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!"(Bsuexec
- $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
+ 通常 Unix では親プロセスは 80 番ポートにバインドするために
+ root
で起動されますが、子プロセスやスレッドは
+ もっと低い権限のユーザで Apache によって起動されます。
+ User と
+ Group ディレクティブは
+ Apache の子プロセスの権限を設定するのに用いられます。
+ 子プロセスはクライアントに送るコンテンツ全てを読めないといけませんが、
+ 可能な限り必要最小限の権限のみを持っているようにするべきです。
+ さらに、suexec
+ が使用されていない限り、これらのディレクティブは
+ CGI スクリプトで継承される権限も設定します。
MaxRequestsPerChild
- $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
+ は、古いプロセスを停止して新しいプロセスを起動することによって、
+ どの程度の頻度でサーバがプロセスをリサイクルするかを制御します。
AcceptMutex
diff --git a/docs/manual/mpm.xml.ja b/docs/manual/mpm.xml.ja
index ddfd359871..82f3fae7ed 100644
--- a/docs/manual/mpm.xml.ja
+++ b/docs/manual/mpm.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -22,87 +22,87 @@
- $B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)
+ マルチプロセッシングモジュール (MPM)
-$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
+この文書ではマルチプロセッシングモジュールがどのようなもので、
+Apache HTTP サーバでどのように使用されるかについて解説しています。
-$B$O$8$a$K(B
+はじめに
- Apache HTTP $B%5!<%P$O0[$J$kI}9-$$4D6-!"B?
+ Apache HTTP サーバは異なる幅広い環境、多種多様なプラットホームで
+ 動作するように、パワフルで柔軟性に富んだ設計になっています。
+ 異なるプラットホーム・異なる環境ではしばしば、
+ 異なる機能が必要になったり、
+ 同じ機能でも効率のために異なる実装が必要になったりします。
+ Apache ではモジュール化された設計により幅広い環境に適応してきました。
+ この設計のおかげで、管理者は
+ コンパイル時または実行時にどのモジュールをロードするか選ぶことによって、
+ どの機能をサーバに取り込むか選択することができます。
- 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
+
Apache 2.0 では、
+ このモジュール化された設計をサーバの基本機能にまで拡張しました。
+ サーバには精選されたマルチプロセッシングモジュール (MPM)
+ が付いてきて、これらはマシンのネットワークポートをバインドしたり、
+ リクエストを受け付けたり、リクエストを扱うよう子プロセスに割り当てたり、
+ といった役割を持ちます。
- $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:
+ モジュール化された設計をサーバのこのレベルまで拡張することで
+ 二つの重要な利点が生まれます:
- - 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 mpm_winnt
- $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$N%*%Z%l!<%F%#%s%0%7%9%F%`$G$b!"(B
- $BF1MM$K$3$NMxE@$O@8$^$l$^$9!#(B
+ - Apache は幅広いオペレーティングシステムを
+ より美しく効率的にサポートできます。
+ 特に Windows 版の Apache は随分効率的になりました。
+ なぜなら mpm_winnt
+ によって、Apache 1.3 で用いられていた POSIX
+ レイヤの代わりにネイティブのネットワーク機能を
+ 利用できるからです。
+ 特別化された MPM
+ を実装した他のオペレーティングシステムでも、
+ 同様にこの利点は生まれます。
- - $B%5!<%P$OFCDj$N%5%$%H8~$1$K!"$h$j>eo$KBg$-$J%9%1!<%i%S%j%F%#$rI,MW$H$9$k%5%$%H$G$O!"(B
- worker $B$d(B event $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 prefork
- $B$,MxMQ$G$-$^$9!#(B
+ - サーバは特定のサイト向けに、より上手にカスタマイズできます。
+ 例えば、非常に大きなスケーラビリティを必要とするサイトでは、
+ worker や event といったスレッド化された
+ MPM を利用できる一方で、安定性や古いソフトウェアとの互換性を
+ 必要とするサイトでは prefork
+ が利用できます。
- $B%f!<%6%l%Y%k$G$O!"(BMPM $B$OB>$N(B Apache
- $B%b%8%e!<%k$HF1Ey$K8+$($^$9!#(B
- $Bmodule $B%$%s%G%C%/%9(B$B$K$"$j$^$9!#(B
+ ユーザレベルでは、MPM は他の Apache
+ モジュールと同等に見えます。
+ 主な違いは、いつでも唯一の MPM
+ がロードされなければならないという点です。
+ 利用可能な MPM は
+ module インデックスにあります。
-MPM $B$rA*$V(B
+MPM を選ぶ
- 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
+ MPM は設定中に選択して、サーバ内部にコンパイルされなければ
+ なりません。
+ コンパイラは、スレッドが使用されている場合に様々な機能を最適化できますが、
+ そのためにはそもそもスレッドが使われているということを知る必要があります。
- $BK>$_$N(B MPM $B$rconfigure $B%9%/%j%W%H$G(B
- --with-mpm=NAME
$B0z?t$rMQ$$$F$/$@$5$$!#(B
- NAME $B$OK>$_$N(B MPM $B$NL>A0$G$9!#(B
+ 望みの MPM を実際に選ぶためには、configure スクリプトで
+ --with-mpm=NAME
引数を用いてください。
+ NAME は望みの MPM の名前です。
- $B%5!<%P%3%s%Q%$%k8e$O!"$I$N(B MPM $B$,A*Br$5$l$?$+$r(B
- ./httpd -l
$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
+ サーバコンパイル後は、どの MPM が選択されたかを
+ ./httpd -l
で確かめることができます。
+ このコマンドは、MPM
+ を含め、サーバにコンパイルで組み込まれたモジュール全てを
+ 列挙します。
-MPM $B%G%U%)%k%HCM(B
+MPM デフォルト値
-$B$rA*Br$7$J$1$l$P!"<+F0E*$K$3$l$i$N(B MPM
-$B$,A*Br$5$l$^$9!#(B
+次表に様々な OS 向けのデフォルトの MPM 一覧を掲載しています。
+コンパイル時に意図的に他を選択しなければ、自動的にこれらの MPM
+が選択されます。
diff --git a/docs/manual/new_features_2_0.xml.ja b/docs/manual/new_features_2_0.xml.ja
index 3d96563aaf..b4ff5f8675 100644
--- a/docs/manual/new_features_2_0.xml.ja
+++ b/docs/manual/new_features_2_0.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -22,217 +22,217 @@
-Apache 2.0 $B$N?75!G=$N35MW(B
+Apache 2.0 の新機能の概要
- $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
+ この文書では、Apache HTTP サーババージョン 1.3 と 2.0
+ の主な違いについて記述しています。
-1.3 $B$+$i(B 2.0 $B$X$N%"%C%W%0%l!<%I(B
+1.3 から 2.0 へのアップグレード
- $B%3%"5!G=$N3HD%(B
+ コア機能の拡張
- - Unix $B$N%9%l%C%I(B
+ - Unix のスレッド
- - 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
- $Be$7$^$9!#(B
+ - POSIX スレッドをサポートしている Unix システム上では、
+ Apache はマルチプロセス、マルチスレッドのハイブリッドモードで
+ 実行できるようになりました。これにより
+ 多くの設定においてスケーラビリティが向上します。
- - $B?7$7$$%S%k%I%7%9%F%`(B
+ - 新しいビルドシステム
- - $B%S%k%I%7%9%F%`$O(B
autoconf
$B$H(B libtool
- $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
+ - ビルドシステムは
autoconf
と libtool
+ に基づいたものになるように、
+ 新しく書き直されました。これにより、Apache の configure のシステムは
+ 他のパッケージと似たものになりました。
- - $B%^%k%A%W%m%H%3%k%5%]!<%H(B
+ - マルチプロトコルサポート
- - Apache $B$KJ#?t$N%W%m%H%3%k$r07$&$?$a$N5!9=$,Hw$o$j$^$7$?!#(B
- $BNc$H$7$F(B mod_echo $B$,=q$+$l$F$$$^$9!#(B
+ - Apache に複数のプロトコルを扱うための機構が備わりました。
+ 例として mod_echo が書かれています。
- - Unix $B0J30$N%W%i%C%H%U%)!<%`$N%5%]!<%H$N2~A1(B
+ - Unix 以外のプラットフォームのサポートの改善
- - 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 $B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM) $B$H(B
- Apache Portable Runtime (APR) $B$NF3F~$K$h$j!"(B
- $B%M%$%F%#%t$N(B API $B$G
+
- Apache 2.0 は BeOS、OS/2、Windows などの Unix 以外の
+ プラットフォームで、より速く、より安定して動作するようになりました。
+ プラットフォーム特有の マルチプロセッシングモジュール (MPM) と
+ Apache Portable Runtime (APR) の導入により、
+ ネイティヴの API で実装されるようになり、
+ バグが多く、性能の悪いことが多い POSIX エミュレーションレイヤの使用を
+ 回避することができました。
- - $B?7$7$$(B Apache API
+ - 新しい Apache API
- - 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
+ - 2.0 ではモジュールの API が大きく変わりました。
+ 1.3 にあったモジュールの順番/優先度の問題の多くは
+ なくなっているはずです。2.0 は優先度の選択をほとんどを自動的に行ない、
+ モジュールの順番はより柔軟性を高めるためにフック毎に行なわれるように
+ なりました。また、コア Apache サーバにパッチをあてることなく
+ 追加のモジュール機能を提供することができるように新しい関数が
+ 追加されました。
- - IPv6 $B%5%]!<%H(B
+ - IPv6 サポート
- - 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
+
- Apache が使用している Apache Portable Runtime library が
+ IPv6 をサポートしているシステムでは Apache は デフォルトで
+ IPv6 のソケットを listen します。さらに、
Listen,
NameVirtualHost,
VirtualHost
- $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
- "
Listen [2001:db8::1]:8080
")$B!#(B
+ の各ディレクティブが IPv6 のアドレスを
+ サポートするようになりました (例えば、
+ "Listen [2001:db8::1]:8080
")。
- - $B%U%#%k%?(B
+ - フィルタ
- - 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
- mod_include $B$N(B
INCLUDES
$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$?!#(Bmod_ext_filter
- $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
+ - Apache のモジュールはサーバから送られてきたり、サーバへ
+ 送るストリームに対して動作するフィルタとして書くことができるように
+ なりました。これにより、例えば CGI スクリプトの出力を
+ mod_include の
INCLUDES
フィルタを使って
+ Server Side Include のディレクティブを解析する、
+ というようなことが可能になりました。mod_ext_filter
+ で外部プログラムをフィルタとして動作させることができます。
+ これは CGI プログラムをハンドラとして動作させるのと
+ よく似た方法でできます。
- - $BB?8@8l%(%i!<1~Ez(B
+ - 多言語エラー応答
- - $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}
+
- ブラウザへのエラー応答のメッセージが、SSI の文書を使って
+ 複数の言語で提供されるようになりました。見ための一貫性を保つために
+ 管理者がカスタマイズすることもできます。
- - $B@_Dj$N4JAG2=(B
+ - 設定の簡素化
- - $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
Port
$B%G%#%l%/%F%#%V$H(B
- Bind
$B%G%#%l%/%F%#%V$O(B
- $B$J$/$J$j$^$7$?!#(BListen
- $B%G%#%l%/%F%#%V$N$_$,(B IP $B%"%I%l%9$N%P%$%s%I$K;H$o$l$^$9!#(B
- ServerName $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
+ - 多くの混乱を招きがちなディレクティブが簡素化されました。
+ よく混乱を引き起こしていた
Port
ディレクティブと
+ Bind
ディレクティブは
+ なくなりました。Listen
+ ディレクティブのみが IP アドレスのバインドに使われます。
+ ServerName ディレクティブでは
+ リダイレクトと vhost の認識のためだけにサーバの名前とポート番号を
+ 指定します。
- - Windows NT $B$N%M%$%F%#%t(B Unicode $B%5%]!<%H(B
+ - Windows NT のネイティヴ Unicode サポート
- - 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
- $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
+ - Windows NT 上の Apache 2.0 はファイル名の文字エンコード全てに
+ utf-8 を使うようになりました。これらは Unicode ファイルシステムに
+ 直接変換されるので、Windows 2000 と Windows XP を含む、全ての
+ Windows NT 系で多言語サポートが提供されます。
+ このサポートは、ファイルシステムのアクセス時にローカルの
+ コードページを使う Windows 95, 98, ME には適用されません。
- - $B@55,I=8=%i%$%V%i%j$N%"%C%W%G!<%H(B
+ - 正規表現ライブラリのアップデート
- - Apache 2.0 $B$O(B Perl
- $B8_49@55,I=8=%i%$%V%i%j(B (PCRE) $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
+ - Apache 2.0 は Perl
+ 互換正規表現ライブラリ (PCRE) を含んでいます。
+ 正規表現の評価には、より強力になった Perl 5
+ 構文を使用します。
- $B%b%8%e!<%k$N3HD%(B
+ モジュールの拡張
- mod_ssl
- - 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
+ - Apache 2.0 の新モジュール。このモジュールは OpenSSL が
+ 提供する SSL/TLS 暗号プロトコルへのインタフェースです。
- mod_dav
- - 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
+
- Apache 2.0 の新モジュール。このモジュールはウェブコンテンツを
+ 送り、維持するための規格
+ HTTP Distributed Authoring and Versioning (DAV) を実装しています。
- mod_deflate
- - 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
+ - Apache 2.0 の新モジュール。送信前に送信内容を圧縮して
+ ネットワーク帯域を節約する、というリクエストをブラウザが
+ 要求できるようにします。
- mod_auth_ldap
- - 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 mod_ldap $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
+ - Apache 2.0.41 の新モジュール。HTTP 基本認証の証明書を保存するのに、
+ LDAP データベースを使用できるようになります。
+ 関連モジュールの mod_ldap で、
+ コネクションのプール機能と結果のキャッシュ機能が提供されます。
- mod_auth_digest
- - $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
+ - このモジュールは共有メモリを使うことにより、プロセスをまたいだ
+ セッションのキャッシュをサポートするようになりました。
- mod_charset_lite
- - Apache 2.0 $B$N?7%b%8%e!<%k!#$3$N
+
- Apache 2.0 の新モジュール。この実験的なモジュールは
+ キャラクタセットの変換や再符号化を可能にします。
- mod_file_cache
- - 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
mod_mmap_static
$B5!G=$,4^$^$l!"(B
- $B$^$?!"DI2C$N%-%c%C%7%e5!G=$,2C$o$C$F$$$^$9!#(B
+ - Apache 2.0 の新モジュール。このモジュールには、
+ Apache 1.3 における
mod_mmap_static
機能が含まれ、
+ また、追加のキャッシュ機能が加わっています。
- mod_headers
- - $B$3$N%b%8%e!<%k$O(B Apache 2.0 $B$GHs>o$K=@Fp@-$,(B
- $B9b$/$J$j$^$7$?!#(Bmod_proxy
- $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
+ - このモジュールは Apache 2.0 で非常に柔軟性が
+ 高くなりました。mod_proxy
+ で使われるリクエストのヘッダを変更できるようになりましたし、
+ 応答ヘッダを条件に応じて設定できるようになりました。
- mod_proxy
- - 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$5$l$^$7$?!#$5$i$K!"?7$7$$(B
+
- proxy モジュールは新しいフィルタの機構を利用するためと、
+ より信頼できる、HTTP/1.1 に準拠した proxy を実装するために
+ 完全に書き直されました。さらに、新しい
Proxy
- $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 されるサイトのより読みやすく (内部的にもより速い)
+ 設定を提供します。オーバーロードされた
<Directory "proxy:... >
- $B@_Dj$O%5%]!<%H$5$l$F$$$^$;$s!#$3$N%b%8%e!<%k$O(B proxy_connect
,
+ 設定はサポートされていません。このモジュールは proxy_connect
,
proxy_ftp
, proxy_http
- $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
+ といった、特定のプロトコルをサポートする
+ モジュールに分割されるようになりました。
- mod_negotiation
- - $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クライアントが NOT ACCEPTABLE や MULTIPLE CHOICES 応答の
+ 代わりに常に単独の文書を受けとるようにするために、新しいディレクティブ
ForceLanguagePriority
- $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
+ を使うことができるようになりました。
+ さらに、より一貫性のある結果を提供するために
+ ネゴシエーションと MultiViews のアルゴリズムが改善され、
+ 文書の内容を含めることのできる、新しい形式のタイプマップが
+ 提供されるようになりました。
- mod_autoindex
- - 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
+ - Autoindex されるディレクトリの内容一覧が、
+ きれいに表示されるために HTML のテーブルを使うように
+ 設定できるようになりました。また、バージョンによるソーティングなど、
+ より細かいソーティングの制御ができるようになり、ディレクトリ
+ の内容一覧をワイルドカードにより選別することができるようにもなりました。
- mod_include
- - $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$/!"mod_include
- $B$NJQ?t(B $0 .. $9 $B$K$h$j
+
- 新しいディレクティブにより、SSI のデフォルトの開始タグと終了タグを
+ 変更できるようになりました。また、エラーと時刻の形式の設定が SSI の
+ 文書中ではなく、主設定ファイル中で行なえるようになりました。
+ 正規表現の解析とグループ化の結果 (Perl の正規表現の構文に
+ 基づいたものになりました) を mod_include
+ の変数 $0 .. $9 により取得できるようになりました。
- mod_auth_dbm
- AuthDBMType
- $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
+ ディレクティブにより、複数の DBM 型のデータベースをサポートする
+ ようになりました。
diff --git a/docs/manual/sections.xml.ja b/docs/manual/sections.xml.ja
index 208572cf2f..2a13e0c706 100644
--- a/docs/manual/sections.xml.ja
+++ b/docs/manual/sections.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -22,16 +22,16 @@
-$B%;%/%7%g%s$N@_Dj(B
+セクションの設定
- $B@_Dj%U%!%$%k(B$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 .htaccess
$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
+ 設定ファイル中のディレクティブは
+サーバ全体に適用されたり、特定のディレクトリやファイル、ホスト、URL にのみ
+適用されるように制限したりすることができます。この文書は設定用のセクションの
+コンテナや .htaccess
ファイルを使って他の設定ディレクティブの
+スコープを変更する方法を説明します。
-$B@_DjMQ%;%/%7%g%s%3%s%F%J$N
+設定用セクションコンテナの種類
@@ -53,21 +53,21 @@
-$B%3%s%F%J$K$OFs$D$N4pK\$H$J$k2A$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}!"(BIfDefine $B%3%s%F%J$H(B IfModule $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
+コンテナには二つの基本となる種類があります。ほとんどのコンテナは
+各リクエストに対して評価されます。その場合、コンテナ中のディレクティブは
+コンテナにマッチするリクエストにのみ適用されます。
+一方、IfDefine コンテナと IfModule コンテナは
+サーバの起動時と再起動時にのみ評価されます。起動時に条件が真であれば、
+コンテナ中のディレクティブはすべてのリクエストに適用されます。条件が
+偽であれば、コンテナ中のディレクティブは無視されます。
-IfDefine $B%G%#%l%/%F%#%V$O(B
-httpd $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$($Phttpd -DClosedForNow $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:
+IfDefine ディレクティブは
+httpd コマンドラインで適切なパラメータが定義されたときにのみ
+適用されるディレクティブを囲います。例えば次の設定では、サーバが
+httpd -DClosedForNow
を使って起動されたときだけすべての
+リクエストを別のサイトにリダイレクトします:
<IfDefine ClosedForNow>
@@ -75,20 +75,20 @@ Redirect / http://otherserver.example.com/
</IfDefine>
-IfModule $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
-LoadModule $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
+
IfModule は
+非常に似ていますが、代わりにサーバ上でモジュールが使用可能な場合にのみ
+適用可能なディレクティブを囲います。モジュールはサーバに
+静的に組み込まれているか、動的に組み込むようになっていて、設定ファイル中で
+LoadModule の行がより前の
+部分に書かれている必要があります。このディレクティブは特定のモジュールの
+存在に関わらず設定ファイルが動作する必要がある場合にのみ使ってください。
+常に動作して欲しいディレクティブを囲むために使うべきではありません。
+存在しないモジュールに関する有用なエラーメッセージの発生を抑制してしまいますので。
-$Bmod_mime_magic $B$,$"$k$H$-$K$N$_(B MimeMagicFiles $B%G%#%l%/%F%#%V$,(B
-$BE,MQ$5$l$^$9!#(B
+次の例では、mod_mime_magic があるときにのみ MimeMagicFiles ディレクティブが
+適用されます。
<IfModule mod_mime_magic.c>
@@ -96,41 +96,41 @@ MimeMagicFile conf/magic
</IfModule>
-IfDefine $B%G%#%l%/%F%#%V$H(B
-IfModule $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
+
IfDefine ディレクティブと
+IfModule ディレクティブは
+テストの前に "!" を付けることで否定の条件を適用することができます。
+また、これらのセクションはより複雑な制限を課すために入れ子にすることができます。
-$B%U%!%$%k%7%9%F%`$H%&%'%V6u4V(B
+ファイルシステムとウェブ空間
-$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
-/usr/local/apache2
$B$K!"(BWindows $B%U%!%$%k%7%9%F%`$G$O(B
-"c:/Program Files/Apache Group/Apache2"
$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
-/dir/
$B$H$$$&%Q%9$O%U%!%$%k%7%9%F%`$N(B
-/usr/local/apache2/htdocs/dir/
$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
+最もよく使われる設定のセクションコンテナはファイルシステムやウェブ空間の
+特定の場所の設定を変更するものです。まず、この二つの違いを理解することが
+大切です。ファイルシステムはオペレーティングシステムから見たディスクの内容です。
+たとえば、デフォルトのインストールでは Apache は Unix ファイルシステムでは
+/usr/local/apache2
に、Windows ファイルシステムでは
+"c:/Program Files/Apache Group/Apache2"
に存在します。
+(Apache では Windows でもパスセパレータとしてスラッシュを使うことに
+気をつけてください。) 対照的に、ウェブ空間はあなたのサイトを
+ウェブサーバから配信されるものとして見たもので、クライアントに見えるものです。
+デフォルトの Unix 上の Apache のインストールではウェブ空間の
+/dir/
というパスはファイルシステムの
+/usr/local/apache2/htdocs/dir/
というパスに対応します。
+ウェブページはデータベースや他の場所から動的に生成することもできますので、
+ウェブ空間はファイルシステムに直接マップする必要はありません。
-$B%U%!%$%k%7%9%F%`%3%s%F%J(B
+ファイルシステムコンテナ
-Directory $B%G%#%l%/%F%#%V$H(B
-Files $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
-Directory $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.htaccess $B%U%!%$%k(B$B$r(B
-$B;H$&$3$H$G$bF1$88z2L$rF@$k$3$H$,$G$-$^$9!#Nc$($P!"/var/web/dir1 $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
+Directory ディレクティブと
+Files ディレクティブ、それと
+それらの正規表現版はディレクティブをファイルシステムの一部分に対して適用します。
+Directory セクションの
+中のディレクティブは指定されたディレクトリとそのすべてのサブディレクトリに
+適用されます。.htaccess ファイルを
+使うことでも同じ効果を得ることができます。例えば、次の設定では
+/var/web/dir1
とすべてのサブディレクトリに対して
+ディレクトリインデックスを行ないます。
<Directory /var/web/dir1>
@@ -138,11 +138,11 @@ Options +Indexes
</Directory>
-Files $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$Nl=j$N(B
-private.html
$B$H$$$&L>A0$N%U%!%$%k$X$N%"%/%;%9$r5qH]$7$^$9!#(B
+Files セクションの
+中にあるディレクティブはどのディレクトリにあるかに関わらず、指定された名前の
+すべてのファイルに適用されます。ですから例えば以下の設定ディレクティブが
+設定ファイルの主セクションに書かれたときには、すべての場所の
+private.html
という名前のファイルへのアクセスを拒否します。
<Files private.html>
@@ -151,15 +151,15 @@ Deny from all
</Files>
-$B%U%!%$%k%7%9%F%`$NFCDj$N>l=j$K$"$k%U%!%$%k$r;XDj$9$k$?$a$K!"(B
-Files $B%;%/%7%g%s$H(B
-Directory $B%;%/%7%g%s$r(B
-$BAH$_9g$o$;$k$3$H$,$G$-$^$9!#Nc$($P!"ファイルシステムの特定の場所にあるファイルを指定するために、
+Files セクションと
+Directory セクションを
+組み合わせることができます。例えば、次の設定では
/var/web/dir1/private.html
,
/var/web/dir1/subdir2/private.html
,
-/var/web/dir1/subdir3/private.html
$B$J$I!"(B
-/var/web/dir1/
$B%G%#%l%/%H%j$N2<$K$"$k$9$Y$F$N(B
-private.html
$B$X$N%"%/%;%9$r5qH]$7$^$9!#(B
+/var/web/dir1/subdir3/private.html
など、
+/var/web/dir1/
ディレクトリの下にあるすべての
+private.html
へのアクセスを拒否します。
<Directory /var/web/dir1>
@@ -171,18 +171,18 @@ Deny from all
-$B%&%'%V6u4V%3%s%F%J(B
+ウェブ空間コンテナ
-$B0lJ}!"(BLocation
-$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!"一方、Location
+ディレクティブとその正規表現版はウェブ空間上の内容に対して設定を変更します。
+たとえば、次の設定では /private で始まる URL パスへのアクセスを制限します。
+具体的には、
http://yoursite.example.com/private
,
http://yoursite.example.com/private123
,
http://yoursite.example.com/private/dir/file.html
-$B$X$N%j%/%(%9%H$d!"(B
-$BB>$NF1MM$K(B /private
$BJ8;zNs$G;O$^$k%j%/%(%9%H$K(B
-$BE,MQ$5$l$^$9!#(B
+へのリクエストや、
+他の同様に /private
文字列で始まるリクエストに
+適用されます。
<Location /private>
@@ -192,11 +192,11 @@ Deny from all
Location
-$B%G%#%l%/%F%#%V$O%U%!%$%k%7%9%F%`$H4X78$"$kI,MW$,A4$/$"$j$^$;$s!#(B
-$B$?$H$($Pmod_status$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
-server-status
$B$H$$$&%U%!%$%k$,B8:_$9$kI,MW$O$"$j$^$;$s!#(B
+ディレクティブはファイルシステムと関係ある必要が全くありません。
+たとえば次の例では、どのようにして特定の URL を
+mod_statusで提供されている Apache
+内部ハンドラにマップするかを示しています。ファイルシステムに
+server-status
というファイルが存在する必要はありません。
<Location /server-status>
@@ -205,30 +205,30 @@ SetHandler server-status
-$B%o%$%k%I%+!<%I$H@55,I=8=(B
+ワイルドカードと正規表現
Directory,
Files,
Location
-$B%G%#%l%/%F%#%V$G$O!"(B C $BI8=`%i%$%V%i%j$N(B fnmatch
$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
-"[seq]" $B$O(B seq $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
+ディレクティブでは、 C 標準ライブラリの fnmatch
のように
+shell スタイルのワイルドカードキャラクタが使用できます。
+"*" 文字は任意の文字列にマッチし、"?" 文字は任意の 1 文字にマッチし、
+"[seq]" は seq の任意の文字にマッチします。
+"/" 文字はどのワイルドカードでもマッチされません。
+明示的に指定する必要があります。
-$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
+
これより柔軟なマッチングが必要な場合は、これらのコンテナに正規表現
+(regex) 版である
DirectoryMatch,
FilesMatch,
LocationMatch
-$B$,$"$j!"%^%C%A$rA*Br$9$k$N$K(B perl $B8_49(B$B@55,I=8=(B$B$r;HMQ$G$-$^$9!#$7$+$7!"
+があり、マッチを選択するのに perl 互換正規表現を使用できます。しかし、次の設定のマージに目を通して、
+regex セクションを使用することで、ディレクティブの適用がどのように
+変化するか把握しておいてください。
-$BA4%f!<%6%G%#%l%/%H%j$N@_Dj$rJQ99$9$k!"Hs(B regex
-$B%o%$%k%I%+!<%I%;%/%7%g%s$O
+
全ユーザディレクトリの設定を変更する、非 regex
+ワイルドカードセクションは次のようになります。
<Directory /home/*/public_html>
@@ -236,8 +236,8 @@ Options Indexes
</Directory>
-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
+regex セクションを使用することで、画像ファイルの多くのタイプに対する
+アクセスを一度に拒否できます。
<FilesMatch \.(?i:gif|jpe?g|png)$>
Order allow,deny
@@ -247,25 +247,25 @@ Deny from all
-$B$$$D2?$r;H$&$+(B
+いつ何を使うか
-$B%U%!%$%k%7%9%F%`%3%s%F%J$H%&%'%V6u4V%3%s%F%J$r;H$$J,$1$k$N$O!"(B
-$Bo$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
-Directory $B$+(B
+ファイルシステムコンテナとウェブ空間コンテナを使い分けるのは、
+実際には非常に簡単です。ファイルシステムに依存する
+オブジェクトにディレクティブを適応する場合は、必ず
+Directory か
Files
-$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
+を使用します。ファイルシステムに依存しないオブジェクト
+(データベースから生成されるウェブページなど)
+にディレクティブを適用する際には、
Location
-$B$r;HMQ$7$^$9!#(B
+を使用します。
-$B%U%!%$%k%7%9%F%`>e$N%*%V%8%'%/%H$X$N%"%/%;%9$r@)8B$9$k$?$a$K!"(B
+
ファイルシステム上のオブジェクトへのアクセスを制限するために、
Location
-$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
+を決して使用ないようにしましょう。
+同一のファイルシステム位置にマップしている、ウェブ空間位置 (URL)
+が多数あって、設定した制限を迂回されてしまうかもしれないからです。
+例えば次の設定を考えてみましょう。
<Location /dir/>
@@ -275,51 +275,51 @@ Deny from all
http://yoursite.example.com/dir/
-$B$X$N%j%/%(%9%H$G$O>e.J8;z$r6hJL$7$J$$(B
-$B%U%!%$%k%7%9%F%`$r;H$C$F$$$?$i$I$&$J$k$G$7$g$&(B?
+へのリクエストでは上手く動作します。しかし大文字小文字を区別しない
+ファイルシステムを使っていたらどうなるでしょう?
http://yoursite.example.com/DIR/
-$B$X$N%j%/%(%9%H$G4JC1$K%"%/%;%9@)8B$r1*2s$5$l$F$7$^$$$^$9!#$3$l$KBP$7$F(B
+へのリクエストで簡単にアクセス制限を迂回されてしまいます。これに対して
Directory
-$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
+ディレクティブを使用すると、どのように呼び出されたかに関わらず
+その場所から提供される内容に適用されます。
+(例外はファイルシステムのリンクです。シンボリックリンクを使って、
+同一のディレクトリを複数のファイルシステムに設置できます。
Directory
-$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 Options
-$B%G%#%l%/%F%#%V$r;HMQ$7$F%7%s%\%j%C%/%j%s%/$rL58z$K$9$k$Y$-$G$9!#(B)
+ディレクティブはパス名をリセットすることなくシンボリックリンクを
+辿ります。ですから、高度なセキュリティが要求される場合は、
+適切に Options
+ディレクティブを使用してシンボリックリンクを無効にするべきです。)
-$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
-<Location />
$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
+大文字小文字を区別するファイルシステムを使用しているから上記のことは
+無関係だと思われるかもしれませんが、
+同一のファイルシステム位置に複数のウェブ空間位置をマップする方法は、
+他にいくらでもあるということを覚えていてください。
+ですからできる限りファイルシステムコンテナを使用してください。
+しかしながら一つだけ例外があります。
+<Location />
セクションはどんな URL
+にも関わらず適用されるので、完全に安全です。
-$B%P!<%A%c%k%[%9%H(B
+バーチャルホスト
VirtualHost
-$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$B%P!<%A%c%k%[%9%H%I%-%e%a%s%H(B$B$r(B
-$B$4Mw2<$5$$!#(B
+コンテナは特定のホストに適用するディレクティブを格納します。
+一台のマシンで複数のホストを異なる設定で提供したいときに有用です。
+詳細に関してはバーチャルホストドキュメントを
+ご覧下さい。
-$B%W%m%/%7(B
+プロクシ
Proxy
-$B$H(B ProxyMatch
-$B%3%s%F%J$O!"FCDj$N(B URL $B$K%^%C%A$9$k(B mod_proxy
-$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$($Pcnn.com
-$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
+と ProxyMatch
+コンテナは、特定の URL にマッチする mod_proxy
+プロクシサーバを経由してアクセスしたサイトに対してのみ適用される
+設定ディレクティブを格納します。例えば次の設定は、cnn.com
+ウェブサイトにアクセスするために用いられるプロクシサーバを
+制限します。
<Proxy http://cnn.com/*>
@@ -329,13 +329,13 @@ Deny from all
-$B$I$N%G%#%l%/%F%#%V$,;H$($k$N(B?
+どのディレクティブが使えるの?
-$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 Context
-$B$r8+$F$/$@$5$$!#(B
+
どのタイプの設定セクションでどのディレクティブが使用できるかは、
+ディレクティブの Context
+を見てください。
Directory
-$B$G;HMQ2DG=$J$b$N$OA4$F!"F1MM$K(B
+で使用可能なものは全て、同様に
DirectoryMatch,
Files,
FilesMatch,
@@ -343,89 +343,89 @@ Deny from all
LocationMatch,
Proxy,
ProxyMatch
-$B%;%/%7%g%s$G;HMQ2DG=$G$9!#$7$+$7$J$,$i4v$D$+Nc30$bB8:_$7$^$9!#(B
+セクションで使用可能です。しかしながら幾つか例外も存在します。
-- AllowOverride $B%G%#%l%/%F%#%V$O(B
+
- AllowOverride ディレクティブは
Directory
-$B%;%/%7%g%s$G$N$_;HMQ2DG=$G$9!#(B
+セクションでのみ使用可能です。
-FollowSymLinks
$B$H(B SymLinksIfOwnerMatch
$B$N(B
-Options $B$O!"(B
+FollowSymLinks
と SymLinksIfOwnerMatch
の
+Options は、
Directory
-$B%;%/%7%g%s$+(B .htaccess
$B%U%!%$%k$G$N$_;HMQ2DG=$G$9!#(B
+セクションか .htaccess
ファイルでのみ使用可能です。
-- Options $B%G%#%l%/%F%#%V$O!"(B
+
- Options ディレクティブは、
Files
-$B$H(B FilesMatch
-$B%;%/%7%g%s$G$O;HMQ$G$-$^$;$s!#(B
+と FilesMatch
+セクションでは使用できません。
-$B%;%/%7%g%s$N%^!<%8J}K!(B
+セクションのマージ方法
- $B%^!<%8$N=gHV$O0J2<$N$h$&$K$J$C$F$$$^$9(B:
+ マージの順番は以下のようになっています:
- Directory ($B@55,I=8=L5$7(B) $B$H(B
-
.htaccess
$B$rF1;~$K(B (.htaccess
$B$,5v2D$5$l$F$$$l$P!"$=$l$,(B
- Directory $B$r>e=q$-$7$^$9(B)
+ type="section" module="core">Directory (正規表現無し) と
+ .htaccess
を同時に (.htaccess
が許可されていれば、それが
+ Directory を上書きします)
- DirectoryMatch
- ($B$H(B
<Directory ~>
+ (と <Directory ~>
- - Files $B$H(B
- FilesMatch $B$rF1;~$K(B
+ - Files と
+ FilesMatch を同時に
- - Location $B$H(B
- LocationMatch $B$rF1;~$K(B
+ - Location と
+ LocationMatch を同時に
Directory
- $B0J30$O!"$=$l$>$l$N%0%k!<%W$O@_Dj%U%!%$%k$K8=$l$?=gHV$K=hM}$5$l$^$9!#(B
- Directory ($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 <Directory /var/web/dir1>
$B$O(B
- <Directory /var/web/dir/subdir>
$B$NA0$K=hM}$5$l$^$9!#J#?t$N(B
+ 以外は、それぞれのグループは設定ファイルに現れた順番に処理されます。
+ Directory (上のグループ 1)
+ はディレクトリが短いものから長いものへと処理されます。ですから、
+ 例えば <Directory /var/web/dir1>
は
+ <Directory /var/web/dir/subdir>
の前に処理されます。複数の
Directory $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 セクションが
+ 同じディレクトリに
+ 適用される場合は、設定ファイル中の順番に従って処理されます。
Include
- $B$K$h$C$FA^F~$5$l$?@_Dj$O(B $BA^F~$7$F$$$k%U%!%$%k$N(B
+ によって挿入された設定は 挿入しているファイルの
Include
- $B%G%#%l%/%F%#%V$N0LCV$K$"$C$?$+$N$h$&$K07$o$l$^$9!#(B
+ ディレクティブの位置にあったかのように扱われます。
VirtualHost $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
- $B8e(B$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
+ module="core">VirtualHost セクション中のセクションは
+ バーチャルホストの定義の外側の対応するセクションの
+ 後に適用されます。これによりバーチャルホストが
+ メインのサーバ設定を上書きできるようなります。
- mod_proxy $B$G%j%/%(%9%H$,=hM}$5$l$k>l9g$O!"(B
- $B=hM}=gHV$N$&$A!"(BDirectory $B%3%s%F%J$NItJ,$,(B
+
mod_proxy でリクエストが処理される場合は、
+ 処理順番のうち、Directory コンテナの部分が
Proxy
- $B%3%s%F%J$K
+ コンテナに取って代わられます。
- $B8e$N%;%/%7%g%s$N%G%#%l%/%F%#%V$,A0$N%;%/%7%g%s$N$b$N$r>e=q$-$7$^$9!#(B
+ 後のセクションのディレクティブが前のセクションのものを上書きします。
-$B5;=Q%a%b(B
- $BA0$rJQ49$9$kCJ3,(B (URL
- $B$r%U%!%$%kL>$K%^%C%W$9$k$?$a$K(B Alias
$B$d(B
- DocumentRoot
$B$,;HMQ$5$l$k$H$3$m(B) $B$ND>A0$K(B
+技術メモ
+ 実際には、名前を変換する段階 (URL
+ をファイル名にマップするために Alias
や
+ DocumentRoot
が使用されるところ) の直前に
Location/LocationMatch
- $B$,9T$J$o$l$^$9!#(B
- $B$3$l$i$rE,MQ$7$?7k2L$OJQ49$,=*$o$C$?8e$K40A4$K
-$BNc(B
+例
-$B
+
次はマージの順番を示すための恣意的な例になっています。
+リクエスト全てに適用されるとして、本例のディレクティブは
+A > B > C > D > E の順番に適用されます。
<Location />
@@ -452,12 +452,12 @@ A
-$B$b$C$H6qBNE*$J!"もっと具体的な、次の例を考えてみましょう。
Directory
-$B%;%/%7%g%s$K@_CV$5$l$?%"%/%;%9@)8B$K4X$o$i$:!"(B
+セクションに設置されたアクセス制限に関わらず、
Location
-$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!
+セクションが最後に評価されて、サーバへのアクセスは制限されません。
+言い換えれば、マージの順番は重要で、注意して使用してください!
<Location />
diff --git a/docs/manual/server-wide.xml.ja b/docs/manual/server-wide.xml.ja
index 651ef0cc60..67ace472c6 100644
--- a/docs/manual/server-wide.xml.ja
+++ b/docs/manual/server-wide.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -22,16 +22,16 @@
- $B%5!<%PA4BN$N@_Dj(B
+ サーバ全体の設定
-$B$3$N%I%-%e%a%s%H$G$O(Bcore
-$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
+このドキュメントではcore
+サーバのディレクティブの中で、
+基本動作を設定するためのものを説明します。
- $B%5!<%P(B ID
+ サーバ ID
@@ -43,26 +43,26 @@
- ServerAdmin $B%G%#%l%/%F%#%V$H(B
+
ServerAdmin ディレクティブと
ServerTokens
- $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
- ServerTokens $B%G%#%l%/%F%#%V$O!"(BServer HTTP
- $B%l%9%]%s%9%X%C%@%U%#!<%k%I$NCM$r@_Dj$7$^$9!#(B
+ ディレクティブは、エラーメッセージなどのサーバが作るドキュメントに、
+ どのようなサーバの情報を表示するかを制御します。
+ ServerTokens ディレクティブは、Server HTTP
+ レスポンスヘッダフィールドの値を設定します。
- ServerName $B%G%#%l%/%F%#%V$H(B
+
ServerName ディレクティブと
UseCanonicalName
- $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
+ ディレクティブは、サーバが自分自身を参照する URL
+ を作るときに使われます。
+ たとえば、クライアントがディレクトリを要求して、
+ そのディレクトリ名の最後にスラッシュが付いていないような場合には、
+ ドキュメントの相対的な参照を正しく解決できるようにするために、
+ Apache は最後のスラッシュを含んだ完全なパスにクライアントを
+ リダイレクトさせる必要があります。
- $B%U%!%$%k$N0LCV(B
+ ファイルの位置
@@ -76,18 +76,18 @@
- $B$3$l$i$N%G%#%l%/%F%#%V$O(B Apache
- $B$,E,@Z$JF0:n$r$9$k$?$a$KI,MW$J3FServerRoot $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$B!V%;%-%e%j%F%#>pJs!W(B
- $B$r;2>H$7$F$/$@$5$$!#(B
+ これらのディレクティブは Apache
+ が適切な動作をするために必要な各種ファイルの位置を制御します。
+ パスがスラッシュ (/) で始まっていないときは、ファイルは
+ ServerRoot からの相対パスとして
+ 探されます。root
+ 以外のユーザが書き込み可能なパスにファイルを置く場合は注意が必要です。
+ 詳細は「セキュリティ情報」
+ を参照してください。
- $B%j%=!<%9$N@)8B(B
+ リソースの制限
@@ -102,17 +102,17 @@
- LimitRequest* $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
+ LimitRequest* ディレクティブは Apache
+ がクライアントからのリクエスト読み込みで使う
+ リソースを制限するために使われます。これらの値を制限することで、
+ いくつかのサービス拒否攻撃は影響を和らげることができます。
- RLimit* $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
+ RLimit* ディレクティブは、Apache の子プロセスから
+ fork されたプロセスが使用するリソースを制限するために使われます。
+ 特に、これは CGI スクリプトと SSI exec
+ コマンドで使われるリソースを制御します。
- ThreadStackSize $B$O(B Netware
- $B$G$N$_!"%9%?%C%/$NBg$-$5$r@)8f$9$k$?$a$K;H$o$l$^$9!#(B
+ ThreadStackSize は Netware
+ でのみ、スタックの大きさを制御するために使われます。
diff --git a/docs/manual/sitemap.xml.ja b/docs/manual/sitemap.xml.ja
index 2a46dec951..6408edb0c1 100644
--- a/docs/manual/sitemap.xml.ja
+++ b/docs/manual/sitemap.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -25,142 +25,142 @@
Site Map
-$B$3$N%Z!<%8$O8=;~E@$GMxMQ2DG=$J(B
-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
-$B$N0lMw$G$9!#(B
+このページは現時点で利用可能な
+Apache HTTP サーババージョン &httpd.major;.&httpd.minor; のドキュメンテーション
+の一覧です。
-$B%j%j!<%9$N%a%b(B
-1.3 $B$+$i(B 2.0 $B$X$N%"%C%W%0%l!<%I(B
-Apache 2.0 $B$N?75!G=(B
+リリースのメモ
+1.3 から 2.0 へのアップグレード
+Apache 2.0 の新機能
Apache License
-Apache HTTP $B%5!<%P$N;HMQ(B
-Apache $B$N%3%s%Q%$%k$H%$%s%9%H!<%k(B
-Apache $B$N5/F0(B
-$B%5!<%P$NDd;_$H:F5/F0(B
-$B@_Dj%U%!%$%k(B
-Directory, Location, Files $B%;%/%7%g%s$NF0:nJ}K!(B
-$B%5!<%PA4BN$N@_Dj(B
-$B%m%0%U%!%$%k(B
-URL $B$+$i%U%!%$%k%7%9%F%`>e$N0LCV$X$N%^%C%W(B
-$B%;%-%e%j%F%#$N%3%D(B
-$BF0E*6&M-%*%V%8%'%/%H(B (DSO) $B%5%]!<%H(B
-$B%3%s%F%s%H%M%4%7%(!<%7%g%s(B
-$B%+%9%?%`%(%i!<%l%9%]%s%9(B
-Apache $B$,;HMQ$9$k%"%I%l%9$H%]!<%H$N@_Dj(B
-$B%^%k%A%W%m%;%C%7%s%0%b%8%e!<%k(B (MPM)
-Apache $B$K$*$1$k4D6-JQ?t(B
-Apache $B$N%O%s%I%i$N;HMQ(B
-$B%U%#%k%?(B
-suEXEC $B%5%]!<%H(B
-$B@-G=$K4X$9$k%R%s%H(B
-URL $B%j%i%$%H%,%$%I(B
+Apache HTTP サーバの使用
+Apache のコンパイルとインストール
+Apache の起動
+サーバの停止と再起動
+設定ファイル
+Directory, Location, Files セクションの動作方法
+サーバ全体の設定
+ログファイル
+URL からファイルシステム上の位置へのマップ
+セキュリティのコツ
+動的共有オブジェクト (DSO) サポート
+コンテントネゴシエーション
+カスタムエラーレスポンス
+Apache が使用するアドレスとポートの設定
+マルチプロセッシングモジュール (MPM)
+Apache における環境変数
+Apache のハンドラの使用
+フィルタ
+suEXEC サポート
+性能に関するヒント
+URL リライトガイド
-Apache $B%P!<%A%c%k%[%9%H%I%-%e%a%s%H(B
-$B35N,(B
-$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H(B
-IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$N%5%]!<%H(B
-$BF0E*$K@_Dj$5$l$?Bg5,LO%P!<%A%c%k%[%9%H(B
-VirtualHost $B$NNc(B
-$B%P!<%A%c%k%[%9%H$N%^%C%A%s%0$N>\$7$$@bL@(B
-$B%U%!%$%k5-=R;R$N8B3&(B
-DNS $B$H(B Apache $B$H$K4X78$9$kLdBj(B
+Apache バーチャルホストドキュメント
+概略
+名前ベースのバーチャルホスト
+IP ベースのバーチャルホストのサポート
+動的に設定された大規模バーチャルホスト
+VirtualHost の例
+バーチャルホストのマッチングの詳しい説明
+ファイル記述子の限界
+DNS と Apache とに関係する問題
-Apache $B%5!<%P$N$h$/$"$k
-$B35N,(B
-$B%5%]!<%H(B
-$B%(%i!<%a%C%;!<%8(B
+Apache サーバのよくある質問
+概略
+サポート
+エラーメッセージ
-Apache $B$N(B SSL/TLS $B0E9f2=(B
-$B35N,(B
-SSL/TLS $B0E9f2=(B: $BF~Lg(B
-SSL/TLS $B0E9f2=(B: $B8_49@-(B
-SSL/TLS $B0E9f2=(B: $B%O%&%D!<(B
-SSL/TLS $B0E9f2=(B: FAQ
+Apache の SSL/TLS 暗号化
+概略
+SSL/TLS 暗号化: 入門
+SSL/TLS 暗号化: 互換性
+SSL/TLS 暗号化: ハウツー
+SSL/TLS 暗号化: FAQ
-$B%,%$%I!"%A%e!<%H%j%"%k!"%O%&%D!<(B
-$B35N,(B
-$BG'>Z(B
-CGI $B$K$h$kF0E*%3%s%F%s%D(B
-Server Side Includes $BF~Lg(B
-.htaccess $B%U%!%$%k(B
-$B%f!<%6Kh$N%&%'%V%G%#%l%/%H%j(B
+ガイド、チュートリアル、ハウツー
+概略
+認証
+CGI による動的コンテンツ
+Server Side Includes 入門
+.htaccess ファイル
+ユーザ毎のウェブディレクトリ
-$B%W%i%C%H%U%)!<%`8GM-$N>pJs(B
-$B35N,(B
-Microsoft Windows $B$G$N(B Apache $B$N;HMQ(B
-Microsoft Windows $B$G$N(B Apache
-$B$N%3%s%Q%$%k(B
-Novell NetWare $B$G(B Apache $B$r;H$&(B
-HPUX $B$G9b@-G=%&%'%V%5!<%P$r
-EBCDIC $BHG(B Apache
+プラットフォーム固有の情報
+概略
+Microsoft Windows での Apache の使用
+Microsoft Windows での Apache
+のコンパイル
+Novell NetWare で Apache を使う
+HPUX で高性能ウェブサーバを実行する
+EBCDIC 版 Apache
-Apache HTTP $B%5!<%P$H%5%]!<%H%W%m%0%i%`(B
-$B35N,(B
-$B%^%K%e%"%k%Z!<%8(B: httpd
-$B%^%K%e%"%k%Z!<%8(B: ab
-$B%^%K%e%"%k%Z!<%8(B: apachectl
-$B%^%K%e%"%k%Z!<%8(B: apxs
-$B%^%K%e%"%k%Z!<%8(B: configure
-$B%^%K%e%"%k%Z!<%8(B: dbmmanage
-$B%^%K%e%"%k%Z!<%8(B: htcacheclean
-$B%^%K%e%"%k%Z!<%8(B: htdbm
-$B%^%K%e%"%k%Z!<%8(B: htdigest
-$B%^%K%e%"%k%Z!<%8(B: htpasswd
-$B%^%K%e%"%k%Z!<%8(B: logresolve
-$B%^%K%e%"%k%Z!<%8(B: rotatelogs
-$B%^%K%e%"%k%Z!<%8(B: suexec
-$BB>$N%W%m%0%i%`(B
+Apache HTTP サーバとサポートプログラム
+概略
+マニュアルページ: httpd
+マニュアルページ: ab
+マニュアルページ: apachectl
+マニュアルページ: apxs
+マニュアルページ: configure
+マニュアルページ: dbmmanage
+マニュアルページ: htcacheclean
+マニュアルページ: htdbm
+マニュアルページ: htdigest
+マニュアルページ: htpasswd
+マニュアルページ: logresolve
+マニュアルページ: rotatelogs
+マニュアルページ: suexec
+他のプログラム
-Apache $B$=$NB>(B
-$B35N,(B
-$B4XO"$9$kI8=`5,3J(B
+Apache その他
+概略
+関連する標準規格
-Apache $B%b%8%e!<%k(B
-Apache $B%G%#%l%/%F%#%V$N@bL@$K;H$o$l$kMQ8l(B
-Apache $B%G%#%l%/%F%#%V$r@bL@$K;H$o$l$kMQ8l(B
+Apache モジュール
+Apache ディレクティブの説明に使われる用語
+Apache ディレクティブを説明に使われる用語
-$B3+H/
-$B35N,(B
-Apache API $B%a%b(B
+開発者のためのドキュメント
+概略
+Apache API メモ
APR
-$B$N%a%b%j%"%m%1!<%7%g%s$N%G%P%C%0(B
-Apache 2.0 $B$N@bL@$r=q$/(B
-Apache 2.0 $B%U%C%/4X?t(B
-Apache 1.3 $B$+$i(B Apache 2.0 $B$K%b%8%e!<%k$r(B
-$B0\?"$9$k(B
-Apache 2.0 $B$N%j%/%(%9%H=hM}(B
-Apache 2.0 $B$N%U%#%k%?$NF0:n$N;EJ}(B
+のメモリアロケーションのデバッグ
+Apache 2.0 の説明を書く
+Apache 2.0 フック関数
+Apache 1.3 から Apache 2.0 にモジュールを
+移植する
+Apache 2.0 のリクエスト処理
+Apache 2.0 のフィルタの動作の仕方
-$BMQ8l=8$H:w0z(B
-$BMQ8l=8(B
-$B%b%8%e!<%k:w0z(B
-$B%G%#%l%/%F%#%V:w0z(B
-$B%G%#%l%/%F%#%V(B $B%/%$%C%/%j%U%!%l%s%9(B
+用語集と索引
+用語集
+モジュール索引
+ディレクティブ索引
+ディレクティブ クイックリファレンス
diff --git a/docs/manual/ssl/index.xml.ja b/docs/manual/ssl/index.xml.ja
index d4060735b8..e8429b6480 100644
--- a/docs/manual/ssl/index.xml.ja
+++ b/docs/manual/ssl/index.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,32 +23,32 @@
- Apache $B$N(B SSL/TLS $B0E9f2=(B
+ Apache の SSL/TLS 暗号化
-Apache HTTP $B%5!<%P%b%8%e!<%k(B mod_ssl $B$,(B
+
Apache HTTP サーバモジュール mod_ssl が
OpenSSL
-$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
+ライブラリへのインターフェースを提供していますが、これは
+Secure Sockts Layer と Transport Layer Security
+プロトコルを用いた強力な暗号化を提供します。
+このモジュールやこの文書は Ralf S. Engelschall の mod_ssl
+プロジェクトに基づいています。
diff --git a/docs/manual/ssl/ssl_intro.xml.ja b/docs/manual/ssl/ssl_intro.xml.ja
index 823b0d3a43..67e7720f15 100644
--- a/docs/manual/ssl/ssl_intro.xml.ja
+++ b/docs/manual/ssl/ssl_intro.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,281 +23,281 @@
SSL/TLS
- SSL/TLS $B0E9f2=(B: $B$O$8$a$K(B
+ SSL/TLS 暗号化: はじめに
-$BI8=`5,3J$NNI$$=j$O!"$?$/$5$s$N5,3J$+$iA*$Y$k$H$$$&$3$H$@!#(B
-$B$=$7$F!"$b$7K\Ev$K$I$N5,3J$b5$$KF~$i$J$1$l$P!"(B
-$B0lG/BT$D$@$1$GC5$7$F$$$?5,3J$,8=$l$k!#(B
+標準規格の良い所は、たくさんの規格から選べるということだ。
+そして、もし本当にどの規格も気に入らなければ、
+一年待つだけで探していた規格が現れる。
-- A. Tanenbaum, "Introduction to
Computer Networks"
-$BF~Lg$H$$$&$3$H$G!"$3$N>O$O(B Web$B!"(BHTTP$B!"(BApache $B$KDL$8$F$$$k(B
-$BFIZ4IM}$N$?$a$NFCDj$N%F%/%K%C%/$d!"(B
-$BFC5v$dM"=P5,@)$J$I$N=EMW$JK!E*$JLdBj$K$D$$$F$b07$$$^$;$s!#(B
-$B$`$7$m!"99$J$k8&5f$X$N=PH/E@$H$7$F?'!9$J35G0!"Dj5A!"Nc$rJB$Y$k$3$H$G(B
- mod_ssl $B$N%f!<%6$K4pACCN<1$rDs6!$9$k;v$rL\E*$H$7$F$$$^$9!#(B
+入門ということで、この章は Web、HTTP、Apache に通じている
+読者向けですが、セキュリティ専門家向けではありません。
+SSL プロトコルの決定的な手引きであるつもりはありません。
+また、組織内の認証管理のための特定のテクニックや、
+特許や輸出規制などの重要な法的な問題についても扱いません。
+むしろ、更なる研究への出発点として色々な概念、定義、例を並べることで
+ mod_ssl のユーザに基礎知識を提供する事を目的としています。
-$B$3$3$K<($5$l$?FbMF$Oここに示された内容は主に、原著者の許可の下
+The Open Group Research Institute の Frederick J. Hirsch
- $B;a$N5-;v(B
-Introducing SSL and Certificates using SSLeay $B$r4p$K$7$F$$$^$9!#(B
-$B;a$N5-;v$O(B を基にしています。
+氏の記事は Web Security: A Matter of
Trust, World Wide Web Journal, Volume 2, Issue 3, Summer 1997
-$B$K7G:\$5$l$^$7$?!#(B
-$B9NDjE*$J0U8+$O(B Frederick Hirsch $B;a(B
- ($B855-;v$NCxp$O(B Frederick Hirsch 氏
+ (元記事の著者) へ全ての苦情は Ralf S. Engelschall (
-mod_ssl $B$N:nmod_ssl の作者) へお願いします。
+[訳注: 訳については
-Apache $B%I%-%e%a%s%HK]Lu%W%m%8%'%/%H(B
-$B$X$*4j$$$7$^$9!#(B]
+Apache ドキュメント翻訳プロジェクト
+へお願いします。]
-$B0E9f2=5;=Q(B
-SSL $B$rM}2r$9$k$K$O!"0E9f%"%k%4%j%:%`!"(B
-$B%a%C%;!<%8%@%$%8%'%9%H4X?t(B($BJLL>(B: $B0lJ}8~4X?t!"%O%C%7%e4X?t(B)$B!"(B
-$BEE;R=pL>$J$I$X$NM}2r$,I,MW$G$9!#(B
-$B$3$l$i$N5;=Q$OK\$,4]$4$HI,MW$JBjL\$G(B
-($BNc$($P(B [AC96] $B$r;2>H(B)$B!"(B
-$B%W%i%$%P%7!Z$J$I$N5;=Q$N4pAC$H$J$C$F$$$^$9!#(B
+暗号化技術
+SSL を理解するには、暗号アルゴリズム、
+メッセージダイジェスト関数(別名: 一方向関数、ハッシュ関数)、
+電子署名などへの理解が必要です。
+これらの技術は本が丸ごと必要な題目で
+(例えば [AC96] を参照)、
+プライバシー、信用、認証などの技術の基礎となっています。
-$B0E9f%"%k%4%j%:%`(B
- $BNc$($P!"%"%j%9$,Aw6b$N$?$a$K6d9T$K%a%C%;!<%8$rAw$j$?$$$H$7$^$9!#(B
- $B8}:BHV9f$dAw6b$N6b3[$,4^$^$l$k$?$a!"(B
- $B%"%j%9$O$=$N%a%C%;!<%8$rHkL)$K$7$?$$$H;W$$$^$9!#(B
- $B2r7hJ}K!$N0l$D$O0E9f%"%k%4%j%:%`$r;H$C$F!"%a%C%;!<%8$r(B
- $BFI$^$;$?$$?M0J30$OFI$`$3$H$,$G$-$J$$0E9f2=$5$l$?(B
- $B7ABV$KJQ$($F$7$^$&$3$H$G$9!#(B
- $B$=$N7ABV$K$J$k$H!"(B
- $B%a%C%;!<%8$OHkL)$N80$K$h$C$F$N$_2ro$KFq$7$/$9$k$?$a!"EXNO$,3d$K9g$o$J$/$5$;$^$9!#(B
+暗号アルゴリズム
+ 例えば、アリスが送金のために銀行にメッセージを送りたいとします。
+ 口座番号や送金の金額が含まれるため、
+ アリスはそのメッセージを秘密にしたいと思います。
+ 解決方法の一つは暗号アルゴリズムを使って、メッセージを
+ 読ませたい人以外は読むことができない暗号化された
+ 形態に変えてしまうことです。
+ その形態になると、
+ メッセージは秘密の鍵によってのみ解釈することができます。
+ 鍵なしでは、メッセージは役に立ちません。
+ 良い暗号アルゴリズムは、侵入者が元のテキストを解読することを
+ 非常に難しくするため、努力が割に合わなくさせます。
- $B0E9f%"%k%4%j%:%`$K$O(B
- $B=>Mh7?$H8x3+80$NFs$D$N
+ 暗号アルゴリズムには
+ 従来型と公開鍵の二つの種類があります。
- - $B=>Mh7?0E9f(B
- - $BBP>N0E9f$H$7$F$bCN$i$l!"(B
- $BAw?.pJs$N$3$H$G$9!#(B
- $B$b$7!"$3$N80$,HkL)$J$i!"Aw?.
+
- 従来型暗号
+ - 対称暗号としても知られ、
+ 送信者と受信者が鍵を共有することが必要です。
+ 鍵とは、メッセージを暗号化したり復号するのに使われる秘密
+ の情報のことです。
+ もし、この鍵が秘密なら、送信者と受信者以外は誰もメッセージを読
+ むことができません。
+ もしも、アリスと銀行が秘密の鍵を知っているなら、
+ 彼らはお互いに秘密のメッセージを送ることができるでしょう。
+ ただし、事前に内密に鍵を選ぶという仕事は問題を含んでいます。
- - $B8x3+800E9f(B
- - $BHsBP>N0E9f$H$7$F$bCN$i$l!"(B
- $B%a%C%;!<%8$r0E9f2=$9$k$3$H$N$G$-$kFs$D$N80(B
- $B$r;HMQ$9$k%"%k%4%j%:%`$rDj5A$9$k$3$H$G80$N$d$j
+
- 公開鍵暗号
+ - 非対称暗号としても知られ、
+ メッセージを暗号化することのできる二つの鍵
+ を使用するアルゴリズムを定義することで鍵のやり取りの問題を解決
+ します。
+ もし、ある鍵が暗号化に使われたなら、
+ もう片方の鍵で復号しなければいけません。
+ この方式によって、一つの鍵を公表して(公開鍵)、
+ もう片方を秘密にしておく(秘密鍵)だけで、
+ 安全なメッセージを受け取ることができます。
- $BC/$b$,0E9f2=$5$l$?%a%C%;!<%8$r8x3+80$K$h$C$F0E9f2=(B
- $B$9$k$3$H$,$G$-$^$9$,!"HkL)80$N;}$A
+ 誰もが暗号化されたメッセージを公開鍵によって暗号化
+ することができますが、秘密鍵の持ち主だけがそれを読むことが
+ できます。
+ この方法で、銀行の公開鍵を使って暗号化することで、
+ アリスは秘密のメッセージを送ることができます。
+ 銀行のみが復号することができます。
-$B%a%C%;!<%8%@%$%8%'%9%H(B
- $B%"%j%9$O%a%C%;!<%8$rHkL)$K$9$k$3$H$,$G$-$^$9$,!"(B
- $BC/$+$,Nc$($P<+J,$KAw6b$9$k$h$&$K%a%C%;!<%8$rJQ99$7$?$j!"(B
- $BJL$N$b$N$KCV$-49$($F$7$^$&$+$b$7$l$J$$$H$$$&LdBj$,$"$j$^$9!#(B
- $B%"%j%9$N%a%C%;!<%8$N?.MQ$rJ]>Z$9$kJ}K!$N0l$D$O!"(B
- $B%a%C%;!<%8$N4J7i$J%@%$%8%'%9%H$r:n$C$F!"$=$l$b6d9T$KAw$k$H$$$&$b$N$G$9!#(B
- $B%a%C%;!<%8$r
+メッセージダイジェスト
+
アリスはメッセージを秘密にすることができますが、
+ 誰かが例えば自分に送金するようにメッセージを変更したり、
+ 別のものに置き換えてしまうかもしれないという問題があります。
+ アリスのメッセージの信用を保証する方法の一つは、
+ メッセージの簡潔なダイジェストを作って、それも銀行に送るというものです。
+ メッセージを受け取ると銀行もダイジェストを作成し、
+ アリスが送ったものと比べます。もし一致したなら、
+ 受け取ったメッセージは無傷だということになります。
- $B$3$N$h$&$JMWLs$O(B$B%a%C%;!<%8%@%$%8%'%9%H(B$B!"(B
- $B0lJ}9T4X?t(B$B!"$^$?$O(B$B%O%C%7%e4X?t(B$B$H8F$P$l$^$9!#(B
- $B%a%C%;!<%8%@%$%8%'%9%H$OD9$$2DJQD9$N%a%C%;!<%8$+$i(B
- $BC;$$8GDjD9$NI=8=$r:n$k$N$K;H$o$l$^$9!#(B
- $B%@%$%8%'%9%H%"%k%4%j%:%`$O%a%C%;!<%8$+$i(B
- $B0l0U$J%@%$%8%'%9%H$r@8@.$9$k$h$&$K:n$i$l$F$$$^$9!#(B
- $B%a%C%;!<%8%@%$%8%'%9%H$O%@%$%8%'%9%H$+$i85$N%a%C%;!<%8$r(B
- $BH=Dj$9$k$N$,$H$F$bFq$7$$$h$&$K$G$-$F$$$^$9!#(B
- $B$^$?!"F1$8MWLs$r:n@.$9$kFs$D$N%a%C%;!<%8$rC5$9$N$OIT2DG=$G$9!#(B
- $B$h$C$F!"F1$8MWLs$r;H$C$F%a%C%;!<%8$rCV$-49$($k$H$$$&(B
- $B2DG=@-$rGS=|$7$F$$$^$9!#(B
+ このような要約はメッセージダイジェスト、
+ 一方行関数、またはハッシュ関数と呼ばれます。
+ メッセージダイジェストは長い可変長のメッセージから
+ 短い固定長の表現を作るのに使われます。
+ ダイジェストアルゴリズムはメッセージから
+ 一意なダイジェストを生成するように作られています。
+ メッセージダイジェストはダイジェストから元のメッセージを
+ 判定するのがとても難しいようにできています。
+ また、同じ要約を作成する二つのメッセージを探すのは不可能です。
+ よって、同じ要約を使ってメッセージを置き換えるという
+ 可能性を排除しています。
-$B%"%j%9$X$N$b$&0l$D$NLdBj$O!"$3$N%@%$%8%'%9%H$r0BA4$KAw$kJ}K!$rC5$9$3$H$G$9!#(B
-$B$3$l$,$G$-$l$P!"%a%C%;!<%8$N?.MQ$,J]>Z$5$l$^$9!#(B
-$B0l$D$NJ}K!$O$3$N%@%$%8%'%9%H$KEE;R=pL>$r4^$`$3$H$G$9!#(B
+アリスへのもう一つの問題は、このダイジェストを安全に送る方法を探すことです。
+これができれば、メッセージの信用が保証されます。
+一つの方法はこのダイジェストに電子署名を含むことです。
-$BEE;R=pL>(B
-$B%"%j%9$,6d9T$K%a%C%;!<%8$rAw$C$?$H$-!"6d9T$O!"(B
-$B?/F~$BEE;R=pL>(B$B$,$3$3$GLr$KN)$A$^$9!#(B
+電子署名
+アリスが銀行にメッセージを送ったとき、銀行は、
+侵入者が彼女になりすまして彼女の口座への取引を申請していないか、
+メッセージが本当に彼女からのものか確実に分からなければいけません。
+アリスによって作成され、メッセージに含まれた
+電子署名がここで役に立ちます。
-$BEE;R=pL>$O%a%C%;!<%8$N%@%$%8%'%9%H$d$=$NB>$N>pJs(B($B=hM}HV9f$J$I(B)$B$r(B
-$BAw?.$r(B$BI|9f(B$B$9$k$3$H$,$G$-$^$9$,!"(B
-$B=pL>$7$($?$3$H$r0UL#$7$^$9!#(B
-$B%@%$%8%'%9%H$rEE;R=pL>$K4^$`$3$H$O!"(B
-$B$=$N=pL>$,$=$N%a%C%;!<%8$N$_$KM-8z$G$"$k$3$H$r0UL#$7$^$9!#(B
-$B$3$l$O!"C/$b%@%$%8%'%9%H$rJQ$($F=pL>$r$9$k$3$H$,$G$-$J$$$?$a!"(B
-$B%a%C%;!<%8$N?.MQ$bJ]>Z$7$^$9!#(B
+電子署名はメッセージのダイジェストやその他の情報(処理番号など)を
+送信者の秘密鍵で暗号化することで作られます。
+誰もが公開鍵を使って署名を復号することができますが、
+署名者のみが秘密鍵を知っています。
+これは、彼らのみが署名しえたことを意味します。
+ダイジェストを電子署名に含むことは、
+その署名がそのメッセージのみに有効であることを意味します。
+これは、誰もダイジェストを変えて署名をすることができないため、
+メッセージの信用も保証します。
-$B?/F~$rK5$K$O0l0U$J=hM}HV9f$,4^$^$l$^$9!#(B
-$B$3$l$O!"%"%j%9$,$=$s$J%a%C%;!<%8$OAw$C$F$$$J$$$H8@$&:>5=(B
-$B$+$i6d9T$r$7$($?$+$i$G$9!#(B($BH]G'KI;_(B)
+侵入者が署名を傍受して後日に再利用するのを防ぐため
+電子署名には一意な処理番号が含まれます。
+これは、アリスがそんなメッセージは送っていないと言う詐欺
+から銀行を守ります。
+彼女だけが署名しえたからです。(否認防止)
-$B>ZL@=q(B
-$B%"%j%9$OHkL)$N%a%C%;!<%8$r6d9T$KAw$j!"(B
-$B=pL>$r$7$F!"%a%C%;!<%8$N?.MQ$rJ]>Z$9$k$3$H$,$G$-$k$*$&$K$J$j$^$7$?$,!"(B
-$BDL?.$7$F$$$kAj$,K\Ev$K%"%j%9$N=pL>$+3NG'$9$kI,MW$,(B
-$B$"$j$^$9!#(B
+証明書
+アリスは秘密のメッセージを銀行に送り、
+署名をして、メッセージの信用を保証することができるおうになりましたが、
+通信している相手が本当に銀行なのか確かめなくてはいけません。
+これは、彼女が使う公開鍵が銀行の秘密鍵と対になっているものか、
+彼女は確かめなくてはいけないということを意味します。
+同様に、銀行はメッセージの署名が本当にアリスの署名か確認する必要が
+あります。
-$B$b$7N>ZL@$7!"8x3+80$r3NG'$7!"$^$??.Mj$5$l$?5!4X$,=pL>(B
-$B$7$?>ZL@=q$,$"$l$P!"N>$BG'>Z6I(B
- (Certificate Authority $B$^$?$O(B CA) $B$H8F$P$l!"(B
-$B>ZL@=q(B (certificate) $B$,G'>Z(B (authentication) $B$K;H$o$l$^$9!#(B
+もし両者に身元を証明し、公開鍵を確認し、また信頼された機関が署名
+した証明書があれば、両者とも通信相手について正しい相手だと
+確信することができます。
+そのような信頼された機関は認証局
+ (Certificate Authority または CA) と呼ばれ、
+証明書 (certificate) が認証 (authentication) に使われます。
-$B>ZL@=q$NFbMF(B
- $B>ZL@=q$O8x3+80$H8D?M!"%5!<%P!"$=$NB>$N$BI=(B1$B$K<($5$l$k$h$&$K>ZL@BP>]$N>pJs$O(B
- $B?H85>ZL@$N>pJs(B($B<1JLL>(B)$B$H8x3+80$,4^$^$l$^$9!#(B
- $B>ZL@=q$O$^$?!"G'>Z6I$N?H85>ZL@$H=pL>!"$=$7$F>ZL@=q$NM-8z4|4V$r(B
- $B4^$_$^$9!#(B
- $B%7%j%"%k%J%s%P!<$J$I$NG'>Z6I$N4IM}>e$N>pJs$d(B
- $B$=$NB>$NDI2C$N>pJs$,4^$^$l$F$$$k$+$b$7$l$^$;$s!#(B
+証明書の内容
+ 証明書は公開鍵と個人、サーバ、その他の主体の実在の身元を
+ 関連付けます。
+ 表1に示されるように証明対象の情報は
+ 身元証明の情報(識別名)と公開鍵が含まれます。
+ 証明書はまた、認証局の身元証明と署名、そして証明書の有効期間を
+ 含みます。
+ シリアルナンバーなどの認証局の管理上の情報や
+ その他の追加の情報が含まれているかもしれません。
- $BI=(B1: $B>ZL@=q>pJs(B
+ 表1: 証明書情報
- $B>ZL@BP>](B |
- $B<1JLL>!"8x3+80(B |
- $BH/9T
- $B<1JLL>!"8x3+80(B | |
- $BM-8z4|4V(B |
- $B3+;OF|!"<:8zF|(B |
- $B4IM}>pJs(B |
- $B%P!<%8%g%s!"%7%j%"%k%J%s%P!<(B |
- $B3HD%>pJs(B |
- $B4pK\E*$J@)Ls!"%M%C%H%9%1!<%W%U%i%C%0!"$=$NB>(B |
+ 証明対象 |
+ 識別名、公開鍵 |
+ 発行者 |
+ 識別名、公開鍵 |
+ 有効期間 |
+ 開始日、失効日 |
+ 管理情報 |
+ バージョン、シリアルナンバー |
+ 拡張情報 |
+ 基本的な制約、ネットスケープフラッグ、その他 |
- $B<1JLL>(B($B%G%#%9%F%#%s%0%$%C%7%e!&%M!<%`(B)$B$OFCDj$N>u67$K$*$1$k(B
- $B?HJ,>ZL@$rDs6!$9$k$N$K;H$o$l$F$$$^$9!#Nc$($P!"$"$k?M$O(B
- $B;dMQ$H2qZL@$r;}$D$+$b$7$l$^$;$s!#(B
+ 識別名(ディスティングイッシュ・ネーム)は特定の状況における
+ 身分証明を提供するのに使われています。例えば、ある人は
+ 私用と会社とで別々の身分証明を持つかもしれません。
- $B<1JLL>$O(B X.509 $BI8=`5,3J(B [X509] $B$GDj5A$5$l$F$$$^$9!#(B
- X.509 $BI8=`5,3J$O!"9`L\!"9`L\L>!"$=$7$F9`L\$NN,>N$rDj5A$7$F$$$^$9!#(B($BI=(B
- 2 $B;2>H(B)
+ 識別名は X.509 標準規格 [X509] で定義されています。
+ X.509 標準規格は、項目、項目名、そして項目の略称を定義しています。(表
+ 2 参照)
- $BI=(B 2: $B<1JLL>>pJs(B
+ 表 2: 識別名情報
- $B<1JLL>9`L\(B |
- $BN,>N(B |
- $B@bL@(B |
- $BNc(B |
- Common Name ($B%3%b%s%M!<%`(B) |
+
識別名項目 |
+ 略称 |
+ 説明 |
+ 例 |
+ Common Name (コモンネーム) |
CN |
- $BG'>Z$5$l$kL>A0(B
- SSL$B@\B3$9$k(BURL |
+ 認証される名前
+ SSL接続するURL |
CN=www.example.com |
- Organization or Company ($BAH?%L>(B) |
+
Organization or Company (組織名) |
O |
- $BCDBN$N@5<01Q8lAH?%L>(B |
+ 団体の正式英語組織名 |
O=Example Japan K.K. |
- Organizational Unit ($BItLgL>(B) |
+
Organizational Unit (部門名) |
OU |
- $BIt=pL>$J$I(B |
+ 部署名など |
OU=Customer Service |
- City/Locality ($B;T6hD.B<(B) |
+
City/Locality (市区町村) |
L |
- $B=j:_$7$F$k;T6hD.B<(B |
+ 所在してる市区町村 |
L=Sapporo |
- State/Province ($BETF;I\8)(B) |
+
State/Province (都道府県) |
ST |
- $B=j:_$7$F$kETF;I\8)(B |
+ 所在してる都道府県 |
ST=Hokkaido |
- Country($B9q(B) |
+
Country(国) |
C |
- $B=j:_$7$F$$$k9qL>$N(B ISO $B%3!<%I(B
- $BF|K\$N>l9g(B JP
+ | 所在している国名の ISO コード
+ 日本の場合 JP
|
C=JP |
- $BG'>Z6I$O$I$N9`L\$,>JN,2DG=$G$I$l$,I,?\$+$NJ}?K$rDj5A$9$k(B
- $B$+$b$7$l$^$;$s!#9`L\$NFbMF$K$D$$$F$bG'>Z6I$d>ZL@=q$N%f!<%6$+$i$N(B
- $BMW7o$,$"$k$+$b$7$l$^$;$s!#(B
- $BNc$($P!"%M%C%H%9%1!<%W$N%V%i%&%6$O%5!<%P$N>ZL@=q$N(B
- Common Name ($B%3%b%s%M!<%`(B)$B$,%5!<%P$N%I%a%$%sL>$N(B
+
認証局はどの項目が省略可能でどれが必須かの方針を定義する
+ かもしれません。項目の内容についても認証局や証明書のユーザからの
+ 要件があるかもしれません。
+ 例えば、ネットスケープのブラウザはサーバの証明書の
+ Common Name (コモンネーム)がサーバのドメイン名の
*.example.com
- $B$H$$$&$h$&$J%o%$%k%I%+!<%I$N%Q%?!<%s$K%^%C%A$9$k$3$H(B
- $B$rMW5a$7$^$9!#(B
+ というようなワイルドカードのパターンにマッチすること
+ を要求します。
- $B%P%$%J%j7A<0$N>ZL@=q$O(B ASN.1 $BI=5-K!(B
- [X208] [PKCS] $B$G(B
- $BDj5A$5$l$F$$$^$9!#(B
- $B$3$NI=5-K!$OFbMF$r$I$N$h$&$K5-=R$9$k$+$rDj5A$7!"(B
- $BId9f2=$N5,Dj$,$3$N>pJs$,$I$N$h$&$K%P%$%J%j7A<0$KJQ49$5$l$k$+$r(B
- $BDj5A$7$^$9!#(B
- $B>ZL@=q$N%P%$%J%jId9f2=$O(B Distinguished Encoding
- Rules (DER) $B$GDj5A$5$l!"$=$l$O$h$j0lHLE*$J(B Basic Encoding Rules
- (BER) $B$K4p$E$$$F$$$^$9!#(B
- $B%P%$%J%j7A<0$r07$&$3$H$N$G$-$J$$Aw?.$G$O!"(B
- $B%P%$%J%j7A<0$O(B Base64 $BId9f2=(B [MIME] $B$G(B
- ASCII $B7A<0$KJQ49$5$l$k$3$H$,$"$j$^$9!#(B
- $B$3$N$h$&$KId9f2=$5$l!"0J2<$NNc$K<($5$l$k$h$&$K6h@Z$j9T$K(B
- $B64$^$l$?$b$N$O(B PEM $BId9f2=$5$l$?$H8@$$$^$9!#(B
- (PEM $B$NL>A0$O(B "Privacy Enhanced Mail" $B$KM3Mh$7$^$9(B)
+ バイナリ形式の証明書は ASN.1 表記法
+ [X208] [PKCS] で
+ 定義されています。
+ この表記法は内容をどのように記述するかを定義し、
+ 符号化の規定がこの情報がどのようにバイナリ形式に変換されるかを
+ 定義します。
+ 証明書のバイナリ符号化は Distinguished Encoding
+ Rules (DER) で定義され、それはより一般的な Basic Encoding Rules
+ (BER) に基づいています。
+ バイナリ形式を扱うことのできない送信では、
+ バイナリ形式は Base64 符号化 [MIME] で
+ ASCII 形式に変換されることがあります。
+ このように符号化され、以下の例に示されるように区切り行に
+ 挟まれたものは PEM 符号化されたと言います。
+ (PEM の名前は "Privacy Enhanced Mail" に由来します)
- PEM $BId9f2=$5$l$?>ZL@=q$NNc(B (example.crt)
+ PEM 符号化された証明書の例 (example.crt)
-----BEGIN CERTIFICATE-----
MIIC7jCCAlegAwIBAgIBATANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCWFkx
FTATBgNVBAgTDFNuYWtlIERlc2VydDETMBEGA1UEBxMKU25ha2UgVG93bjEXMBUG
@@ -320,86 +320,86 @@ dUHzICxBVC1lnHyYGjDuAMhe396lYAn8bCld1/L4NMGBCQ==
-$BG'>Z6I(B
- $B$^$:>ZL@=q$N?=@A$N>pJs$r3NG'$9$k$3$H$G!"(B
- $BG'>Z6I$OHkL)80$N;}$AZ$7$^$9!#(B
- $BNc$($P!"%"%j%9$,8D?M>ZL@=q$r?=@A$7$?$H$9$k$H!"(B
- $BG'>Z6I$O%"%j%9$,>ZL@=q$N?=@A$,
+認証局
+ まず証明書の申請の情報を確認することで、
+ 認証局は秘密鍵の持ち主の身元を保証します。
+ 例えば、アリスが個人証明書を申請したとすると、
+ 認証局はアリスが証明書の申請が主張する通りの
+ 人物だということを確認しなくてはいけません。
- $B:G>e0LG'>Z6I$N:n@.(B
- $BA0$K=R$Y$?$h$&$K!"A4$F$N>ZL@=q$K$D$$$F!"(B
- $B:G>e0L$NG'>Z6I(B(CA)$B$^$G$=$l$>$l$NH/9T]$N?H85>ZL@$NM-8z@-$rL@$i$+$K$9$kI,MW$,$"$j$^$9!#(B
- $BLdBj$O!"C/$,$=$N:G>e0L$NG'>Z5!4X$N>ZL@=q$rJ]>Z$9$k$N$+!"(B
- $B$H$$$&$3$H$G$9!#(B
- $B$3$N$h$&$J>l9g$K8B$j!">ZL@=q$O!V<+8J=pL>!W$5$l$^$9!#(B
- $B$D$^$j!">ZL@=q$NH/9TZL@BP>]$,F1$8$H$$$&$3$H$K$J$j$^$9!#(B
- $B$=$N7k2L!"<+8J=pL>$5$l$?>ZL@=q$r?.MQ$9$k$K$O(B
- $B:Y?4$NCm0U$,I,MW$G$9!#(B
- $B:G>e0LG'>Z6I$,8x3+80$r9-$/8xI=$9$k$3$H$G!"(B
- $B$=$N80$r?.Mj$9$k%j%9%/$rDc$/$9$k$3$H$,$G$-$^$9!#(B
- $B$b$7!"B>?M$,$=$NG'>Z6I$K$J$j$9$^$7$?;~$K!"$=$l$,O*8+$7$d(B
- $B$9$$$+$i$G$9!#(B
- $BB?$/$N%V%i%&%6$OM-L>$JG'>Z6I$r?.Mj$9$k$h$&$K(B
- $B@_Dj$5$l$F$$$^$9!#(B
+ 最上位認証局の作成
+ 前に述べたように、全ての証明書について、
+ 最上位の認証局(CA)までそれぞれの発行者が
+ 対象の身元証明の有効性を明らかにする必要があります。
+ 問題は、誰がその最上位の認証機関の証明書を保証するのか、
+ ということです。
+ このような場合に限り、証明書は「自己署名」されます。
+ つまり、証明書の発行者と証明対象が同じということになります。
+ その結果、自己署名された証明書を信用するには
+ 細心の注意が必要です。
+ 最上位認証局が公開鍵を広く公表することで、
+ その鍵を信頼するリスクを低くすることができます。
+ もし、他人がその認証局になりすました時に、それが露見しや
+ すいからです。
+ 多くのブラウザは有名な認証局を信頼するように
+ 設定されています。
Thawte
- $B$d(B VeriSign
- $B$N$h$&$JB?$/$N2qZ6I$H$7$F3+@_$7$^$7$?!#(B
- $B$3$N$h$&$J2q
+ や VeriSign
+ のような多くの会社が認証局として開設しました。
+ このような会社は以下のサービスを提供します:
- - $B>ZL@=q?=@A$N3NG'(B
- - $B>ZL@=q?=@A$N=hM}(B
- - $B>ZL@=q$NH/9T$H4IM}(B
+ - 証明書申請の確認
+ - 証明書申請の処理
+ - 証明書の発行と管理
- $B<+J,$GG'>Z6I$r:n$k$3$H$b2DG=$G$9!#(B
- $B%$%s%?!<%M%C%H4D6-$G$O4m81$G$9$,!"(B
- $B8D?M$d%5!<%P$N?H85>ZL@$,4JC1$K9T$($kAH?%$N(B
- $B%$%s%H%i%M%C%HFb$G$OLr$KN)$D$+$b$7$l$^$;$s!#(B
+ 自分で認証局を作ることも可能です。
+ インターネット環境では危険ですが、
+ 個人やサーバの身元証明が簡単に行える組織の
+ イントラネット内では役に立つかもしれません。
- $B>ZL@=q4IM}(B
- $BG'>Z6I$N3+@_$OE0Dl$7$?4IM}!"5;=Q!"1?MQ$NBN@)$rI,MW$H$9$k(B
- $B@UG$$N$"$k;E;v$G$9!#(B
- $BG'>Z6I$O>ZL@=q$rH/9T$9$k$@$1$G$J$/!"(B
- $B4IM}$b$7$J$1$l$P$J$j$^$;$s!#(B
- $B6qBNE*$K$O!">ZL@=q$,$$$D$^$GM-8z$+$r7hDj$7!"99?7$7!"(B
- $B$^$?4{$KH/9T$5$l$?$,<:8z$7$?>ZL@=q$N%j%9%H(B
- (Certificate Revocation Lists $B$^$?$O(B CRL)
- $B$r4IM}$7$J$1$l$P$$$1$^$;$s!#(B
- $BNc$($P!"%"%j%9$,2qZL@=q$rM?$($i$l$?$H$7$^$9!#(B
- $B$=$7$F!"%"%j%9$,2qZL@=q$rC$5$J$1$l$P(B
- $B$$$1$J$$$H$7$^$9!#(B
- $B>ZL@=q$OZL@=q$=$N$b$N$+$i!"$=$l$,C$5$l$?$+H=CG$9$k$3$H$O(B
- $BIT2DG=$G$9!#(B
- $B$h$C$F!">ZL@=q$NM-8z@-$rD4$Y$k$H$-$K$O!"(B
- $BG'>Z6I$KO"Mm$7$F(B CRL $B$r>H9g$9$kI,MW$,$"$j$^$9!#(B
- $BIaDL$3$N2aDx$O<+F02=$5$l$F$$$k$b$N$G$O$"$j$^$;$s!#(B
+ 証明書管理
+ 認証局の開設は徹底した管理、技術、運用の体制を必要とする
+ 責任のある仕事です。
+ 認証局は証明書を発行するだけでなく、
+ 管理もしなければなりません。
+ 具体的には、証明書がいつまで有効かを決定し、更新し、
+ また既に発行されたが失効した証明書のリスト
+ (Certificate Revocation Lists または CRL)
+ を管理しなければいけません。
+ 例えば、アリスが会社から社員として証明書を与えられたとします。
+ そして、アリスが会社を辞めるときには証明書を取り消さなければ
+ いけないとします。
+ 証明書は次々と人に渡されていくものなので、
+ 証明書そのものから、それが取り消されたか判断することは
+ 不可能です。
+ よって、証明書の有効性を調べるときには、
+ 認証局に連絡して CRL を照合する必要があります。
+ 普通この過程は自動化されているものではありません。
- $BCm0U(B
- $B%G%U%)%k%H$G%V%i%&%6$K@_Dj$5$l$F$$$J$$G'>Z6I$r;H$C$?>l9g!"(B
- $BG'>Z6I$N>ZL@=q$r%V%i%&%6$KFI$_9~$s$G!"(B
- $B%V%i%&%6$,$=$NG'>Z6I$K$h$C$F=pL>$5$l$?%5!<%P$N>ZL@=q$r(B
- $BM-8z2=$9$kI,MW$,$"$j$^$9!#(B
- $B0lEYFI$_9~$^$l$k$H!"$=$NG'>Z6I$K$h$C$F=pL>$5$l$?A4$F$N(B
- $B>ZL@=q$r
+ 注意
+ デフォルトでブラウザに設定されていない認証局を使った場合、
+ 認証局の証明書をブラウザに読み込んで、
+ ブラウザがその認証局によって署名されたサーバの証明書を
+ 有効化する必要があります。
+ 一度読み込まれると、その認証局によって署名された全ての
+ 証明書を受け入れるため、危険を伴います。
@@ -409,267 +409,267 @@ dUHzICxBVC1lnHyYGjDuAMhe396lYAn8bCld1/L4NMGBCQ==
Secure Sockets Layer (SSL)
-Secure Sockets Layer $B%W%m%H%3%k$O?.Mj@-$N$"$k%3%M%/%7%g%s7?$N(B
-$B%M%C%H%o!<%/AX$N%W%m%H%3%k(B($BNc$($P!"(BTCP/IP)$B$H(B
-$B%"%W%j%1!<%7%g%sAX$N%W%m%H%3%k(B($BNc$($P!"(BHTTP)
-$B$N4V$KCV$/$3$H$,$G$-$^$9!#(B
-SSL $B$O!"Aj8_G'>Z$K$h$C$F%5!<%P$H%/%i%$%"%s%H4V$N0BA4$JDL?.$r!"(B
-$BEE;R=pL>$K$h$C$F%G!<%?$N40A4@-$r!"(B
-$B$=$7$F0E9f2=$K$h$C$F%W%i%$%P%7$rDs6!$7$^$9!#(B
+Secure Sockets Layer プロトコルは信頼性のあるコネクション型の
+ネットワーク層のプロトコル(例えば、TCP/IP)と
+アプリケーション層のプロトコル(例えば、HTTP)
+の間に置くことができます。
+SSL は、相互認証によってサーバとクライアント間の安全な通信を、
+電子署名によってデータの完全性を、
+そして暗号化によってプライバシを提供します。
-SSL $B%W%m%H%3%k$O0E9f2=!"%@%$%8%'%9%H!"EE;R=pL>$K$D$$$F!"(B
-$BMM!9$J%"%k%4%j%:%`$r%5%]!<%H$9$k$h$&$K$G$-$F$$$^$9!#(B
-$B$3$&$9$k$3$H$G!"K!$dM"=P$N5,@)$r9MN8$KF~$l$F!"%5!<%P$K9g$o$;$?(B
-$B%"%k%4%j%:%`$rA*$V$3$H$,$G$-!"$^$?!"?7$7$$%"%k%4%j%:%`$r(B
-$BMxMQ$7$F$$$/$3$H$b2DG=$K$7$F$$$^$9!#(B
-$B%"%k%4%j%:%`$NA*Br$O%W%m%H%3%k%;%C%7%g%s3+;O;~$K(B
-$B%5!<%P$H%/%i%$%"%s%H4V$G
+SSL プロトコルは暗号化、ダイジェスト、電子署名について、
+様々なアルゴリズムをサポートするようにできています。
+こうすることで、法や輸出の規制を考慮に入れて、サーバに合わせた
+アルゴリズムを選ぶことができ、また、新しいアルゴリズムを
+利用していくことも可能にしています。
+アルゴリズムの選択はプロトコルセッション開始時に
+サーバとクライアント間で取り決められます。
-$BI=(B4: SSL $B%W%m%H%3%k$N%P!<%8%g%s(B
+表4: SSL プロトコルのバージョン
- $B%P!<%8%g%s(B |
- $B=PE5(B |
- $B@bL@(B |
- $B%V%i%&%6$N%5%]!<%H(B |
+ バージョン |
+ 出典 |
+ 説明 |
+ ブラウザのサポート |
SSL v2.0 |
- Vendor Standard (Netscape Corp. $B$h$j(B) [Vendor Standard (Netscape Corp. より) [SSL2] |
- $B
+ 実装が現存する初めての SSL プロトコル |
- NS Navigator 1.x/2.x
- MS IE 3.x
- Lynx/2.8+OpenSSL | |
SSL v3.0 |
- Expired Internet Draft (Netscape Corp. $B$h$j(B) [Expired Internet Draft (Netscape Corp. より) [SSL3] |
- $BFCDj$N%;%-%e%j%F%#967b$rKI$0$?$a$N2~D{!"(B
- $BHs(BRSA $B0E9f$NDI2C!">ZL@=q3,AX9=B$$N%5%]!<%H(B |
+ 特定のセキュリティ攻撃を防ぐための改訂、
+ 非RSA 暗号の追加、証明書階層構造のサポート |
- NS Navigator 2.x/3.x/4.x
- MS IE 3.x/4.x
- Lynx/2.8+OpenSSL |
TLS v1.0 |
- Proposed Internet Standard (IETF $B$h$j(B) [Proposed Internet Standard (IETF より) [TLS1] |
- MAC $B%l%$%d$r(B HMAC $B$X99?7!"%V%m%C%/0E9f$N(B block
- padding$B!"%a%C%;!<%8=g=x$NI8=`2=!"7Y9pJ8$N=<
+ | MAC レイヤを HMAC へ更新、ブロック暗号の block
+ padding、メッセージ順序の標準化、警告文の充実などのため
+ SSL 3.0 を改訂。 |
- Lynx/2.8+OpenSSL |
-$BI=(B4$B$K<($5$l$k$H$*$j!"(BSSL $B%W%m%H%3%k$K$O(B
-$B$$$/$D$b$N%P!<%8%g%s$,$"$j$^$9!#(B
-$BI=$K$b=q$+$l$F$$$k$h$&$K!"(BSSL 3.0 $B$NMxE@$N0l$D$O(B
-$B>ZL@=q3,AX9=B$$r%5%]!<%H$9$k$3$H$G$9!#(B
-$B$3$N5!G=$K$h$C$F!"%5!<%P$O<+J,$N>ZL@=q$K2C$($F!"(B
-$BH/9TZL@=q$r%V%i%&%6$KEO$9$3$H$,$G$-$^$9!#(B
-$B>ZL@=q3,AX9=B$$K$h$C$F!"(B
-$B%V%i%&%6$KH/9TZL@=q$,D>@\EPO?$5$l$F$$$J$/$F$b!"(B
-$B3,AX$NCf$K4^$^$l$F$$$l$P!"(B
-$B%V%i%&%6$O%5!<%P$N>ZL@=q$rM-8z2=$9$k$3$H$,$G$-$^$9!#(B
-SSL 3.0 $B$O8=:_(B Internet Engineering Task Force (IETF)
-$B$K$h$C$F3+H/$5$l$F$$$k(B Transport Layer Security
-[TLS] $B%W%m%H%3%kI8=`5,3J$N4pAC$H$J$C$F$$$^$9!#(B
+表4に示されるとおり、SSL プロトコルには
+いくつものバージョンがあります。
+表にも書かれているように、SSL 3.0 の利点の一つは
+証明書階層構造をサポートすることです。
+この機能によって、サーバは自分の証明書に加えて、
+発行者の証明書をブラウザに渡すことができます。
+証明書階層構造によって、
+ブラウザに発行者の証明書が直接登録されていなくても、
+階層の中に含まれていれば、
+ブラウザはサーバの証明書を有効化することができます。
+SSL 3.0 は現在 Internet Engineering Task Force (IETF)
+によって開発されている Transport Layer Security
+[TLS] プロトコル標準規格の基礎となっています。
-$B%;%C%7%g%s$N3NN)(B
- $B?^(B1$B$G<($5$l$k$h$&$K!"(B
- $B%;%C%7%g%s$N3NN)$O%/%i%$%"%s%H$H%5!<%P4V$N(B
- $B%O%s%I%7%'!<%/%7!<%/%(%s%9$K$h$C$F9T$J$o$l$^$9!#(B
- $B%5!<%P$,>ZL@=q$rDs6!$9$k$+!"%/%i%$%"%s%H$N>ZL@=q$r%j%/%(%9%H$9$k$+(B
- $B$H$$$&%5!<%P$N@_Dj$K$h$j!"$3$N%7!<%/%(%s%9$O0[$J$k$b$N$H$J$j$^$9!#(B
- $B0E9f>pJs$N4IM}$N$?$a$K!"DI2C$N%O%s%I%7%'!<%/2aDx$,I,MW$K$J$k(B
- $B>l9g$b$"$j$^$9$,!"$3$N5-;v$G$O(B
- $B$h$/$"$k%7%J%j%*$rH$7$F$/$@$5$$!#(B
+セッションの確立
+ 図1で示されるように、
+ セッションの確立はクライアントとサーバ間の
+ ハンドシェークシークエンスによって行なわれます。
+ サーバが証明書を提供するか、クライアントの証明書をリクエストするか
+ というサーバの設定により、このシークエンスは異なるものとなります。
+ 暗号情報の管理のために、追加のハンドシェーク過程が必要になる
+ 場合もありますが、この記事では
+ よくあるシナリオを手短に説明します。
+ 全ての可能性についは、SSL 仕様書を参照してください。
- $BCm0U(B
- $B0lEY(B SSL $B%;%C%7%g%s$,3NN)$9$k$H!"%;%C%7%g%s$r:FMxMQ$9$k$3$H$G!"(B
- $B%;%C%7%g%s$r3+;O$9$k$?$a$NB?$/$N2aDx$r7+$jJV$9$H$$$&(B
- $B%Q%U%)!<%^%s%9$NB;<:$rKI$.$^$9!#(B
- $B$=$N$?$a!"%5!<%P$OA4$F$N%;%C%7%g%s$K0l0U$J%;%C%7%g%s<1JLL>$r(B
- $B3d$jEv$F!"%5!<%P$K%-%c%C%7%e$7!"%/%i%$%"%s%H$O$,%5!<%P$N%-%c%C%7%e$G4|8B@Z$l$K$J$k$^$G$O(B)
- $B%O%s%I%7%'!<%/$J$7$G@\B3$9$k$3$H$,$G$-$^$9!#(B
+ 注意
+ 一度 SSL セッションが確立すると、セッションを再利用することで、
+ セッションを開始するための多くの過程を繰り返すという
+ パフォーマンスの損失を防ぎます。
+ そのため、サーバは全てのセッションに一意なセッション識別名を
+ 割り当て、サーバにキャッシュし、クライアントは次回から
+ (識別名がサーバのキャッシュで期限切れになるまでは)
+ ハンドシェークなしで接続することができます。

- $B?^(B1: SSL
- $B%O%s%I%7%'!<%/%7!<%/%(%s%935N,(B
+ 図1: SSL
+ ハンドシェークシークエンス概略
- $B%5!<%P$H%/%i%$%"%s%H$G;H$o$l$k(B
- $B%O%s%I%7%'!<%/%7!<%/%(%s%9$NMWAG$r0J2<$K<($7$^$9(B:
+ サーバとクライアントで使われる
+ ハンドシェークシークエンスの要素を以下に示します:
- - $B%G!<%?DL?.$K;H$o$l$k0E9f%9%$!<%H$N
-
- $B%/%i%$%"%s%H$H%5!<%P4V$G$N%;%C%7%g%s80$N3NN)$H6&M-(B
- - $B%*%W%7%g%s$H$7$F!"%/%i%$%"%s%H$KBP$9$k%5!<%P$NG'>Z(B
- - $B%*%W%7%g%s$H$7$F!"%5!<%P$KBP$9$k%/%i%$%"%s%H$NG'>Z(B
+ - データ通信に使われる暗号スイートの取り決め
+ - クライアントとサーバ間でのセッション鍵の確立と共有
+ - オプションとして、クライアントに対するサーバの認証
+ - オプションとして、サーバに対するクライアントの認証
- $BBh0l%9%F%C%W$N0E9f%9%$!<%H$l$K$"$C$?(B
- $B0E9f%9%$!<%H$rA*$V$3$H$,$G$-$^$9!#(B
- SSL3.0 $B%W%m%H%3%k$N;EMM=q$O(B 31 $B$N0E9f%9%$!<%H$rDj5A$7$F$$$^$9!#(B
- $B0E9f%9%$!<%H$O0J2<$N%3%s%]!<%M%s%H$K$h$jDj5A$5$l$F$$$^$9(B:
+ 第一ステップの暗号スイート取り決めによって、
+ サーバとクライアントはそれぞれにあった
+ 暗号スイートを選ぶことができます。
+ SSL3.0 プロトコルの仕様書は 31 の暗号スイートを定義しています。
+ 暗号スイートは以下のコンポーネントにより定義されています:
- - $B80$N8r49
-
- $B%G!<%?DL?.$N0E9f=Q(B
- - Message Authentication Code (MAC) $B:n@.$N$?$a$N(B
- $B%a%C%;!<%8%@%$%8%'%9%H(B
+ - 鍵の交換手段
+ - データ通信の暗号術
+ - Message Authentication Code (MAC) 作成のための
+ メッセージダイジェスト
- $B$3$l$i$N;0$D$NMWAG$O0J2<$N%;%/%7%g%s$G@bL@$5$l$F$$$^$9!#(B
+ これらの三つの要素は以下のセクションで説明されています。
-$B80$N8r49
- $B80$N8r49N0E9f80$r$I$N$h$&$K$,%/%i%$%"%s%H$H%5!<%P$G(B
- $BZL@=q$,;H$o$l$k$H$-$O(B RSA $B808r49$r;H$$!"(B
- $B>ZL@=q$,L5$/!"%/%i%$%"%s%H$H%5!<%P$N;vA0$NDL?.$,L5$$>l9g$O(B
- Diffie-Hellman $B808r49$r;H$&(B
- $B$J$IMM!9$J808r49%"%k%4%j%:%`$r%5%]!<%H$7$^$9!#(B
+鍵の交換手段
+ 鍵の交換手段はアプリケーションのデータ通信に使われ、
+ 共有される対称暗号鍵をどのようにがクライアントとサーバで
+ 取り決めるかを定義します。
+ SSL 2.0 は RSA 鍵交換しか使いませんが、
+ SSL 3.0 は証明書が使われるときは RSA 鍵交換を使い、
+ 証明書が無く、クライアントとサーバの事前の通信が無い場合は
+ Diffie-Hellman 鍵交換を使う
+ など様々な鍵交換アルゴリズムをサポートします。
- $B80$N8r49J}K!$K$*$1$k0l$D$NA*Br;h$OEE;R=pL>$G$9!#(B
- $BEE;R=pL>$r;H$&$+$I$&$+!"$^$?!"(B
- $B$I$N$r;H$&$+$H$$$&A*Br$,$"$j$^$9!#(B
- $BHkL)80$G=pL>$9$k$3$H$G6&M-80$r@8@.$9$7!">pJs8r49$9$k;~$N(B
- $B%^%s!&%$%s!&%6!&%_%I%k967b$rKI$0$3$H$,$G$-$^$9!#(B
+ 鍵の交換方法における一つの選択肢は電子署名です。
+ 電子署名を使うかどうか、また、
+ どの種類の署名を使うかという選択があります。
+ 秘密鍵で署名することで共有鍵を生成すし、情報交換する時の
+ マン・イン・ザ・ミドル攻撃を防ぐことができます。
[AC96, p516]
-$B%G!<%?DL?.$N0E9f=Q(B
- SSL $B$O%;%C%7%g%s$N%a%C%;!<%8$N0E9f2=$KA0=R$7$?(B
- $B=>Mh7?0E9f(B($BBP>N0E9f(B)$B$rMQ$$$^$9!#(B
- $B0E9f2=$7$J$$$H$$$&A*Br;h$b4^$a6e$D$NA*Br;h$,$"$j$^$9(B:
+データ通信の暗号術
+ SSL はセッションのメッセージの暗号化に前述した
+ 従来型暗号(対称暗号)を用います。
+ 暗号化しないという選択肢も含め九つの選択肢があります:
- - $B0E9f2=$J$7(B
- - $B%9%H%j!<%`0E9f(B
+
- 暗号化なし
+ - ストリーム暗号
- - 40-bit $B80$G$N(B RC4
- - 128-bit $B80$G$N(B RC4
+ - 40-bit 鍵での RC4
+ - 128-bit 鍵での RC4
- - CBC $B%V%m%C%/0E9f(B
-
- 40 bit $B80$G$N(B RC2
- - 40 bit $B80$G$N(B DES
- - 56 bit $B80$G$N(B DES
- - 168 bit $B80$G$N(B Triple-DES
- - Idea (128 bit $B80(B)
- - Fortezza (96 bit $B80(B)
+ - CBC ブロック暗号
+
- 40 bit 鍵での RC2
+ - 40 bit 鍵での DES
+ - 56 bit 鍵での DES
+ - 168 bit 鍵での Triple-DES
+ - Idea (128 bit 鍵)
+ - Fortezza (96 bit 鍵)
- $B$3$3$G$N(B CBC $B$H$O0E9f%V%m%C%/O":?(B (Cipher Block Chaining)
- $B$NN,$G!"0l$DA0$N0E9f2=$5$l$?0E9fJ8$N0lIt$,(B
- $B%V%m%C%/$N0E9f2=$K;H$o$l$k$3$H$r0UL#$7$^$9!#(B
- DES $B$O%G!<%?0E9f2=I8=`5,3J(B (Data Encryption Standard)
- [AC96, ch12] $B$NN,$G!"(B
- DES40 $B$d(B 3DES_EDE $B$r4^$`$$$/$D$b$Nここでの CBC とは暗号ブロック連鎖 (Cipher Block Chaining)
+ の略で、一つ前の暗号化された暗号文の一部が
+ ブロックの暗号化に使われることを意味します。
+ DES はデータ暗号化標準規格 (Data Encryption Standard)
+ [AC96, ch12] の略で、
+ DES40 や 3DES_EDE を含むいくつもの種類があります。
+ Idea は最高なものの一つで、暗号術的には現在ある中で
+ 最も強力なものです。
+ RC2 は RSA DSI による独占的なアルゴリズムです。
[AC96,
ch13]
-$B%@%$%8%'%9%H4X?t(B
+ダイジェスト関数
- $B%@%$%8%'%9%H4X?t$NA*Br$O%l%3!<%I%f%K%C%H$+$i$I$N$h$&$K%@%$%8%'%9%H$,@8@.$5$l$k$+$r7hDj$7$^$9!#(B
- SSL $B$O0J2<$r%5%]!<%H$7$^$9(B:
+ ダイジェスト関数の選択はレコードユニットからどのようにダイジェストが生成されるかを決定します。
+ SSL は以下をサポートします:
- - $B%@%$%8%'%9%H$J$7(B
- - MD5 (128-bit $B%O%C%7%e(B)
- - Secure Hash Algorithm (SHA-1) (160-bit $B%O%C%7%e(B)
+ - ダイジェストなし
+ - MD5 (128-bit ハッシュ)
+ - Secure Hash Algorithm (SHA-1) (160-bit ハッシュ)
- $B%a%C%;!<%8%@%$%8%'%9%H$O(B Message Authentication Code (MAC)
- $B$N@8@.$K;H$o$l!"%a%C%;!<%8$H6&$K0E9f2=$5$l!"%a%C%;!<%8$N?.MQ$r(B
- $BDs6!$7!"%j%W%l%$967b$rKI$.$^$9!#(B
+ メッセージダイジェストは Message Authentication Code (MAC)
+ の生成に使われ、メッセージと共に暗号化され、メッセージの信用を
+ 提供し、リプレイ攻撃を防ぎます。
-$B%O%s%I%7%'!<%/%7!<%/%(%s%9%W%m%H%3%k(B
- $B%O%s%I%7%'!<%/%7!<%/%(%s%9$O;0$D$N%W%m%H%3%k$r;H$$$^$9(B:
+ハンドシェークシークエンスプロトコル
+ ハンドシェークシークエンスは三つのプロトコルを使います:
- - SSL $B%O%s%I%7%'!<%/%W%m%H%3%k(B$B$O(B
- $B%/%i%$%"%s%H$H%5!<%P4V$G$N(B SSL $B%;%C%7%g%s$N3NN)$K;H$o$l$^$9!#(B
- - SSL $B0E9f;EMMJQ99%W%m%H%3%k(B$B$O(B
- $B%;%C%7%g%s$G$N0E9f%9%$!<%H$N
-
- SSL $B7Y9p%W%m%H%3%k(B$B$O(B
- $B%/%i%$%"%s%H%5!<%P4V$G(B SSL $B%(%i!<$rEAC#$9$k$N$K;H$o$l$^$9!#(B
+ - SSL ハンドシェークプロトコルは
+ クライアントとサーバ間での SSL セッションの確立に使われます。
+ - SSL 暗号仕様変更プロトコルは
+ セッションでの暗号スイートの取り決めに使われます。
+ - SSL 警告プロトコルは
+ クライアントサーバ間で SSL エラーを伝達するのに使われます。
- $B;0$D$N%W%m%H%3%k$O!"%"%W%j%1!<%7%g%s%W%m%H%3%k%G!<%?$H$H$b$K!"(B
- $B?^(B2$B$K<($9$H$*$j(B SSL $B%l%3!<%I%W%m%H%3%k(B
- $B$G%+%W%;%k2=$5$l$^$9!#(B
- $B%+%W%;%k2=$5$l$?%W%m%H%3%k$O%G!<%?$r8!::$7$J$$(B
- $B2
+ 三つのプロトコルは、アプリケーションプロトコルデータとともに、
+ 図2に示すとおり SSL レコードプロトコル
+ でカプセル化されます。
+ カプセル化されたプロトコルはデータを検査しない
+ 下層のプロトコルによってデータとして伝達されます。
+ カプセル化されたプロトコルは下層のプロトコルに関して一切関知しません。

- $B?^(B2: SSL $B%W%m%H%3%k%9%?%C%/(B
+ 図2: SSL プロトコルスタック
- $B%l%3!<%I%W%m%H%3%k$K$h$k(B SSL $B%3%s%H%m!<%k%W%m%H%3%k$N%+%W%;%k2=$O!"(B
- $B%"%/%F%#%V$J%;%C%7%g%s$NFs2sL\$NDL?.$,$"$C$?>l9g!"(B
- $B%3%s%H%m!<%k%W%m%H%3%k$,0BA4$G$"$k$3$H$r0UL#$7$^$9!#(B
- $B4{$K%;%C%7%g%s$,L5$$>l9g$O!"(BNull $B0E9f%9%$!<%H$,;H$o$l!"(B
- $B0E9f2=$O9T$J$o$l$:!"%;%C%7%g%s$,3NN)$9$k$^$G$O(B
- $B%@%$%8%'%9%H$bL5$$>uBV$H$J$j$^$9!#(B
+ レコードプロトコルによる SSL コントロールプロトコルのカプセル化は、
+ アクティブなセッションの二回目の通信があった場合、
+ コントロールプロトコルが安全であることを意味します。
+ 既にセッションが無い場合は、Null 暗号スイートが使われ、
+ 暗号化は行なわれず、セッションが確立するまでは
+ ダイジェストも無い状態となります。
-$B%G!<%?DL?.(B
- $B?^(B3$B$K<($5$l$k(B SSL $B%l%3!<%I%W%m%H%3%k(B
- $B$O%/%i%$%"%s%H$H%5!<%P4V$N%"%W%j%1!<%7%g%s$d(B
- SSL $B%3%s%H%m!<%k%G!<%?$NDL?.$K;H$o$l$^$9!#(B
- $B$3$N%G!<%?$O$h$j>.$5$$%f%K%C%H$KJ,$1$i$l$?$j!"(B
- $B$$$/$D$+$N9b5i%W%m%H%3%k$r$^$H$a$F0l%f%K%C%H$H$7$FDL?.$,(B
- $B9T$J$o$l$k$3$H$b$"$j$^$9!#(B
- $B%G!<%?$r05=L$7!"%@%$%8%'%9%H=pL>$rE:IU$7$F!"(B
- $B$3$l$i$N%f%K%C%H$r0E9f2=$7$?$N$A!"%Y!<%9$H$J$C$F$$$k(B
- $B?.Mj@-$N$"$k%H%i%s%9%]!<%H%W%m%H%3%k$rMQ$$$k$+$b$7$l$^$;$s!#(B
- ($BCm0U(B: $B8=:_%a%8%c!<$J(B SLL $B
+データ通信
+ 図3に示される SSL レコードプロトコル
+ はクライアントとサーバ間のアプリケーションや
+ SSL コントロールデータの通信に使われます。
+ このデータはより小さいユニットに分けられたり、
+ いくつかの高級プロトコルをまとめて一ユニットとして通信が
+ 行なわれることもあります。
+ データを圧縮し、ダイジェスト署名を添付して、
+ これらのユニットを暗号化したのち、ベースとなっている
+ 信頼性のあるトランスポートプロトコルを用いるかもしれません。
+ (注意: 現在メジャーな SLL 実装で圧縮をサポートしているものはありません)

- $B?^(B 3: SSL $B%l%3!<%I%W%m%H%3%k(B
+ 図 3: SSL レコードプロトコル
-HTTP $BDL?.$N0BA42=(B
- $B$h$/$"$k(B SSL $B$N;H$$J}$O%V%i%&%6$H%&%'%V%5!<%P4V$N(B HTTP $BDL?.(B
- $B$N0BA42=$G$9!#(B
- $B$3$l$O!"=>Mh$N0BA4$G$O$J$$(B HTTP $B$N;HMQ$r=|30$9$k$b$N$G$O$"$j$^$;$s!#(B
- $B0BA42=$5$l$?$b$N$Oe$NIaDL$N(B HTTP $B$G!"(BHTTPS $B$H8F$P$l$^$9!#(B
- $BBg$-$J0c$$$O!"(BURL $B%9%-!<%`$K(B http
$B$NBe$o$j$K(B https
- $B$rMQ$$!"%5!<%P$,JL$N%]!<%H$r;H$&$3$H$G$9(B ($B%G%U%)%k%H$G$O(B443)$B!#(B
- $B$3$l$,mod_ssl $B$,(B Apache $B%&%'%V%5!<%P$KDs6!$9$k5!G=$G$9!#(B
+HTTP 通信の安全化
+ よくある SSL の使い方はブラウザとウェブサーバ間の HTTP 通信
+ の安全化です。
+ これは、従来の安全ではない HTTP の使用を除外するものではありません。
+ 安全化されたものは主に SSH 上の普通の HTTP で、HTTPS と呼ばれます。
+ 大きな違いは、URL スキームに http
の代わりに https
+ を用い、サーバが別のポートを使うことです (デフォルトでは443)。
+ これが主に mod_ssl が Apache ウェブサーバに提供する機能です。
-$B;29MJ88%(B
+参考文献
- [AC96]
- Bruce Schneier,
Applied Cryptography
, 2nd Edition, Wiley,
diff --git a/docs/manual/stopping.xml.ja b/docs/manual/stopping.xml.ja
index 3add89054d..c9636a72bc 100644
--- a/docs/manual/stopping.xml.ja
+++ b/docs/manual/stopping.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -22,225 +22,225 @@
- $BDd;_$H:F5/F0(B
+ 停止と再起動
- $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$B%5!<%S%9$H$7$F(B
- Apache $B$r$B$G!"(BWindows 9x, ME$B%f!<%6$O(B$B%3%s%=!<%k%"%W%j%1!<%7%g%s$H$7$F(B
- Apache $B$r$B$G!"(B
- $B$3$l$i$N%W%i%C%H%[!<%`$G$N;HMQJ}K!$r$4Mw2<$5$$!#(B
+ この文書では Unix に類似したシステムでの
+ Apache の停止と再起動について扱っています。
+ Windows NT, 2000, XP ユーザはサービスとして
+ Apache を実行するで、Windows 9x, MEユーザはコンソールアプリケーションとして
+ Apache を実行するで、
+ これらのプラットホームでの使用方法をご覧下さい。
httpd
apachectl
-$B%$%s%H%m%@%/%7%g%s(B
+イントロダクション
- Apache $B$rDd;_$7$?$j:F5/F0$7$?$j$9$k$?$a$K$O!"httpd $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 kill
- $B%3%^%s%I$r;HMQ$9$kJ}K!$G$9!#(B
- $B%7%9%F%`$r8+$l$P$?$/$5$s$N(B httpd $B$,(B
- $BApache を停止したり再起動したりするためには、実行されている
+ httpd プロセスにシグナルを送る必要があります。
+ シグナルを送るには二つの方法があります。
+ 一つ目はプロセスに直接シグナルを送る unix の kill
+ コマンドを使用する方法です。
+ システムを見ればたくさんの httpd が
+ 実行されているのに気が付くでしょうが、シグナルを送るのは
+ 親プロセスだけで、それ以外の個々のプロセスには
+ シグナルを送らないで下さい。その親プロセスの pid は
PidFile
- $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 $BTERM,
HUP
,
USR1
- $B$G$9!#$3$l$i$N@bL@$K$D$$$F$OB3$-$r$4Mw2<$5$$!#(B
+ です。これらの説明については続きをご覧下さい。
- $B?F%W%m%;%9$K%7%0%J%k$rAw$k$K$O!"(B
- $B
+
親プロセスにシグナルを送るには、
+ 次のようなコマンドを発行して下さい:
kill -TERM `cat /usr/local/apache2/logs/httpd.pid`
- httpd $B%W%m%;%9$K%7%0%J%k$rAw$k(B 2 $BHVL\$NJ}K!$O(B
- -k
$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!"(Bstop
, restart
,
- graceful
$B$r;XDj$G$-$^$9!#(B
- $B$3$l$i$O(B httpd $B$N0z?t$G$9$,!"(B
- $B@)8fMQ$N%9%/%j%W%H(B apachectl $B$O$=$l$i$N0z?t$r$=$N$^$^(B
- httpd $B$KEO$7$^$9!#(B
+ httpd プロセスにシグナルを送る 2 番目の方法は
+ -k
というコマンドライン引数を使用することです。
+ 下で説明されているように、stop
, restart
,
+ graceful
を指定できます。
+ これらは httpd の引数ですが、
+ 制御用のスクリプト apachectl はそれらの引数をそのまま
+ httpd に渡します。
- httpd $B$K%7%0%J%k$rAw$C$?8e!"(B
- $Bu67$r
+ httpd にシグナルを送った後、
+ 実行状況を次のコマンドで読むことができます:
tail -f /usr/local/apache2/logs/error_log
- $B$3$3$K5s$2$?Nc$O!"3F<+$N(B
+
ここに挙げた例は、各自の
ServerRoot
- $B$H(B
+ と
PidFile
- $B$N@_Dj$KE,9g$9$k$h$&$KE,59=$@5$7$F2<$5$$!#(B
+ の設定に適合するように適宜修正して下さい。
-$B5^$JDd;_(B
+急な停止
-- $B%7%0%J%k(B: TERM
+- シグナル: TERM
apachectl -k stop
- TERM
$B$"$k$$$O(B stop
- $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
+ TERM
あるいは stop
+ シグナルを親プロセスに送ると、即座に子プロセス全てを kill しようとします。
+ 子プロセスを完全に kill し終わるまでに数秒かかるかもしれません。
+ その後、親プロセス自身が終了します。
+ 処理中のリクエストは全て停止され、もはやリクエストに対する
+ 応答はされません。
-$B4K$d$+$J:F5/F0(B
+緩やかな再起動
-- $B%7%0%J%k(B: USR1
+- シグナル: USR1
apachectl -k graceful
- $B?F%W%m%;%9$O(B USR1
$B$"$k$$$O(B graceful
- $B%7%0%J%k$r$B=u8@(B$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$B@$Be(B$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
+ 親プロセスは USR1
あるいは graceful
+ シグナルを受け取ると、子プロセスに現在のリクエストの処理の後に終了する
+ (あるいは何もしていなければすぐに終了する)
+ ように助言します。
+ 親プロセスは設定ファイルを再読込して、ログファイルを開き直します。
+ 子プロセスが徐々になくなるに従って、
+ 新しい世代の設定による子プロセスに置き換えていきます。
+ そして、これらが新たなリクエストに即座に応答し始めます。
- $BFCDj$N%W%i%C%H%[!<%`$G$O(B USR1
- $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
+ 特定のプラットホームでは USR1
+ を緩やかな再起動のために使うことができませんが、代わりのシグナル
+ (例えば WINCH) が使用できるでしょう。
apachectl graceful
- $B$H$$$&%3%^%s%I$O%W%i%C%H%[!<%`$K9g$C$?%7%0%J%k$rAw$j$^$9!#(B
+ というコマンドはプラットホームに合ったシグナルを送ります。
- $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!#!#$^$?!"このコードは常に
+ MPM のプロセス制御ディレクティブの設定を重視しますので、
+ クライアントのリクエストを扱うプロセスとスレッドの数を再起動の処理中も
+ 適切な値に維持されます。。また、次のようにして
StartServers
- $B$r/$J$/$H$b(B 1 $BIC8e$K(B StartServers $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 秒後に StartServers 個の新しい子プロセスが
+ 生成されていなければ、その数になるように適宜プロセスを生成します。
+ この挙動は現在の負荷に対して適切な子プロセスの数と
StartServers $B%Q%i%a!<%?$G$N(B
- $B4uK>$N?t$NN>J}$r0];}$7$h$&$H$7$F$$$^$9!#(B
+ module="mpm_common">StartServers パラメータでの
+ 希望の数の両方を維持しようとしています。
- mod_status $B$r(B
- $B;HMQ$7$F$$$k>l9g$O!"(BUSR1
$B%7%0%J%k$,Aw$i$l$?:]$K(B
- $B%5!<%PE}7W$,%<%m$K(B$B@_Dj$5$l$J$$(B$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$B%9%3%"%\!<%I(B$B$r0];}$7$J$1$l$P$J$j$^$;$s!#(B
+ mod_status を
+ 使用している場合は、USR1
シグナルが送られた際に
+ サーバ統計がゼロに設定されないことに
+ 注意してください。
+ サーバが新しいリクエストに応答不能な時間を最小にするように
+ (リクエストは OS によってキューに追加されるので絶対に紛失はしません)、
+ また同時に、希望のチューニングパラメータを守るように
+ コードは書かれています。
+ このようにするために、世代をまたがった全子プロセスの追跡に使われている
+ スコアボードを維持しなければなりません。
- 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
- G
$B$r;H$&$3$H$b$7$^$9!#(B
+ status モジュールは、緩やかな再起動以前から開始して
+ リクエストに応答し続けている子プロセスを特定するために、
+ G
を使うこともします。
- $B8=:_!"(BUSR1
$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
- USR1
$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
+ 現在、USR1
を使うログ移動スクリプトでは、
+ 再起動前の子プロセスがログを書き終わったことを確証する方法が
+ ありません。古いログに対して何かする前に、
+ USR1
シグナルを送った後いくらか適当な時間待つことを
+ 提案します。例えば、帯域の狭い通信路のユーザのリクエストのほとんどが 10
+ 分以下で完了しているということが分かっていれば、
+ 古いログに何かする前に 15 分待つということです。
- $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-t
- $B%3%^%s%I%i%$%s0z?t(B
- (httpd $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 httpd $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$/$Ohttpd
- $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
+ 再起動時に設定ファイルに誤りがあると、
+ 親プロセスは再起動せずにエラーとともに終了します。
+ 緩やかな再起動の場合は、親プロセスが終了した後でも子プロセスが
+ 実行されたまま放置されたりもします。
+ (最後のリクエストを処理した後「緩やかに終了」する
+ 子プロセスとなります。)
+ サーバを再起動する際に、これが問題になるかもしれません
+ -- サーバは listen するポートにバインドできないかもしれません。
+ 再起動する前に、設定ファイルの構文を -t
+ コマンドライン引数
+ (httpd をご覧下さい)
+ を使って検証することができます。
+ 設定ファイルの意味的な内容を構文と同様に検証したい場合は、
+ 非 root ユーザで httpd を起動しようとすればわかります。
+ もしエラーがなければ、ソケットやログを開こうとして
+ root でないため
+ (もしくは実行中の httpd
+ が既に必要なポートにバインドしているため)
+ に失敗するでしょう。
+ これ以外の理由で起動に失敗したのであれば、
+ それは設定ファイルのエラーで、
+ 緩やかな再起動を行う前にその誤りを修正しなければなりません。
-$B5^$J:F5/F0(B
+急な再起動
-- $B%7%0%J%k(B: HUP
+- シグナル: HUP
apachectl -k restart
- HUP
$B$"$k$$$O(B restart
$B%7%0%J%k$r?F%W%m%;%9$KAw$k$H!"(B
- TERM
$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
+ HUP
あるいは restart
シグナルを親プロセスに送ると、
+ TERM
と同様に子プロセスを kill しますが、
+ 親プロセスは終了しません。
+ 設定ファイルを再読込して、ログファイル全てを開き直します。
+ その後、新しい子プロセスを起動して応答を続けます。
mod_status
- $B$r;H$C$F$$$k>l9g$O!"(BHUP
$B$,Aw$i$l$?>l9g$K(B
- $B%5!<%PE}7W$,%<%m$K@_Dj$5$l$k$3$H$KCm0U$7$F$/$@$5$$!#(B
+ を使っている場合は、HUP
が送られた場合に
+ サーバ統計がゼロに設定されることに注意してください。
- $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
+ 再起動時に設定ファイルに誤りがあると、
+ 親プロセスは再起動せずにエラーとともに終了します。
+ これを避けるには次の方法をご覧下さい。
-$BIUO?(B: $B%7%0%J%k$H6%9g>uBV(B
+付録: シグナルと競合状態
- Apache 1.2b9 $B0JA0$O!":F5/F0$dDd;_$N%7%0%J%k$r4^$`(B$B6%9g>uBV(B
- ($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!"$"$kuBV$OL$$@3N
+ Apache 1.2b9 以前は、再起動や停止のシグナルを含む競合状態
+ (競合状態を簡単に説明すると: タイミンにグよる問題で、
+ 具合の悪い時間帯にちょうど何かが起こると予想外の動作をする
+ ようなことを指します) がありました。
+ 「正しい」機能を持っているアーキテクチャでは、できるだけ
+ このようなことが起こらないようにしています。
+ しかし、ある種のアーキテクチャでは競合状態は未だ確実に起こりえる
+ ということに注意してください。
- $B%G%#%9%/>e$G(B
+
ディスク上で
ScoreBoardFile
- $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" (HUP
$B8e(B) $B$d(B
- "long lost child came home!" (USR1
$B8e(B)
- $B$H$$$C$?7k2L$K$J$j$^$9!#(B
- $BA0o$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" (HUP
後) や
+ "long lost child came home!" (USR1
後)
+ といった結果になります。
+ 前者は致命的なエラーですが、
+ 後者はスコアボードスロットを失うだけです。
+ ですから緩やかな再起動は、たまに確実な再起動 (HUP)
+ も併用して使った方が良いでしょう。
+ これらの問題を克服するのは非常に難しいのですが、
+ 幸いなことに大部分のアーキテクチャではスコアボードのファイルは必要ありません。
+ これを使用するアーキテクチャは、
ScoreBoardFile
- $B$r$4Mw2<$5$$!#(B
+ をご覧下さい。
- $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
- $Bo$K1\Mw$G$-$F$$$^$9!#(B
+ 全てのアーキテクチャにおいて、個々の子プロセスで
+ 継続的な HTTP コネクション (KeepAlive)
+ に関する小さな競合状態が起こりえます。
+ リクエスト行を読んだ後、そしてリクエストヘッダを読む前に
+ 子プロセスは終了するかも知れません。
+ これに対する修正がありますが 1.2 で修正するには発見が遅すぎました。
+ 理論的には、これは問題ではありません。
+ なぜなら KeepAlive のクライアントは、ネットワーク遅延や
+ サーバのタイムアウトなどに備えていなければならないからです。
+ 実際にも何か影響があるようには見えません
+ -- テストケースでサーバを 1 秒間に 20 回再起動しても
+ クライアントは壊れた画像や空のドキュメントを受け取ることなく
+ 正常に閲覧できています。
diff --git a/docs/manual/style/lang/ja.xml b/docs/manual/style/lang/ja.xml
index b7da8700e7..92fba6cda1 100644
--- a/docs/manual/style/lang/ja.xml
+++ b/docs/manual/style/lang/ja.xml
@@ -1,4 +1,4 @@
-
+
@@ -39,37 +39,37 @@
Japanese
- $B%3%"5!G=$H(B MPM
- $BB>$N%b%8%e!<%k(B
- $B5l<0$N%b%8%e!<%k(B
+ コア機能と MPM
+ 他のモジュール
+ 旧式のモジュール
- $B5l<0$N(B Apache Module
- Apache $B%b%8%e!<%k(B
- Apache $B%3%"5!G=(B
- Apache MPM $B6&DL%G%#%l%/%F%#%V(B
+ 旧式の Apache Module
+ Apache モジュール
+ Apache コア機能
+ Apache MPM 共通ディレクティブ
Apache MPM
- $B@bL@(B
- $B;2>H(B
- $B%H%T%C%/(B
- $B%9%F!<%?%9(B
- $B%b%8%e!<%k<1JL;R(B
- $B%=!<%9%U%!%$%k(B
- $B8_49@-(B
+ 説明
+ 参照
+ トピック
+ ステータス
+ モジュール識別子
+ ソースファイル
+ 互換性
- $B4XO"%b%8%e!<%k(B
- $B4XO"%G%#%l%/%F%#%V(B
+ 関連モジュール
+ 関連ディレクティブ
- $B9=J8(B
- $B%G%U%)%k%H(B
- $B%3%s%F%-%9%H(B
- $B>e=q$-(B
- $B%9%F!<%?%9(B
- $B%b%8%e!<%k(B
+ 構文
+ デフォルト
+ コンテキスト
+ 上書き
+ ステータス
+ モジュール
Base
@@ -80,50 +80,50 @@
External
- $B%5!<%P@_Dj%U%!%$%k(B
- $B%P!<%A%c%k%[%9%H(B
- $B%G%#%l%/%H%j(B
+ サーバ設定ファイル
+ バーチャルホスト
+ ディレクトリ
.htaccess
- $B%G%#%l%/%F%#%V(B
+ ディレクティブ
- $B%G%#%l%/%F%#%V(B
- $B$3$N%b%8%e!<%k$K%G%#%l%/%F%#%V$O$"$j$^$;$s!#(B
+ ディレクティブ
+ このモジュールにディレクティブはありません。
- $B35MW(B
+ 概要
- $BLuCm(B:
+ 訳注:
- $BMQ8l=8$r;2>H(B
+ 用語集を参照
- - Apache HTTP $B%5!<%P(B
- Apache HTTP $B%5!<%P(B
- $B%P!<%8%g%s(B &httpd.major;.&httpd.minor;
+ - Apache HTTP サーバ
+ Apache HTTP サーバ
+ バージョン &httpd.major;.&httpd.minor;
[APACHE DOCUMENTATION]
Google Search
- $B:w0z(B
- $B%[!<%`(B
+ 索引
+ ホーム
Apache
- HTTP $B%5!<%P(B
- $B%I%-%e%a%s%F!<%7%g%s(B
- $B%P!<%8%g%s(B
+ HTTP サーバ
+ ドキュメンテーション
+ バージョン
&httpd.major;.&httpd.minor;
- $B%b%8%e!<%k(B
+ モジュール
FAQ
- $BMQ8l(B
- $B%5%$%H%^%C%W(B
+ 用語
+ サイトマップ
Licensed under the
diff --git a/docs/manual/suexec.xml.ja b/docs/manual/suexec.xml.ja
index 235207a70e..ebf7808026 100644
--- a/docs/manual/suexec.xml.ja
+++ b/docs/manual/suexec.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -22,574 +22,574 @@
- suEXEC $B%5%]!<%H(B
+ suEXEC サポート
suEXEC
- $B5!G=$K$h$j!"(BApache $B%f!<%6$O(B Web $B%5!<%P$rCGI $B%W%m%0%i%`$d(B SSI
- $B%W%m%0%i%`$rl9g!"DL>o$O(B web $B%5!<%P$HF1$8%f!<%6$GCGI プログラムや SSI
+ プログラムを実行することができます。CGI プログラムまたは SSI
+ プログラムを実行する場合、通常は web サーバと同じユーザで実行されます。
- $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/$7e$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 setuid root
- $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
+ 適切に使用すると、この機能によりユーザが個別の CGI
+ や SSI プログラムを開発し実行することで生じるセキュリティ上の危険を、
+ かなり減らすことができます。しかし、suEXEC の設定が不適切だと、
+ 多くの問題が生じ、あなたのコンピュータに新しいセキュリティホールを
+ 作ってしまう可能性があります。あなたが setuid root
+ されたプログラムと、それらから生じるセキュリティ上の問題の管理に
+ 詳しくないようなら、suEXEC の使用を検討しないように強く推奨します。
- $B;O$a$kA0$K(B
+ 始める前に
- $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
+
この文書の先頭に飛ぶ前に、Apache
+ グループとこの文書での仮定を知っておくべきでしょう。
- $BBh(B 1 $B$K!"$"$J$?$,(B setuid $B$H(B
- setgid $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
+ 第 1 に、あなたが setuid と
+ setgid 操作が可能な UNIX
+ 由来のオペレーティングシステムを使っていることを想定しています。
+ これは、すべてのコマンド例にあてはまります。
+ その他のプラットホームでは、もし suEXEC
+ がサポートされていたとしても設定は異なるかもしれません。
- $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!"(Bsetuid/setgid
- $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
+
第 2 に、あなたが使用中のコンピュータの
+ セキュリティに関する基本的な概念と、それらの管理について詳しいことを
+ 想定しています。これは、setuid/setgid
+ 操作、あなたのシステム上でのその操作による様々な効果、
+ セキュリティレベルについてあなたが理解しているということを含みます。
- $BBh(B 3 $B$K!"(B$B2~B$$5$l$F$$$J$$(B 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/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 $B6/$/(B$B?d>)$7$^$9!#(B
+ 第 3 に、改造されていない suEXEC
+ コードの使用を想定しています。suEXEC のコードは、
+ 多くのベータテスタだけでなく、開発者によっても注意深く精査され
+ テストされています。それらの注意により、簡潔で信頼できる安全な
+ コードの基盤が保証されます。このコードを改変することで、
+ 予期されない問題や新しいセキュリティ上の危険が生じることがあります。
+ セキュリティプログラミングの詳細に通じていて、
+ 今後の検討のために成果を Apache
+ グループと共有しようと思うのでなければ、suEXEC
+ コードは変えないことを 強く推奨します。
- $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$B4^$a$J$$(B$B$3$H$,(B
- Apache $B%0%k!<%W$G7hDj$5$l$F$$$^$9!#$3$l$O!"(BsuEXEC
- $B$N@_Dj$K$O4IM}\: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}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}\:Y$Jl9g$K8B$C$F$$$?$@$-$?$$$H9M$($F$$$^$9!#(B
+ 第 4 に、これが最後ですが、suEXEC を Apache
+ のデフォルトインストールには含めないことが
+ Apache グループで決定されています。これは、suEXEC
+ の設定には管理者の詳細にわたる慎重な注意が必要だからです。
+ suEXEC の様々な設定について検討が終われば、管理者は suEXEC
+ を通常のインストール方法でインストールすることができます。
+ これらの設定値は、suEXEC
+ 機能の使用中にシステムセキュリティを適切に保つために、
+ 管理者によって慎重に決定され指定されることが必要です。
+ この詳細な手順により、Apache グループは、suEXEC
+ のインストールについて、注意深く十分に検討してそれを使用することを
+ 決定した場合に限っていただきたいと考えています。
- $B$=$l$G$b?J$_$^$9$+(B? $B$h$m$7$$!#$G$O!"@h$X?J$_$^$7$g$&(B!
+ それでも進みますか? よろしい。では、先へ進みましょう!
- suEXEC $B%;%-%e%j%F%#%b%G%k(B
+ suEXEC セキュリティモデル
- suEXEC $B$N@_Dj$H%$%s%9%H!<%k$r;O$a$kA0$K!"(B
- $B$^$:Z$9$k$?$a$K7Y9p$5$l$k$3$H$r(B
- $B$h$/M}2r$7$F$*$$$?J}$,$h$$$G$7$g$&!#(B
+ suEXEC の設定とインストールを始める前に、
+ まず実装しようとしているセキュリティモデルについて論じておきます。
+ それには、suEXEC の内部で行なわれていること、
+ システムのセキュリティを保証するために警告されることを
+ よく理解しておいた方がよいでしょう。
- suEXEC $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%`$,$H%f!<%6(B ID $B$H%0%k!<%W(B
- ID $B$r;XDj$7$F(B suEXEC wrapper $B$rsuEXEC は、Apache web
+ サーバから呼び出される setuid された "wrapper"
+ プログラムが基本となっています。設計した CGI、または SSI
+ プログラムへの HTTP リクエストがあると、この wrapper
+ が呼び出されます。このようなリクエストがあると、Apache
+ はそのプログラムが実行される際のプログラム名とユーザ ID とグループ
+ ID を指定して suEXEC wrapper を実行します。
- $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
+ それから、wrapper は成功または失敗を決定するため
+ 以下の処理を行ないます。これらの状態のうち一つでも失敗した場合、
+ プログラムは失敗をログに記録してエラーで終了します。
+ そうでなければ、後の処理が続けられます。
-
wrapper
- $B$r
+ を実行しているユーザはこのシステムの正当なユーザか?
- $B$3$l$O!"(Bwrapper $B$rZ$9$k$?$a$G$9!#(B
+ これは、wrapper を実行しているユーザが
+ 本当にシステムの利用者であることを保証するためです。
-
- wrapper $B$,E,@Z$J?t$N0z?t$G8F$S=P$5$l$?$+(B?
+ wrapper が適切な数の引数で呼び出されたか?
- wrapper $B$OE,@Z$J?t$N0z?t$,M?$($i$l$?>l9g$K$N$_
-
- $B$3$N@5Ev$J%f!<%6$O(B wrapper
- $B$N
+ この正当なユーザは wrapper
+ の実行を許可されているか?
- $B$3$N%f!<%6$O(B wrapper $B
-
- $BBP>]$N(B CGI, SSI $B%W%m%0%i%`$,0BA4$G$J$$3,AX$N;2>H$r$7$F$$$k$+(B?
+ 対象の CGI, SSI プログラムが安全でない階層の参照をしているか?
- $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 --with-suexec-docroot=DIR
$B$r;2>H(B)
- $BFb$KB8:_$7$J$1$l$P$J$j$^$;$s!#(B
+ 対象の CGI, SSI プログラムが '/' から始まる、または
+ '..' による参照を行なっていますか? これらは許可されません。
+ 対象のプログラムは suEXEC のドキュメントルート
+ (下記の --with-suexec-docroot=DIR
を参照)
+ 内に存在しなければなりません。
-
- $BBP>]$H$J$k%f!<%6L>$O@5Ev$J$b$N$+(B?
+ 対象となるユーザ名は正当なものか?
- $BBP>]$H$J$k%f!<%6L>$OB8:_$7$F$$$^$9$+(B?
+ 対象となるユーザ名は存在していますか?
-
- $BBP>]$H$J$k%0%k!<%WL>$O@5Ev$J$b$N$+(B?
+ 対象となるグループ名は正当なものか?
- $BBP>]$H$J$k%0%k!<%WL>$OB8:_$7$F$$$^$9$+(B?
+ 対象となるグループ名は存在していますか?
-
- $BL\E*$N%f!<%6$O%9!<%Q!<%f!<%6$G$O(B$B$J$$(B$B$+(B?
+ 目的のユーザはスーパーユーザではないか?
- $B:#$N$H$3$m!"(BsuEXEC $B$O(B root
$B$K$h$k(B CGI/SSI
- $B%W%m%0%i%`$Nroot による CGI/SSI
+ プログラムの実行を許可していません。
-
- $BBP>]$H$J$k%f!<%6(B ID $B$O!":G>.$N(B ID
- $BHV9f$h$j$b(B$BBg$-$$(B$B$+(B?
+ 対象となるユーザ ID は、最小の ID
+ 番号よりも大きいか?
- $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%`.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" 用のアカウントを閉め出すのに有効です。
-
- $BBP>]$H$J$k%0%k!<%W$O%9!<%Q!<%f!<%6$N%0%k!<%W$G$O(B
- $B$J$$(B$B$+(B?
+ 対象となるグループはスーパーユーザのグループでは
+ ないか?
- $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
-
- $BBP>]$H$J$k%0%k!<%W(B ID $B$O:G>.$N(B ID
- $BHV9f$h$j$b(B$BBg$-$$(B$B$+(B?
+ 対象となるグループ ID は最小の ID
+ 番号よりも大きいか?
- $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%`.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" 用のグループを閉め出すのに有効です。
-
- wrapper $B$,@5>o$KBP>]$H$J$k%f!<%6$H%0%k!<%W$K$J$l$k$+(B?
+ wrapper が正常に対象となるユーザとグループになれるか?
- $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
+ の起動によりプログラムは対象となるユーザとグループになります。
+ グループアクセスリストは、
+ ユーザが属しているすべてのグループで初期化されます。
-
- CGI/SSI $B%W%m%0%i%`$,CV$+$l$F$$$k%G%#%l%/%H%j$K0\F0(B
- (change directory) $B$G$-$k$+(B?
+ CGI/SSI プログラムが置かれているディレクトリに移動
+ (change directory) できるか?
- $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
+ ディレクトリが存在しないなら、そのファイルも存在しないかもしれません。
+ ディレクトリに移動できないのであれば、おそらく存在もしないでしょう。
-
- $B%G%#%l%/%H%j$,(B Apache $B$N%I%-%e%a%s%H%D%j!ディレクトリが Apache のドキュメントツリー内にあるか?
- $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?
- (suEXEC $B@_Dj%*%W%7%g%s(B $B;2>H(B)
+ リクエストがサーバ内のものであれば、
+ 要求されたディレクトリが suEXEC のドキュメントルート配下にありますか?
+ リクエストが UserDir のものであれば、要求されたディレクトリが suEXEC
+ のユーザのドキュメントルート配下にありますか?
+ (suEXEC 設定オプション 参照)
-
- $B%G%#%l%/%H%j$rB>$N%f!<%6$,=q$-9~$a$k$h$&$K$J$C$F(B
- $B$$$J$$(B$B$+(B?
+ ディレクトリを他のユーザが書き込めるようになって
+ いないか?
- $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
+ ディレクトリを他ユーザに開放しないようにします。
+ 所有ユーザだけがこのディレクトリの内容を改変できるようにします。
-
- $BBP>]$H$J$k(B CGI/SSI $B%W%m%0%i%`$OB8:_$9$k$+(B?
+ 対象となる CGI/SSI プログラムは存在するか?
- $BB8:_$7$J$1$l$P
-
- $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$B$$$J$$(B$B$+(B?
+ 対象となる CGI/SSI プログラムファイルが他アカウントから
+ 書き込めるようになっていないか?
- $B=jM-
-
- $BBP>]$H$J$k(B CGI/SSI $B%W%m%0%i%`$,(B setuid $B$^$?$O(B setgid
- $B$5$l$F(B$B$$$J$$(B$B$+(B?
+ 対象となる CGI/SSI プログラムが setuid または setgid
+ されていないか?
- UID/GID $B$r:FEYJQ99$7$F$N%W%m%0%i%`
-
- $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?
+ 対象となるユーザ/グループがプログラムの
+ ユーザ/グループと同じか?
- $B%f!<%6$,$=$N%U%!%$%k$N=jM-
-
- $B0BA4$JF0:n$rJ]>Z$9$k$?$a$N4D6-JQ?t%/%j%"$,2DG=$+(B?
+ 安全な動作を保証するための環境変数クリアが可能か?
- 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 変数 (設定時に指定されます) を設定することで、
+ プロセスの環境変数をクリアします。
-
- $BBP>]$H$J$k(B CGI/SSI $B%W%m%0%i%`$r(B exec $B$7$F
+ 対象となる CGI/SSI プログラムを exec して実行できるか?
- $B$3$3$G(B suEXEC $B$,=*N;$7!"BP>]$H$J$k%W%m%0%i%`$,3+;O$5$l$^$9!#(B
+ ここで suEXEC が終了し、対象となるプログラムが開始されます。
- $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/$7$:$D3+H/$5$l$F$-$^$7$?!#(B
+ ここまでが suEXEC の wrapper
+ におけるセキュリティモデルの標準的な動作です。もう少し厳重に
+ CGI/SSI 設計についての新しい制限や規定を取り入れることもできますが、
+ suEXEC はセキュリティに注意して慎重に少しずつ開発されてきました。
- $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"$B$H$+$2$KCm0U(B"
- (Beware the Jabberwock) $B$N>O$r;2>H$7$F$/$@$5$$!#(B
+
このセキュリティモデルを用いて
+ サーバ設定時にどのように許すことを制限するか、また、suEXEC
+ を適切に設定するとどのようなセキュリティ上の危険を避けられるかに
+ 関するより詳しい情報については、"とかげに注意"
+ (Beware the Jabberwock) の章を参照してください。
suEXEC
- $B$N@_Dj$H%$%s%9%H!<%k(B
+ の設定とインストール
- $B$3$3$+$i3Z$7$/$J$j$^$9!#(B
+ ここから楽しくなります。
suEXEC
- $B@_Dj%*%W%7%g%s(B
+ 設定オプション
--enable-suexec
- - $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
--enable-suexec
- $B%*%W%7%g%s$K$"$o$;$F>/$J$/$H$b0l$D$O(B --with-suexec-xxxxx
- $B%*%W%7%g%s$,;XDj$5$l$J$1$l$P$J$j$^$;$s!#(B
+ - このオプションは、デフォルトではインストールされず、
+ 有効にはならない suEXEC 機能を有効にします。
+ suEXEC を使うように APACI に要求するには、
--enable-suexec
+ オプションにあわせて少なくとも一つは --with-suexec-xxxxx
+ オプションが指定されなければなりません。
--with-suexec-bin=PATH
- - $B%;%-%e%j%F%#>e$NM}M3$K$h$j!"(B
suexec
$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$BNc$($P(B$B!"(B
- --with-suexec-bin=/usr/sbin/suexec
$B$N$h$&$K!#(B
+ - セキュリティ上の理由により、
suexec
バイナリのパスはサーバに
+ ハードコードされている必要があります。デフォルトのパスを
+ 変えたいときはこのオプションを使ってください。例えば、
+ --with-suexec-bin=/usr/sbin/suexec
のように。
--with-suexec-caller=UID
- - Apache $B$rDL>oF0:n$5$;$k(B$B%f!<%6L>(B$B$r;XDj$7$^$9!#(B
- $B$3$N%f!<%6$@$1$,(B suexec $B$N
+
- Apache を通常動作させるユーザ名を指定します。
+ このユーザだけが suexec の実行を許可されたユーザになります。
--with-suexec-userdir=DIR
- - 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<$NA4l9g(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
+
- suEXEC がアクセスを許されるユーザホームディレクトリ配下の
+ サブディレクトリを指定します。
+ このディレクトリ以下の全実行ファイルは、"安全な"プログラムになるよう、
+ suEXEC がそのユーザとして実行できるようにします。
+ "単純な" UserDir ディレクティブを使っている場合
+ (すなわち "*" を含まないもの)、これと同じ値を設定すべきです。
+ Userdir ディレクティブがそのユーザのパスワードファイル内の
+ ホームディレクトリと同じ場所を指していなければ、
+ suEXEC は適切に動作しません。デフォルトは "public_html" です。
- $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
- $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
+ 各 UserDir が異なった仮想ホストを設定している場合、
+ それらを全て一つの親ディレクトリに含めて、
+ その親ディレクトリの名前をここで指定する必要があります。
+ このように指定されなければ "~userdir" cgi
+ へのリクエストが動作しません。
--with-suexec-docroot=DIR
- - 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
--datedir
$B$K(B "/htdocs"
- $B$H$$$&%5%U%#%C%/%9$r$D$1$?$b$N$G$9!#(B
- "--datadir=/home/apache
" $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
+ - Apache のドキュメントルートを設定します。これが suEXEC
+ の動作で使用する唯一のディレクトリ階層になります (UserDir
+ の指定は別)。デフォルトでは
--datedir
に "/htdocs"
+ というサフィックスをつけたものです。
+ "--datadir=/home/apache
" として設定すると、
+ suEXEC wrapper にとって "/home/apache/htdocs"
+ がドキュメントルートとして使われます。
--with-suexec-uidmin=UID
- - 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
+ - suEXEC の対象ユーザとして許される UID の最小値を指定します。
+ 大抵のシステムでは 500 か 100 が一般的です。
+ デフォルト値は 100 です。
--with-suexec-gidmin=GID
- - 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
+ - suEXEC の対象グループとして許される GID
+ の最小値を指定します。大抵のシステムでは 100 が一般的なので、
+ デフォルト値としても 100 が使われています。
--with-suexec-logfile=FILE
- - 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 (
--logfiledir
) $B$KCV$+$l$^$9!#(B
+ - suEXEC の処理とエラーが記録されるファイル名を指定します。
+ (監査やデバッグ目的に有用)
+ デフォルトではログファイルは "suexec_log" という名前で、
+ 標準のログファイルディレクトリ (
--logfiledir
) に置かれます。
--with-suexec-safepath=PATH
- - CGI $BCGI 実行ファイルに渡される安全な PATH 環境変数です。
+ デフォルト値は "/usr/local/bin:/usr/bin:/bin" です。
suEXEC wrapper
- $B$N%3%s%Q%$%k$H%$%s%9%H!<%k(B
- --enable-suexec
$B%*%W%7%g%s$G(B suEXEC $B5!G=$rM-8z$K$9$k$H!"(B
- "make" $B%3%^%s%I$rsuexec $B$N%P%$%J%j(B (Apache $B<+BN$b(B)
- $B$,<+F0E*$K:n@.$5$l$^$9!#(B
+ のコンパイルとインストール
+ --enable-suexec
オプションで suEXEC 機能を有効にすると、
+ "make" コマンドを実行した時に suexec
のバイナリ (Apache 自体も)
+ が自動的に作成されます。
- $B$9$Y$F$N9=@.MWAG$,:n@.$5$l$k$H!"$=$l$i$N%$%s%9%H!<%k$K$O(B
- make install
$B%3%^%s%I$,suexec
- $B$O(B --sbindir
$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
- $B%$%s%9%H!<%k;~$K$O(B root
- $B8"8B$,I,MW$J$N$GCm0U$7$F$/$@$5$$!#(Bwrapper $B$,%f!<%6(B ID
- $B$r@_Dj$9$k$?$a$K!"=jM-root
- $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
+ すべての構成要素が作成されると、それらのインストールには
+ make install
コマンドが実行できます。バイナリイメージの suexec
+ は --sbindir
オプションで指定されたディレクトリにインストールされます。
+ デフォルトの場所は "/usr/local/apache/sbin/suexec" です。
+ インストール時には root
+ 権限が必要なので注意してください。wrapper がユーザ ID
+ を設定するために、所有者 root
+ でのセットユーザ ID
+ ビットをそのファイルのモードに設定しなければなりません。
- $B0BA4$J%Q!<%_%C%7%g%s$r@_Dj$9$k(B
- suEXEC $B%i%C%Q!<$O!"(B--with-suexec-caller
configure
- $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
+ 安全なパーミッションを設定する
+ suEXEC ラッパーは、--with-suexec-caller
configure
+ オプションで指定した正しいユーザで起動されていることを確認しますが、
+ システム上でこのチェックが行なわれる前に、
+ suEXEC が呼ぶシステムやライブラリが脆弱である可能性は残ります。対抗策として、
+ 一般に良い習慣ともされいますが、
+ ファイルシステムパーミッションを使って
+ Apache の実行時のグループのみが suEXEC を実行できるように
+ するのが良いでしょう。
- $B$?$H$($P!"
+
たとえば、次のようにサーバが設定されていたとします。
User www
Group webgroup
- suexec $B$,(B "/usr/local/apache2/sbin/suexec"
- $B$K%$%s%9%H!<%k$5$l$F$$$?>l9g!"
+
suexec が "/usr/local/apache2/sbin/suexec"
+ にインストールされていた場合、次のように設定する必要があります。
chgrp webgroup /usr/local/apache2/bin/suexec
chmod 4750 /usr/local/apache2/bin/suexec
- $B$3$l$G(B Apache $B$,Z$7$^$9!#(B
+ これで Apache が実行されるグループのみが
+ suEXEC ラッパーを実行できるということを
+ 確証します。
suEXEC
- $B$NM-8z2=$HL58z2=(B
+ の有効化と無効化
- $B5/F0;~$K!"(BApache $B$O(B --sbindir
- $B%*%W%7%g%s$G@_Dj$5$l$?%G%#%l%/%H%j$G(B
- suexec
$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
+ 起動時に、Apache は --sbindir
+ オプションで設定されたディレクトリで
+ suexec
を探します
+ (デフォルトは "/usr/local/apache/sbin/suexec") 。
+ 適切に設定された suEXEC がみつかると、
+ エラーログに以下のメッセージが出力されます。
[notice] suEXEC mechanism enabled (wrapper: /path/to/suexec)
- $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
- setuid root $B$H$7$F%$%s%9%H!<%k$5$l$F$$$J$$$+$G$9!#(B
+ サーバ起動時にこのメッセージが出ない場合、
+ 大抵はサーバが想定した場所で wrapper プログラムが見つからなかったか、
+ setuid root としてインストールされていないかです。
- 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
- suEXEC $B$rL58z$K$9$k>l9g$O!"(Bsuexec
$B%U%!%$%k$r:o=|$7$F$+$i(B
- Apache $B$r(B kill $B$7$F:F5/F0$7$^$9!#(B
+
suEXEC の仕組みを使用するのが初めてで、Apache が既に動作中であれば、
+ Apache を kill して、再起動しなければなりません。HUP シグナルや
+ USR1 シグナルによる単純な再起動では不十分です。
+ suEXEC を無効にする場合は、suexec
ファイルを削除してから
+ Apache を kill して再起動します。
- suEXEC $B$N;HMQ(B
+ suEXEC の使用
- CGI $B%W%m%0%i%`$X$N%j%/%(%9%H$,(B suEXEC $B%i%C%Q!<$r8F$V$N$O!"(B
- SuexecUserGroup $B%G%#%l%/%F%#%V$r(B
- $B4^$`%P!<%A%c%k%[%9%H$X$N%j%/%(%9%H$+!"(Bmod_userdir $B$K$h$j(B
- $B=hM}$5$l$?%j%/%(%9%H$N>l9g$K8B$j$^$9!#(B
+ CGI プログラムへのリクエストが suEXEC ラッパーを呼ぶのは、
+ SuexecUserGroup ディレクティブを
+ 含むバーチャルホストへのリクエストか、mod_userdir により
+ 処理されたリクエストの場合に限ります。
- $B2>A[%[%9%H(B:
- suEXEC wrapper $B$N;H$$J}$H$7$F!"(B
- VirtualHost $B@_Dj$G$N(B
+
仮想ホスト:
+ suEXEC wrapper の使い方として、
+ VirtualHost 設定での
SuexecUserGroup
- $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 リソースへのすべてのリクエストは、その
VirtualHost $B$G;XDj$5$l$?(B User $B$H(B
- Group $B$H$7$FVirtualHost で指定された User と
+ Group として実行されます。VirtualHost
- $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
+ でこのディレクティブが指定されていない場合、
+ メインサーバのユーザ ID が想定されます。
- $B%f!<%6%G%#%l%/%H%j(B:
- mod_userdir $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
- $Be5-$N(B$B%;%-%e%j%F%#8!::(B$B$r%Q%9$G$-$k$3$H$G$9!#(B
- $B%3%s%Q%$%k(B
- $B;~$N%*%W%7%g%s(B --with-suexec-userdir
$B$b;2>H$7$F$/$@$5$$!#(B
+ ユーザディレクトリ:
+ mod_userdir により処理されたリクエストは
+ リクエストされたユーザディレクトリのユーザ ID で CGI プログラムを
+ 実行するために suEXEC ラッパーを呼びます。
+ この機能を動作させるために必要なことは、CGI
+ をそのユーザで実行できること、そのスクリプトが上記のセキュリティ検査をパスできることです。
+ コンパイル
+ 時のオプション --with-suexec-userdir
も参照してください。
- suEXEC $B$N%G%P%C%0(B
+ suEXEC のデバッグ
- suEXEC wrapper $B$O!">e5-$G=R$Y$?(B --with-suexec-logfile
- $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
+ suEXEC wrapper は、上記で述べた --with-suexec-logfile
+ オプションで指定されたファイルにログ情報を記録します。
+ wrapper を適切に設定、インストールできていると思う場合、
+ どこで迷っているか見ようとするならこのログとサーバの
+ エラーログを見るとよいでしょう。
- $B$H$+$2$KCm0U(B: $B7Y9p$H;vNc(B
+ とかげに注意: 警告と事例
- $BCm0U(B!
- $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
- $B%*%s%i%$%s%I%-%e%a%s%H(B$BHG$r;2>H$7$F$/$@$5$$!#(B
+
注意!
+ この章は完全ではありません。この章の最新改訂版については、
+ Apache グループの
+ オンラインドキュメント版を参照してください。
- $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
+ サーバの設定に制限をもうける wrapper について、
+ いくつか興味深い点があります。suEXEC に関する "バグ"
+ を報告する前にこれらを確認してください。
- - suEXEC $B$N6=L#?<$$E@(B
+ - suEXEC の興味深い点
- - $B3,AX9=B$$N@)8B(B
+
- 階層構造の制限
- $B%;%-%e%j%F%#$H8zN($NM}M3$+$i!"(BsuEXEC
$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)
+ セキュリティと効率の理由から、suEXEC
の全てのリクエストは
+ 仮想ホストへのリクエストにおける最上位のドキュメントルート内か、
+ ユーザディレクトリへのリクエストにおける個々のユーザの最上位の
+ ドキュメントルート内に残らなければなりません。
+ 例えば、四つの仮想ホストを設定している場合、
+ 仮想ホストの suEXEC に有利なように、メインの Apache
+ ドキュメント階層の外側に全ての仮想ホストのドキュメントルートを
+ 構築する必要があります。(例は後日記載)
- - suEXEC $B$N(B PATH $B4D6-JQ?t(B
+
- suEXEC の PATH 環境変数
- $B$3$l$rJQ99$9$k$N$O4m81$G$9!#$3$N;XDj$K4^$^$l$k3F%Q%9$,(B
- $B?.Mj$G$-$k(B
- $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信頼できる
+ ディレクトリであることを確認してください。
+ 世界からのアクセスにより、誰かがホスト上でトロイの木馬
+ を実行できるようにはしたくないでしょう。
- - suEXEC $B%3!<%I$N2~B$(B
+
- suEXEC コードの改造
- $B7+$jJV$7$^$9$,!"2?$r$d$m$&$H$7$F$$$k$+GD0.$;$:$K$3$l$r$d$k$H(B
- $BBg$-$JLdBj(B$B$r0z$-5/$3$7$+$M$^$;$s!#(B
- $B2DG=$J8B$jHr$1$F$/$@$5$$!#(B
+ 繰り返しますが、何をやろうとしているか把握せずにこれをやると
+ 大きな問題を引き起こしかねません。
+ 可能な限り避けてください。
diff --git a/docs/manual/urlmapping.xml.ja b/docs/manual/urlmapping.xml.ja
index 3a4be320c3..658dc153e6 100644
--- a/docs/manual/urlmapping.xml.ja
+++ b/docs/manual/urlmapping.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -22,14 +22,14 @@
- URL $B$+$i%U%!%$%k%7%9%F%`>e$N0LCV$X$N%^%C%W(B
+ URL からファイルシステム上の位置へのマップ
- $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
+ この文書は Apache がリクエストの URL から送信するファイルの
+ ファイルシステム上の位置を決定する方法を説明します。
-
diff --git a/docs/manual/vhosts/examples.xml.ja b/docs/manual/vhosts/examples.xml.ja
index c1bcbd5411..7d90937961 100644
--- a/docs/manual/vhosts/examples.xml.ja
+++ b/docs/manual/vhosts/examples.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -21,41 +21,41 @@
-->
-$B%P!<%A%c%k%[%9%H(B
- $B%P!<%A%c%k%[%9%H$NNc(B
+バーチャルホスト
+ バーチャルホストの例
- $B$3$NJ8=q$O!"%P!<%A%c%k%[%9%H$N@_Dj$N:]$K(B
- $B$h$/$"$k]$O(B $BL>A0%Y!<%9(B $B$d(B IP $B%Y!<%9(B $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
+ この文書は、バーチャルホストの設定の際に
+ よくある質問に答えるものです。想定している対象は 名前ベース や IP ベース のバーチャルホストを使って
+ 一つのサーバで複数のウェブサイトを運用している状況です。
- $B0l$D$N(B IP $B%"%I%l%9$G$$$/$D$+$NL>A0%Y!<%9$N(B
- $B%&%'%V%5%$%H$r
+ 一つの IP アドレスでいくつかの名前ベースの
+ ウェブサイトを実行する
- $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
- www.example.com
$B$H(B www.example.org
- $B$N$?$a$N%&%'%V%5!<%P$r
+ サーバは IP アドレスを一つ割り当てられていて、DNS でマシンに
+ 複数の名前 (CNAME) が指定されています。このマシンで
+ www.example.com
と www.example.org
+ のためのウェブサーバを実行させたいとします。
- $BCm(B
- 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$B$J$j$^$;$s(B$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 hosts
$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
+ 注
+ Apache サーバの設定でバーチャルホストの設定をしただけで、
+ 知らない間にそのホスト名に対応する DNS のエントリが
+ 作成されたりはしません。そのサーバの IP アドレスに解決される
+ ように DNS に名前を登録しなければなりません。
+ そうでないと誰もあなたのウェブサイトを見ることはできません。
+ ローカルでのテストのために hosts
ファイルに
+ エントリを追加することもできますが、この場合はその
+ hosts エントリのあるマシンからしか動作しません。
- $B%5!<%P@_Dj(B
+ サーバ設定
# Ensure that Apache listens on port 80
Listen 80
@@ -84,18 +84,18 @@
</VirtualHost>
- $B%"%9%?%j%9%/$O$9$Y$F$N%"%I%l%9$K%^%C%A$7$^$9$N$G!"www.example.com $B$O(B
- $B:G=i$K$"$k$?$a!"M%@h=g0L$O0lHV9b$/$J$j!"(Bdefault $B$b$7$/$O(B
- primary $B$N%5!<%P$H9M$($k$3$H$,$G$-$^$9!#$D$^$j!"%j%/%(%9%H$,(B
- $B$I$N(B ServerName
$B%G%#%l%/%F%#%V$K$b%^%C%A$7$J$$>l9g!"(B
- $B0lHV:G=i$N(B VirtualHost
$B$K$h$j07$o$l$^$9!#(B
+ アスタリスクはすべてのアドレスにマッチしますので、主サーバは
+ リクエストを扱いません。www.example.com
は
+ 最初にあるため、優先順位は一番高くなり、default もしくは
+ primary のサーバと考えることができます。つまり、リクエストが
+ どの ServerName
ディレクティブにもマッチしない場合、
+ 一番最初の VirtualHost
により扱われます。
- $BCm(B
+ 注
- *
$B$r%7%9%F%`$Nl9g$O(B VirtualHost
$B$N0z?t$O(B
- NameVirtualHost
$B$N0z?t$HF1$8$K(B$B$7$J$1$l$P$J$j$^$;$s(B
+ *
をシステムの実際の IP アドレスに置き換える
+ こともできます。その場合は VirtualHost
の引数は
+ NameVirtualHost
の引数と同じにしなければなりません
:
@@ -105,37 +105,37 @@
# etc ...
- $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$rl9g$J$I!=!=$K$*$$$F$O!"(B*
- $B;XDj$O$5$i$KJXMx$G$9!#(B*
$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
+ しかし、IP アドレスが予測不可能なシステム
+ ――例えばプロバイダから動的に IP アドレスを取得して何らかの
+ ダイナミック DNS を使っている場合など――においては、*
+ 指定はさらに便利です。*
はすべての IP アドレスに
+ マッチしますので、この設定にしておけば IP アドレスが変更されても
+ 設定変更せずに動作します。
- $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
+ 名前ベースのバーチャルホスティングではほぼすべての状況で、
+ 上記の設定で希望の設定になっていることでしょう。
+ 実際この設定が動作しないのは、IP アドレスやポートの違いによって
+ 違うコンテンツを送るときだけです。
- $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
+ 複数の IP アドレスのあるホストで名前ベースの
+ ホスティングを行なう
- $BCm(B$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
+ 注ここで説明されている方法は IP アドレスが
+ 何個あっても同様にできます。
- $B%5!<%P$K$OFs$D(B IP $B%"%I%l%9$,$D$$$F$$$^$9!#0l$DL\(B
- (172.20.30.40
) $B$G$Oserver.domain.com $B$r07$$!"$b$&0lJ}(B
- (172.20.30.50
) $B$G$OFs$D$+$=$l0J>e$N?t$N(B
- $B%P!<%A%c%k%[%9%H$r07$$$^$9!#(B
+ サーバには二つ IP アドレスがついています。一つ目
+ (172.20.30.40
) では主サーバ
+ server.domain.com
を扱い、もう一方
+ (172.20.30.50
) では二つかそれ以上の数の
+ バーチャルホストを扱います。
- $B%5!<%P$N@_Dj(B
+ サーバの設定
Listen 80
@@ -167,29 +167,29 @@
</VirtualHost>
- 172.20.30.50
$B0J30$N%"%I%l%9$X$N%j%/%(%9%H$O172.20.30.50 $B$X$N!"L$CN$N%[%9%HL>$^$?$O(B
- Host:
$B%X%C%@$J$7$N%j%/%(%9%H$O(B www.example.com
- $B$,07$$$^$9!#(B
+ 172.20.30.50
以外のアドレスへのリクエストは主サーバ
+ が扱います。172.20.30.50
への、未知のホスト名または
+ Host:
ヘッダなしのリクエストは www.example.com
+ が扱います。
-
diff --git a/docs/manual/vhosts/fd-limits.xml.ja b/docs/manual/vhosts/fd-limits.xml.ja
index 2316905549..b8f29feec8 100644
--- a/docs/manual/vhosts/fd-limits.xml.ja
+++ b/docs/manual/vhosts/fd-limits.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -21,52 +21,52 @@
-->
-$B%P!<%A%c%k%[%9%H(B
- $B%U%!%$%k5-=R;R$N8B3&(B
+バーチャルホスト
+ ファイル記述子の限界
- $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 ($B%U%!%$%k%O%s%I%k(B$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
+ たくさんのバーチャルホストを運用する場合、もし、
+ 各バーチャルホストごとに異なるログファイルが指定してあると、
+ Apache がファイル記述子 (ファイルハンドルとも呼ばれます)
+ を使い切ってしまうことがあります。Apache が使用するファイル
+ 記述子の数は、各エラーログファイルにつき 1 つ、他のログファイルの
+ ディレクティブにつき 1 つ、さらに内部で使用する 10 から 20、
+ の合計になります。Unix オペレーティングシステムではプロセスごとに
+ 使用可能なファイル記述子の数を制限しています。たいていの場合は 64 で、
+ 普通は大きな値のハードリミットまで増やすことができます。
- 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
+ Apache は必要に応じて上限を拡大しようと試みますが、
+ 以下のような場合にはうまくいかないかもしれません。
- - $BMxMQ$7$F$$$k%7%9%F%`$G(B
setrlimit()
- $B%7%9%F%`%3!<%k$,Ds6!$5$l$F$$$J$$!#(B
+ - 利用しているシステムで
setrlimit()
+ システムコールが提供されていない。
- - $B%7%9%F%`>e$G(B
setrlimit
(RLIMIT_NOFILE) $B$,F0:n$7$J$$(B
- ($B$?$H$($P(B Solaris 2.3 $B$N$h$&$K(B)$B!#(B
+ - システム上で
setrlimit
(RLIMIT_NOFILE) が動作しない
+ (たとえば Solaris 2.3 のように)。
- - $BMW5a$5$l$k%U%!%$%k5-=R;R$N?t$,(B
- $B%O!<%I%j%_%C%H$rD6$($F$7$^$&!#(B
+ - 要求されるファイル記述子の数が
+ ハードリミットを超えてしまう。
- - $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
+ - システムにファイル記述子に関して別の制限が存在してしまっている。
+ たとえば、stdio ストリームではファイル記述子を 256 以上使えない
+ (Solaris 2)、など。
- $BLdBj$,H/@8$7$?;~$K
+ 問題が発生した時に取り得る対処方法は次のとおり:
- - $B%m%0%U%!%$%k$N?t$r8:$i$9!#(Bログファイルの数を減らす。VirtualHost
- $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$B%m%0%U%!%$%k$NJ,3d(B$B$rFI$s$G$/$@$5$$!#(B)
+ セクションでログファイルを指定せず、メインのログファイルにのみ記録する。
+ (これに関する詳しい情報は以下のログファイルの分割を読んでください。)
-
- $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
#!/bin/sh
@@ -77,44 +77,44 @@
-$B%m%0%U%!%$%k$NJ,3d(B
+ログファイルの分割
-$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
+複数のバーチャルホストのログを同じログファイルに収集しようとしているときには、
+各バーチャルホストについて統計的な解析を実行するために後でログファイルを
+分割したくなるかもしれません。これは以下のようにして実現できます。
-$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 LogFormat
-$B%G%#%l%/%F%#%V$N(B %v
$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:
+まず、バーチャルホストの情報をログのエントリに追加する必要があります。
+これは LogFormat
+ディレクティブの %v
変数を使うことでできます。
+これをログのフォーマット文字列の先頭に追加します:
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost
CustomLog logs/multiple_vhost_log vhost
-$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
+
これは common log format のログを作成しますが、それぞれの行の先頭に
+正規化されたバーチャルホストの名前
(ServerName
-$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 Custom Log Formats $B$r(B
-$BFI$s$G$/$@$5$$!#(B)
+ディレクティブに書かれているもの) が付加されます。
+(ログファイルのカスタマイズの詳細については Custom Log Formats を
+読んでください。)
-$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
+
ログファイルを各部分 (バーチャルホスト毎に 1 ファイル) に分けたいときは、
split-logfile
-$B$r;H$C$F9T$J$&$3$H$,$G$-$^$9!#%W%m%0%i%`$O(B Apache $BG[I[$N(B
-support
$B%G%#%l%/%H%j$K$"$j$^$9!#(B
+を使って行なうことができます。プログラムは Apache 配布の
+support
ディレクトリにあります。
-$B0J2<$N$h$&$J%3%^%s%I$G$3$N%W%m%0%i%`$r
+以下のようなコマンドでこのプログラムを実行します:
split-logfile < /logs/multiple_vhost_log
-$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$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 $B%[%9%HL>(B.log
$B$H$$$&L>A0$K$J$j$^$9!#(B
+このプログラムはバーチャルホストのログファイルの名前とともに実行され、
+ログファイルに現れるそれぞれのバーチャルホスト毎に一つのファイルを作成します。
+それぞれのファイルは ホスト名.log
という名前になります。
diff --git a/docs/manual/vhosts/index.xml.ja b/docs/manual/vhosts/index.xml.ja
index 6fb2b53bd3..9d1d84fd58 100644
--- a/docs/manual/vhosts/index.xml.ja
+++ b/docs/manual/vhosts/index.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -23,55 +23,55 @@
- Apache $B%P!<%A%c%k%[%9%H@bL@=q(B
+ Apache バーチャルホスト説明書
- $B%P!<%A%c%k%[%9%H(B$B$H$$$&MQ8l$O!"(B1 $BBf$N%^%7%s>e$G(B
- (www.company1.com
and www.company2.com
$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(BIP $B%Y!<%9(B$B!W$H!"$=$l$>$l$N(B IP $B%"%I%l%9$K(B
- $BJ#?t$NL>A0$,$"$k!V(B$BL>A0%Y!<%9(B$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
+ バーチャルホストという用語は、1 台のマシン上で
+ (www.company1.com
and www.company2.com
のような)
+ 二つ以上のウェブサイトを扱う運用方法のことを指します。
+ バーチャルホストには、各ウェブサイトに違う IP アドレスがある
+ 「IP ベース」と、それぞれの IP アドレスに
+ 複数の名前がある「名前ベース」とがあります。
+ 複数のサイトが物理的に同じサーバで扱われている、ということはエンドユーザには
+ 明らかではありません。
- Apache $B$O!"FC$KuBV$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$B%[%9%H%Y!<%9(B$B$"$k$$$O(B
- $BHs(B IP $B%Y!<%9(B$B$N%P!<%A%c%k%[%9%H$H8F$P$l$k$3$H$b$"$j$^$9!#(B
+ Apache は、特に手を入れない状態で IP ベースのバーチャルホスト
+ をサポートした最初のサーバの一つです。バージョン 1.1 以降の Apache
+ では、IP ベースとネームベースのバーチャルホストの両方をサポート
+ しています。ネームベースのバーチャルホストは、ホストベースあるいは
+ 非 IP ベースのバーチャルホストと呼ばれることもあります。
- $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
+ 以下のページでは、Apache バージョン 1.3
+ 以降でのバーチャルホストのサポートについての詳細を説明します。
mod_vhost_alias
-$B%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H(B
-IP $B%Y!<%9$N%P!<%A%c%k%[%9%H(B
-$B%P!<%A%c%k%[%9%H$N0lHLE*$J@_DjNc(B
-$B%U%!%$%k5-=R;R$N8B3&(B
-$BBgNL$N%P!<%A%c%k%[%9%H$N@_Dj(B
-$B%P!<%A%c%k%[%9%H$N%^%C%A%s%0$K$D$$$F$N>\:Y(B
+ネームベースのバーチャルホスト
+IP ベースのバーチャルホスト
+バーチャルホストの一般的な設定例
+ファイル記述子の限界
+大量のバーチャルホストの設定
+バーチャルホストのマッチングについての詳細
-$B%P!<%A%c%k%[%9%H$N%5%]!<%H(B
+
-$B@_Dj%G%#%l%/%F%#%V(B
+設定ディレクティブ
- $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 -S
$B$,JXMx$G$9!#(B
- $B$D$^$j!"0J2<$N%3%^%s%I$rF~NO$7$^$9(B:
+ バーチャルホストの設定のデバッグをするには
+ Apache のコマンドラインスイッチ -S
が便利です。
+ つまり、以下のコマンドを入力します:
/usr/local/apache2/bin/httpd -S
- $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 httpd
- $B%W%m%0%i%`$N@bL@J8=q$r8+$F$/$@$5$$(B)
+ このコマンドは Apache が設定ファイルをどう解析したかについて出力します。
+ IP アドレスとサーバ名を注意深く調べれば、
+ 設定の間違いを見つける助けになるでしょう。
+ (他のコマンドラインのオプションは httpd
+ プログラムの説明文書を見てください)
diff --git a/docs/manual/vhosts/ip-based.xml.ja b/docs/manual/vhosts/ip-based.xml.ja
index 10c462220d..f279bc7fcf 100644
--- a/docs/manual/vhosts/ip-based.xml.ja
+++ b/docs/manual/vhosts/ip-based.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -21,96 +21,96 @@
-->
-$B%P!<%A%c%k%[%9%H(B
- Apache $B$N(B IP $B%Y!<%9$N%P!<%A%c%k%[%9%H%5%]!<%H(B
+バーチャルホスト
+ Apache の IP ベースのバーチャルホストサポート
-$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H%5%]!<%H(B
+名前ベースのバーチャルホストサポート
-$B%7%9%F%`MW7o(B
+システム要件
- IP $B%Y!<%9(B $B$H$$$&L>A0$,<($9$h$&$K!"%5!<%P$K$O(B
- 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$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
+ IP ベース という名前が示すように、サーバには
+ IP ベースのバーチャルホストそれぞれにつき、別々の IP アドレスが
+ 必要です。複数の物理コネクションを持っているマシンを用意するか、
+ 最近のオペレーティングシステムでサポートされているバーチャル
+ インタフェース (詳細はシステムの説明書を読んでください。たいていは
+ "ip エイリアス" と呼ばれていて、設定には普通 "ifconfig" コマンドを
+ 使います) を使うかで実現できます。
-Apache $B$N@_DjJ}K!(B
+Apache の設定方法
- $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 httpd $B%G!<%b%s$r3F%[%9%HKh$K
+ 複数のホストをサポートするように Apache を設定する方法は
+ 二通りあります。別の httpd デーモンを各ホスト毎に実行するか、
+ すべてのバーチャルホストをサポートするデーモンを一つ実行するかです。
- $B0J2<$N$H$-$K$OJ#?t$N%G!<%b%s$r;H$&$HNI$$$G$7$g$&(B:
+ 以下のときには複数のデーモンを使うと良いでしょう:
- - $B2ql9g!"$=$l$>$l(B
+
- 会社1 はウェブ経由以外では会社2 からはデータを読まれたくない、
+ といったセキュリティの分離の問題があるとき。この場合、それぞれ
User, Group, Listen, ServerRoot $B$N@_Dj$,0c$&Fs$D$N%G!<%b%s$r(B
- $B
+ module="core">ServerRoot の設定が違う二つのデーモンを
+ 実行する必要があります。
- - $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$-!#(BListen $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 httpd $B$,(B N-1 $B8D$N%"%I%l%9$r(B listen $B$7!"(B
- $BJL$N(B httpd $B$,;D$j$N%"%I%l%9$r(B listen $B$9$k$H$$$C$?$3$H$O2DG=$G$9!#(B)
+ - マシンのすべての IP エイリアスを listen するだけの
+ メモリとファイル記述子の余裕があるとき。Listen は「ワイルドカード」
+ アドレスか、特定のアドレスのみを listen することができます。
+ ですから、何らかの理由で特定のアドレスを listen しなけばならない
+ ときは、その特定のアドレスをすべて listen する必要があります。
+ (ただし、一つの httpd が N-1 個のアドレスを listen し、
+ 別の httpd が残りのアドレスを listen するといったことは可能です。)
- $B0J2<$N$H$-$K$OC1FH$N%G!<%b%s$r;H$&$HNI$$$G$7$g$&(B:
+ 以下のときには単独のデーモンを使うと良いでしょう:
- - $B%P!<%A%c%k%[%9%H4V$G$N(B httpd $B$N@_Dj$r6&M-$7$F$b$h$$$H$-!#(B
+ - バーチャルホスト間での httpd の設定を共有してもよいとき。
- - $B%^%7%s$,B?$/$N%j%/%(%9%H$r07$&$?$a!"JL%G!<%b%s$r
+
- マシンが多くのリクエストを扱うため、別デーモンを実行することによる
+ 性能の低下の影響が著しいとき。
-$BJ#?t%G!<%b%s$N@_Dj(B
+複数デーモンの設定
- $B3F%P!<%A%c%k%[%9%H$KBP$7$FJL$N(B httpd $B$N%$%s%9%H!<%k$r9T$J$$$^$9!#(B
- $B@_Dj%U%!%$%kCf$N(B Listen
- $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
+ 各バーチャルホストに対して別の httpd のインストールを行ないます。
+ 設定ファイル中の Listen
+ ディレクティブを使って、
+ 各インストールでデーモンが扱う IP アドレス (バーチャルホスト)
+ を選択します。例えば
Listen www.smallco.com:80
- $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
- (DNS $B$NCm0U;v9`(B $B;2>H(B)$B!#(B
+ ここで、ホスト名の代わりに IP アドレスを使う方が推奨されていることに
+ 注意しておいてください
+ (DNS の注意事項 参照)。
-$BJ#?t$N%P!<%A%c%k%[%9%H$N@_Dj$r$7$?(B
-$B%G!<%b%s$r0l$D@_Dj$9$k(B
+複数のバーチャルホストの設定をした
+デーモンを一つ設定する
- $B$3$N>l9g$O!"0l$D$N(B httpd $B$,VirtualHost $B%G%#%l%/%F%#%V$r;H$C$F!"(B
+ この場合は、一つの httpd が主サーバとすべてのバーチャルホストのリクエストを
+ 処理します。設定ファイルの VirtualHost ディレクティブを使って、
ServerAdmin, ServerName, DocumentRoot, ErrorLog, TransferLog
- $B$d(B CustomLog
- $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
+ や CustomLog
+ 設定ディレクティブの値が各ホスト毎に異なる値に設定されるようにします。
+ 例えば
<VirtualHost www.smallco.com>
@@ -130,29 +130,29 @@
</VirtualHost>
- $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
- (DNS $B$NCm0U;v9`(B $B;2>H(B)$B!#(B
+ ここで、ホスト名の代わりに IP アドレスを使う方が推奨されていることに
+ 注意しておいてください
+ (DNS の注意事項 参照)。
- $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$B$9$Y$F(B$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 $B%G%#%l%/%F%#%V:w0z(B$B$r;H$C$F(B$B%3%s%F%-%9%H(B$B$N(B
- $BMs$rD4$Y$F$/$@$5$$!#(B
+ プロセス生成を制御するディレクティブやその他のいくつかのディレクティブを
+ 除いて、ほぼすべての設定ディレクティブを VirtualHost
+ ディレクティブの中に書くことができます。ディレクティブが VirtualHost
+ ディレクティブで使用できるかどうかは ディレクティブ索引を使ってコンテキストの
+ 欄を調べてください。
- suEXEC$B%i%C%Q!<(B$B$r;H$C$F$$$k>l9g$O!"(B
+
suEXECラッパーを使っている場合は、
SuexecUserGroup
- $B%G%#%l%/%F%#%V$r(B VirtualHost
- $B%G%#%l%/%F%#%V$NCf$G;HMQ$9$k$3$H$,$G$-$^$9!#(B
+ ディレクティブを VirtualHost
+ ディレクティブの中で使用することができます。
- $B%;%-%e%j%F%#(B: $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$B%;%-%e%j%F%#$N$3$D(B$B%I%-%e%a%s%H$r(B
- $B;2>H$7$F$/$@$5$$!#(B
+ セキュリティ: ログファイルを書く場所を指定するときは、
+ Apache を起動したユーザ以外がそのディレクトリに書き込み権限を
+ 持っている場合にセキュリティ上の危険があることに注意してください。
+ 詳細はセキュリティのこつドキュメントを
+ 参照してください。
diff --git a/docs/manual/vhosts/name-based.xml.ja b/docs/manual/vhosts/name-based.xml.ja
index d169e294da..a8a9eb9f6a 100644
--- a/docs/manual/vhosts/name-based.xml.ja
+++ b/docs/manual/vhosts/name-based.xml.ja
@@ -1,4 +1,4 @@
-
+
@@ -21,59 +21,59 @@
-->
-$B%P!<%A%c%k%[%9%H(B
-$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H(B
+バーチャルホスト
+名前ベースのバーチャルホスト
- $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
+ この文書では名前ベースのバーチャルホストをどんなとき、
+ どうやって使うかを説明します。
-$B%M!<%`%Y!<%9$N%P!<%A%c%k%[%9%H(B
-$B%P!<%A%c%k%[%9%H$N%^%C%A%s%0$K$D$$$F$N>\:Y(B
-$BBgNL$N%P!<%A%c%k%[%9%H$NF0E*$J@_Dj(B
-$B%P!<%A%c%k%[%9%H$N0lHLE*$J@_DjNc(B
-ServerPath $B@_DjNc(B
+ネームベースのバーチャルホスト
+バーチャルホストのマッチングについての詳細
+大量のバーチャルホストの動的な設定
+バーチャルホストの一般的な設定例
+ServerPath 設定例
-$BL>A0%Y!<%9$H(B IP $B%Y!<%9$N%P!<%A%c%k%[%9%H$NHf3S(B
+名前ベースと IP ベースのバーチャルホストの比較
- 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
+ IP ベースのバーチャルホストでは、応答する
+ バーチャルホストへのコネクションを決定するために IP
+ アドレスを使用します。ですから、それぞれのホストに個々に IP
+ アドレスが必要になります。これに対して名前ベースのバーチャルホストでは、
+ クライアントが HTTP ヘッダの一部としてホスト名を告げる、
+ ということに依存します。この技術で同一 IP
+ アドレスを異なる多数のホストで共有しています。
- $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
+ 名前ベースのバーチャルホストは通常単純で、それぞれのホスト名と
+ それに対応する正確な IP アドレスを DNS で設定し、異なる
+ ホスト名を区別するように Apache HTTP サーバを設定するだけです。
+ さらに、名前ベースのバーチャルホストは不足する IP
+ アドレスの需要を緩和します。したがって、IP ベースのバーチャルホストを
+ 選択すべき特定の理由がなければ名前ベースのバーチャルホストを使うべきです。
+ IP ベースのバーチャルホストを使用することを考慮する理由として、
- - $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$FA0%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
+ - 名前ベースのバーチャルホストに対応していない古いクライアントがある
+ 名前ベースのバーチャルホストが働くためには、クライアントは
+ HTTP ホストヘッダを送ってこなければなりません。
+ これは HTTP/1.1 の仕様で要求されていて、すべての現代的な
+ HTTP/1.0 ブラウザでも拡張として実装されています。
+ とても古いクライアントをサポートしつつ、名前ベースの
+ バーチャルホストを行いたい場合は、この文書の最後の方に
+ 書かれている解決策になるかもしれない方法を見てください。
- - $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
+ - 名前ベースのバーチャルホストは SSL プロトコルの特徴により、
+ SSL セキュアサーバには使えません。
- - $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
+
- オペレーティングシステムやネットワーク装置のなかには、
+ 別の IP アドレス上でない場合、複数のホストを別扱いできないような
+ 帯域管理の方法を実装しているものがあります。
-$BL>A0%Y!<%9$N%P!<%A%c%k%[%9%H$rMxMQ$9$k(B
+名前ベースのバーチャルホストを利用する
@@ -91,53 +91,53 @@
- $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$rNameVirtualHost
- $B%G%#%l%/%F%#%V$G@_Dj$7$^$9!#DL>o!"(BNameVirtualHost $B$G(B
- *
$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 *:80
$B$N$h$&$K%]!<%H$b4^$a$k$h$&$K$7$F$/$@$5$$!#(B
- NameVirtualHost $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(BApache $B$N;H$&%"%I%l%9$H(B
- $B%]!<%H$r@_Dj$9$k(B$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
+ 名前ベースのバーチャルホストを使うには、そのホストへの
+ リクエストを受け付けるサーバの IP アドレス (もしかしたらポートも)
+ を指定する必要があります。
+ これは NameVirtualHost
+ ディレクティブで設定します。通常、NameVirtualHost で
+ *
の属性を使ってサーバの全ての IP アドレスを使います。
+ (例えば SSL の使用などで) 複数のポートを使うことを計画しているのであれば、
+ 引数に *:80
のようにポートも含めるようにしてください。
+ NameVirtualHost ディレクティブで
+ IP アドレスを書いても、
+ 自動的にサーバがその IP アドレスをリッスンするということはないことに
+ 注意してください。詳細は「Apache の使うアドレスと
+ ポートを設定する」を読んでください。さらに、ここで指定された
+ IP アドレスは全てサーバのネットワークインターフェースと関連付けられて
+ いなければなりません。
- $B$l$KBP$7$F(B VirtualHost $B%V%m%C%/$r(B
- $B:n@.$7$F$/$@$5$$!#(BVirtualHost
- $B%G%#%l%/%F%#%V$N0z?t$O(B NameVirtualHost
- $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
- *
)$B!#$=$l$>$l$N(B VirtualHost
- $B%G%#%l%/%F%#%V$NCf$K$O!":GDc8B!"$I$N%[%9%H$,07$o$l$k$+$r<($9(B ServerName $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
- DocumentRoot $B%G%#%l%/%F%#%V$r(B
- $B=q$/I,MW$,$"$j$^$9!#(B
+ 次は、扱うホストそれぞれに対して VirtualHost ブロックを
+ 作成してください。VirtualHost
+ ディレクティブの引数は NameVirtualHost
+ ディレクティブの引数と同じにしてください (すなわち、IP アドレスか、全てのアドレスを意味する
+ *
)。それぞれの VirtualHost
+ ディレクティブの中には、最低限、どのホストが扱われるかを示す ServerName ディレクティブと、
+ そのホスト用のコンテンツがファイルシステム上のどこにあるかを示す
+ DocumentRoot ディレクティブを
+ 書く必要があります。
- $B%a%$%s%[%9%H$O$J$/$J$j$^$9(B
- $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 メインホストはなくなります
+ 既にあるウェブサーバにバーチャルホストを追加する場合、
+ 既存のウェブサーバに対しても VirtualHost
- $B%V%m%C%/$r:n$i$J$1$l$P$J$j$^$;$s!#$3$N%P!<%A%c%k%[%9%H$N(B
- ServerName $B$H(B
+ ブロックを作らなければなりません。このバーチャルホストの
+ ServerName と
DocumentRoot
- $B$O!"%0%m!<%P%k$J(B ServerName $B$H(B
+ は、グローバルな ServerName と
DocumentRoot
- $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
+ と同じものにします。また、このバーチャルホストを設定ファイルの中で
+ 先頭に置いて、デフォルトホストとして動作するようにします。
- $B$?$H$($P!"(Bwww.domain.tld
$B$rF0$+$7$F$$$F!"(B
- $B$5$i$K%P!<%A%c%k%[%9%H(B www.otherdomain.tld
- $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!"(Bhttpd.conf
- $B$K0J2<$N$h$&$J%3!<%I$rDI2C$9$k$@$1$G$9(B
+ たとえば、www.domain.tld
を動かしていて、
+ さらにバーチャルホスト www.otherdomain.tld
+ を追加するとしましょう。このバーチャルホストは同一 IP を指しているとします。
+ そのような場合は、httpd.conf
+ に以下のようなコードを追加するだけです
NameVirtualHost *:80
@@ -157,98 +157,98 @@
</VirtualHost>
- NameVirtualHost $B5Z$S(B
- VirtualHost $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
+ NameVirtualHost 及び
+ VirtualHost のどちらの場合も、
+ * の部分には明示的に IP アドレスを指定することができます。
+ 例えば、ある IP アドレスでは名前ベースのバーチャルホストを使いたい一方で、
+ 別の IP アドレスでは、他の IP ベースのバーチャルホストや
+ 別組の名前ベースのバーチャルホストを使いたい場合、
+ そう設定することになるでしょう。
- $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!"(BServerAlias $B%G%#%l%/%F%#%V$r(B 複数の名前でサーバアクセスができるようにしたいことも多いでしょう。
+ このようなことは、ServerAlias ディレクティブを VirtualHost
- $B%;%/%7%g%s$K5-=R$9$k$3$H$Ge5-$N(B VirtualHost $B$NNc$G$"$l$P!"(B
- $BA0$,!"(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 ServerAlias
- $B%G%#%l%/%F%#%V$G;XDj$G$-$^$9!#(B
+ セクションに記述することで実現できます。
+ 例えば上記の VirtualHost の例であれば、
+ 次のように一覧に挙げられた名前が、
+ ユーザが同一のウェブサイトとして目にして使用できるサーバ名である、
+ と ServerAlias
+ ディレクティブで指定できます。
ServerAlias domain.tld *.domain.tld
- domain.tld
$B%I%a%$%s$X$NA4$F$N%[%9%H$X$N%j%/%(%9%H$O(B
- www.domain.tld
$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
- ServerName $B$d(B
+
domain.tld
ドメインへの全てのホストへのリクエストは
+ www.domain.tld
のバーチャルホストが処理します。
+ 名前をマッチさせるために、ワイルドカード文字 * や ?
+ を使用することもできます。もちろん思いつきの名前を作って、
+ ServerName や
ServerAlias
- $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
+ にその名前を書くといったことはできません。まずは、
+ これらの名前が サーバに付けられた IP アドレスにマップされるように
+ DNS サーバを適切に設定しなければなりません。
- $B:G8e$K!"(BVirtualHost $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 $B%3%s%F%-%9%H(B $B$r(B
- $BD4$Y$F$/$@$5$$!#(B$B
+ 最後に、VirtualHost コンテナの中に
+ 他のディレクティブを書くことで、バーチャルホストの設定を細かく調整
+ することができます。
+ ほとんどのディレクティブはこれらのコンテナに設置することができて、
+ 変更点はそのバーチャルホストに対してのみ有効になります。
+ どのディレクティブを書くことができるかは、ディレクティブの コンテキスト を
+ 調べてください。主サーバコンテキスト
(VirtualHost
- $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
+ コンテナの外) の設定用ディレクティブはバーチャルホストでの設定で
+ 上書きされない場合のみ使用されます。
- $B%j%/%(%9%H$,Mh$k$H!"%5!<%P$O$^$::G=i$K(B リクエストが来ると、サーバはまず最初に NameVirtualHost
- $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 VirtualHost
- $B$N$=$l$>$l$N%;%/%7%g%s$NCf$+$i(B
- ServerName $B$+(B
+ のそれぞれのセクションの中から
+ ServerName か
ServerAlias
- $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
- $B%j%9%H$N:G=i$K$"$k%P!<%A%c%k%[%9%H(B $B$,;H$o$l$^$9!#(B
+ に要求されたホスト名があるか探します。
+ 見つかればそのサーバ用の設定を使います。マッチするバーチャルホスト
+ が見つからなければ、マッチした IP アドレスの
+ リストの最初にあるバーチャルホスト が使われます。
- $B7k2L$H$7$F!"%j%9%H$N:G=i$N%P!<%A%c%k%[%9%H$,(B $B%G%U%)%k%H(B $B$N(B
- $B%P!<%A%c%k%[%9%H$K$J$j$^$9!#(BIP $B%"%I%l%9$,(B 結果として、リストの最初のバーチャルホストが デフォルト の
+ バーチャルホストになります。IP アドレスが NameVirtualHost
- $B%G%#%l%/%F%#%V$K%^%C%A$7$?>l9g$O!"(B$B%a%$%s$N%5!<%P(B $B$N(B
+ ディレクティブにマッチした場合は、メインのサーバ の
DocumentRoot
- $B$O(B$B7h$7$F;H$o$l$^$;$s(B
- $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
- <VirtualHost>
$B%3%s%F%J$K$=$l$r5-=R$7$F$/$@$5$$!#(B
+ は決して使われません
+ どのバーチャルホストにもマッチしないリクエストに対して、
+ 特別な設定をしたいのであれば、設定ファイル中の最初の
+ <VirtualHost>
コンテナにそれを記述してください。
-$B8E$$%V%i%&%6$H$N8_49@-(B
+古いブラウザとの互換性
- $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
- ($B%W%i%$%^%j(B$B$NL>A0%Y!<%9$N%P!<%A%c%k%[%9%H(B)
- $B$+$i%Z!<%8$,Aw$jJV$5$l$^$9!#(B
+ 以前述べたように、名前ベースのバーチャルホストが正しく動作する
+ ために必要な情報を送ってこないクライアントが依然として存在しています。
+ そのようなクライアントに対しては、該当する IP アドレスについて、
+ 一番最初に設定されているバーチャルホスト
+ (プライマリの名前ベースのバーチャルホスト)
+ からページが送り返されます。
- $B$I$N$0$i$$8E$$$N(B ?
- $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
- Host
$B%X%C%@$rAw$j$^$9!#(B
+ どのぐらい古いの ?
+ 「古い」と表現している場合、本当に古いことを意味して使っています。
+ 不幸にして今現在でもこのような古いブラウザに遭遇することがあります。
+ 現在のブラウザは全て、名前ベースのバーチャルホストに必要な
+ Host
ヘッダを送ります。
ServerPath
- $B%G%#%l%/%F%#%V$GBP=h$,2DG=$G$9!#$A$g$C$HIT3J9%$G$9$1$l$I$b!#(B
+ ディレクティブで対処が可能です。ちょっと不格好ですけれども。
- $B@_DjNc(B
+ 設定例
NameVirtualHost 111.22.33.44
@@ -262,28 +262,28 @@
</VirtualHost>
- $B$3$NNc$K$O$I$&$$$&0UL#$,$"$k$G$7$g$&$+(B? $B$3$l$O(B
- "/domain
" $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 www.domain.tld
$B$G=hM}$5$l$k!"(B
- $B$H$$$&0UL#$G$9!#$D$^$j!"$9$Y$F$N%/%i%$%"%s%H$G(B
- http://www.domain.tld/domain/
$B$G%"%/%;%9$G$-$k%Z!<%8$,!"(B
- Host:
$B%X%C%@$rAw$C$F$/$k%/%i%$%"%s%H$G$"$l$P(B
- http://www.domain.tld/
$B$H$7$F$b%"%/%;%9$G$-$k!"(B
- $B$H$$$&0UL#$G$9!#(B
+ この例にはどういう意味があるでしょうか? これは
+ "/domain
" で始まる URI へのリクエストはすべて、
+ バーチャルホスト www.domain.tld
で処理される、
+ という意味です。つまり、すべてのクライアントで
+ http://www.domain.tld/domain/
でアクセスできるページが、
+ Host:
ヘッダを送ってくるクライアントであれば
+ http://www.domain.tld/
としてもアクセスできる、
+ という意味です。
- $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
- http://www.domain.tld/domain/
$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 ($BNc(B:
- "file.html
" $B$d(B "../icons/image.gif
")$B!"(B
- $B$"$k$$$O(B /domain/
$B$G;O$^$k%j%s%/(B ($BNc(B:
- "http://www.domain.tld/domain/misc/file.html
" $B$d(B
- "/domain/misc/file.html
") $B$@$1$r@_CV$7$^$9!#(B
+ これが動作するようにするには、
+ プライマリのバーチャルホストのページに
+ http://www.domain.tld/domain/
へのリンクを設置します。
+ そして、バーチャルホストのページでは、純粋な相対リンク (例:
+ "file.html
" や "../icons/image.gif
")、
+ あるいは /domain/
で始まるリンク (例:
+ "http://www.domain.tld/domain/misc/file.html
" や
+ "/domain/misc/file.html
") だけを設置します。
- $B$3$l$K$O!"4vJ,$+$N5,N'$,I,MW$H$J$j$^$9$,!"(B
- $B$3$N$h$&$J%,%$%I%i%$%s$rCil9g!"(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
+ これには、幾分かの規律が必要となりますが、
+ このようなガイドラインを忠実に守ることにより、たいていの場合、
+ すべてのブラウザで ― 新しいブラウザでも古いものでも ―
+ 作成したページが見えるということを保証します。
---|