このディレクティブは実際のファイル名 (もしくは存在するディレクトリの
存在しないファイル) の後に続くパス名情報があるリクエストを受け付けるか
拒否するかを制御します。続きのパス名情報はスクリプトには PATH_INFO
環境変数として利用可能になります。
例えば、/test/
が、here.html
というファイル
一つのみがあるディレクトリを指しているとします。そうすると、
/test/here.html/more
と /test/nothere.html/more
へのリクエストは両方とも /more
を PATH_INFO
とします。
Off
/test/here.html/more
のように、本当のファイル名の
後にパス名情報が続くリクエストには 404 NOT FOUND エラーが返ります。On
/test/here.html/more
は /test/here.html
が有効なファイルにマップすれば
受け付けられます。Default
PATH_INFO
を拒否します。
cgi-script や isapi-isa のようにスクリプトを扱うハンドラは
一般的にデフォルトで PATH_INFO
を受け付けます。AcceptPathInfo
の主な目的はハンドラの PATH_INFO
を
受け付けるか拒否するかの選択を上書きできるようにすることです。
例えば、これは例えば INCLUDES のような
フィルタを使って PATH_INFO
に
基づいてコンテンツを生成しているときに必要になります。
リクエストを処理するとき、サーバはディレクトリに 対して分散設定ファイルが有効になっていれば、 そのドキュメントへの パス上にある全てのディレクトリから、ここで指定された名前の一覧の中で 最初に見つかったファイルをそれぞれ設定ファイルとして読み込みます。例えば:
という設定があると、以下のようにして無効にされていない限り、
ドキュメント /usr/local/web/index.html
を返す前に、サーバは /.acl
, /usr/.acl
,
/usr/local/.acl
, /usr/local/web/.acl
から
ディレクティブを読み込みます。
このディレクティブは、HTTP ヘッダにコンテントタイプパラメータを
持たない応答に追加される文字セットの名前を指定します。
これは、ドキュメント内の META タグで指定されたどのような文字セット
も無効にします。
AddDefaultCharset Off
という設定により、この機能は無効になります。
AddDefaultCharset On
にすれば、ディレクティブの要求通り
Apache 内部のデフォルト文字セット iso-8859-1
に設定します。
また、他の charset も指定できます。例えば:
このディレクティブは応答の MIME-type に応じて出力フィルタを使用するようにします。
次の例は DEFLATE
フィルタを
使っています。text/html
と text/plain
の
すべての出力 (静的なものも動的なものも) をクライアントに送られる前に
圧縮します。
複数のフィルタでコンテンツを処理させたいときは、それぞれの名前をセミコロンで
分ける必要があります。各フィルタに対して
次の例は text/html
のスクリプトのすべての出力を
まず INCLUDES
フィルタで処理し、さらに DEFLATE
フィルタにかけます。
しかし、確実にフィルタが適用されるようにしたいときは、リソースに
明示的にコンテントタイプを割り当てることができます。これには例えば
タイプ毎の出力フィルタはプロキシリクエストには決して適用されません。
/
は %2F
、さらにシステムによっては
\
に対応する %5C
) が存在する URL の使用を
許可するかどうかを決定します。通常はそのような URL は 404 (Not found) エラー
で拒否されます。
On
による
パス分離文字の使用は、PATH_INFO
と合わせて
使うときに一番役に立ちます。
Turning On
is
mostly useful when used in conjunction with PATH_INFO
.
符号化されたスラッシュを許可することは、復号をすることを
意味しません。%2F
や (関係するシステムでの)
%5C
は、他の部分が復号された URL の中でもそのままの形式で
残されます。
.htaccess
で許可されるディレクティブの種類サーバが (
このディレクティブを None に設定すると、.htaccess ファイルは完全に
無視されます。
この場合、サーバはファイルシステムの .htaccess
ファイルを読むことを
試みさえしません。
このディレクティブが All
に設定されている時には、
.htaccess
という コンテキスト を持つ
全てのディレクティブが利用できます。
directive-type には、以下のディレクティブ群の キーワードのどれかを指定します。
例:
このディレクティブはディレクトリに対する認可領域 (訳注: realm)
の名前を指定します。
認可領域は、利用者がどのユーザ名とパスワードを送信すればよいのかを
クライアントに教えるために利用します。
例えば:
ここで AuthName
に指定した文字列が、
大部分のブラウザのパスワードダイアログに表示されます。
このディレクティブは対象ディレクトリで利用するユーザー認証の種類を選びます。
ただ、現在のところは Basic
と Digest
しか
実装されていません。
このディレクティブは
このディレクティブは Apache が CGI スクリプトを実行するための
インタープリタを探す方法を制御します。
例えば、CGIMapExtension sys:\foo.nlm .foo
と設定すると
.foo
という拡張子のすべての CGI スクリプトは FOO インタープリタに
渡されます。
Content-MD5
HTTP 応答ヘッダの生成を有効にするこのディレクティブは、RFC1864 及び RFC2068 において定義されている
Content-MD5
ヘッダーの生成を有効にします。
MD5 は、任意長のデータの「メッセージダイジェスト」(「指紋」 と表現されることもある) を計算するアルゴリズムで、 データの変更があった場合には非常に高い信頼度でメッセージダイジェストに変更が 反映されます。
Content-MD5
ヘッダは、エンドツーエンドで
エンティティボディーに含まれるメッセージの完全性チェック
(Message Integrity Check - MIC)を提供します。
このヘッダを調べることで、プロキシやクライアントは、
途中経路におけるエンティティボディの予期せぬ変更などを
検出することができます。ヘッダの例:
リクエスト毎にメッセージダイジェストを計算する (値はキャッシュされません) ことから、 サーバパフォーマンスが低下することについて注意してください。
Content-MD5
は、
サーバは、MIME のタイプマップからは決定できない ドキュメントの送信を要求されることがあります。
サーバは、ドキュメントのコンテントタイプをクライアントに通知する必要が
ありますので、このようにタイプが未知の場合は
DefaultType
で指定されたタイプを利用します。
例:
これは .gif
という拡張子がファイル名に含まれていない
多くの GIF 画像が含まれているディレクトリに適しているでしょう。
指定されたディレクトリとそのサブディレクトリにのみ
ディレクティブを適用させるためには、
</Directory>
を対として、ディレクティブ群を囲います。
その中には、ディレクトリコンテキストで許可された全てのディレクティブを
利用できます。
directive-path は、フルパスもしくは Unix のシェル形式の
ワイルドカードを指定します。
?
は任意の 1 文字、*
は任意の文字列にマッチします。
シェルにおける指定同様、文字の範囲を []
で指定できます。
ワイルドカードは `/' 文字にはマッチしませんので、
/home/user/public_html
には
<Directory /*/public_html>
はマッチしませんが、
<Directory /home/*/public_html>
はマッチします。
例:
directory-path 引数には注意してください: その引数は
Apache がファイルをアクセスするために使うファイルシステムのパスに
そのままマッチする必要があります。ある <Directory>
に
適用されるディレクティブは、別のシンボリックリンクをたどったりして
同じディレクトリを違うパスでアクセスした場合には適用されません。
~
という文字を
付加することで拡張正規表現を利用することもできます。
例えば:
といった指定の場合、/www/
以下にある数字
3 文字のディレクトリにマッチします。
もし複数の (正規表現以外の)
と設定し、ドキュメント /home/web/dir/doc.html
への
アクセスがあった場合には以下のように動作します:
AllowOverride None
が適用される。
(.htaccess
ファイルは無効になる)AllowOverride FileInfo
が適用される
(/home
ディレクトリに対して)。/home/.htaccess
, /home/web/.htaccess
,
/home/web/.htaccess
の順にそれらのファイル中の
FileInfo ディレクティブが適用される。正規表現は、通常のセクションがすべて適用されるまで 考慮されません。 その後、全ての正規表現が設定ファイルに現れた順で試されます。 例えば、以下のような場合に
正規表現のセクションはすべての通常の .htaccess
の適用が終わるまで考慮されません。
その後で、正規表現は /home/abc/public_html/abc
にマッチし、
対応する
Apache のデフォルトでは <Directory />
へのアクセスは
Allow from All
になっていることに注意してください。
これは、URL からマップされたどのファイルでも Apache は送るということです。
これは以下のようにして変更することが推奨されています。
そしてアクセスを可能にしたいディレクトリに対して 個別に設定すればよいでしょう。 このあたりについては、セキュリティに関するコツを 参照してください。
ディレクトリセクションは httpd.conf ファイル書きます。
</DirectoryMatch>
は指定されたディレクトリと
そのサブディレクトリにのみ適用されるディレクティブ群を囲います。
しかし、このディレクティブは引数として正規表現をとります。例えば:
は /www/ 以下にある数字 3 文字のディレクトリにマッチします。
このディレクティブは、httpd
がファイルを提供するディレクトリを設定します。
この場合、
http://www.my.host.com/index.html
へのアクセスがあれば
/usr/web/index.html
が返されます。
directory-path が絶対パスでない場合は、
このディレクティブは配送中にファイルの内容を読み込む必要があるときに
httpd
がメモリマッピングを使うかどうかを制御します。デフォルトでは、
例えば、
このメモリマップは性能の向上を持たらすことがあります。 しかし、環境によっては運用上の問題を防ぐためにメモリマッピングを 使用しないようにした方が良い場合もあります:
httpd
の
性能が落ちるものがあります。httpd
がメモリマップしている間にファイルが削除されたり
短くなったりしたときに起こるセグメンテーションフォールトのために
httpd
がクラッシュする可能性があります。これらの問題に当てはまるサーバの設定の場合は、以下のようにして ファイルの配送時のメモリマッピングを使用不可にしてください:
NFS マウントされたファイルには、問題のあるファイルにのみ明示的に この機能を使用不可にします:
このディレクティブはクライアンにファイルの内容を送るときに
httpd
がカーネルの
sendfile サポートを使うかどうかを制御します。デフォルトでは、
例えば静的なファイルの配送のように、リクエストの処理にファイルの
途中のデータのアクセスを必要としないときには、Apache は OS が
サポートしていればファイルを読み込むことなく sendfile を使って
ファイルの内容を送ります。
sendfile は read と send を別々に行なうことと、バッファの割り当てを 回避します。しかし、プラットフォームやファイルシステムの中には 運用上の問題を避けるためにこの機能を使用不可にした方が良い場合があります:
これらの問題に当てはまるサーバの設定の場合は、以下のようにして この機能を使用不可にしてください:
NFS や SMB マウントされたファイルには、問題のあるファイルにのみ明示的に この機能を使用不可にします:
問題やエラーが発生したときの動作として、 Apache には以下の四つのうち一つの動作を設定することができます。
最初のものがデフォルトの動作で、2 番目から 4 番目は、
URL の場合は、ローカルの URL の指定としてスラッシュで始まる (/) パスか、
クライアントが解釈できるフル URL を指定します。
もしくは、ブラウザに表示されるメッセージを指定できます。
例:
リモート URL (例えば、頭に http
と付与した方法) を
ErrorDocument 401
にリモートの URL を指定すると、
クライアントは 401 というステータスコードを受け取らないため、
パスワードをユーザーに入力要求しなければならないことがわかりません。
従って、ErrorDocument 401
というディレクティブを使う場合は、
必ずローカルな文書を参照しなければなりません。
Microsoft Internet Explorer (MSIE) はデフォルトではサーバが生成したエラーメッセージが 「小さすぎる」ときには無視をして自分自身の「やさしい」エラーメッセージで 置換します。サイズのしきい値はエラーの種類によって異なりますが、 一般的にはエラーの文書を 512 バイトよりも多きくすると、MSIE は サーバが生成したエラーを隠さずに表示します。詳しい情報は Microsoft Knowledgebase の記事 Q294807 にあります。
2.0 より前のバージョンでは、対になっていない二重引用符を 先頭に付けることによりメッセージであることを指定していました。
file-path がパイプ (|) から始まる場合は、 エラーログを処理するために実行されるコマンドが 指定されていると解釈されます。
ファイル名の変わりに syslog
と指定することによって、
システムがサポートしていれば syslogd(8) を利用したロギングが有効になります。
デフォルトでは、local7
ファシリティとなりますが、
syslog:facility
といった形で記述することにより、
通常 syslog(1) のドキュメントで説明されているファシリティの一つを使うように
することができます。
セキュリティ: ログファイルを格納するディレクトリが、サーバを起動したユーザ以外の ユーザによって書き込める場合にセキュリティが破られる可能性があることに 関する詳細は セキュリティに関するコツ を 参照してください。
Unix 以外のプラットフォームでファイルのパスを入力するときは、 プラットフォームがバックスラッシュの使用を許していたとしても、 確実にスラッシュのみが使用されるように注意してください。一般的には、 設定ファイル全般でスラッシュのみを使う方が良いでしょう。
ETag
(エンティティタグ) 応答ヘッダフィールドを作成するときに使用する
ファイルの属性を設定します。 (ETag
の値はネットワークの帯域を節約するための
キャッシュの管理で使われます。) Apache 1.3.22 以前では、ETag
の値は
常にファイルの inode, サイズ、最終修正時刻 (mtime) から作成
されていました。
ETag
フィールドを
応答に付加しませんINode
, MTime
, Size
キーワードには
+
や -
を前に付けて
指定することもできます。この場合は、より広い範囲から継承された
デフォルトの設定に変更を加えるようになります。そのような接頭辞の
無いキーワードを指定すると、即座に継承した設定を無効にします。
あるディレクトリの設定に
FileETag INode MTime Size
があり、
サブディレクトリの設定に FileETag -INode
があるときは、
そのサブディレクトリの設定は (設定が上書きされなければサブディレクトリの
サブディレクトリにも継承されます) FileETag MTime Size
と同じになります。
</Files>
ディレクティブと対に
なっていなければなりません。
このセクション中のディレクティブは、ベース名 (ファイル名の最後の部分)
が指定されたファイル名にマッチするすべてのオブジェクトに適用されます。
.htaccess
が読み込まれた後、
filename 引数は、ファイル名かワイルドカード文字列
で、ワイルドカードでは ?
は一つの文字、*
は任意の文字列にマッチします。
~
という文字を付加することで拡張正規表現を使うこともできます。
例えば、
とすることにより、一般的なインターネットの画像フォーマットにマッチします。
ただし、
ちなみに、.htaccess
ファイル内で利用することができます。
これにより、ユーザがファイル毎にアクセスの制御を行なうことができるように
なっています。
は一般的なインターネットの画像形式にマッチします。
.htaccess
や .gif
で終わらせたくはないときに、以下のものを使用します:
None
という値を使うことで
このディレクティブは、ホスト名をログ収集できるように
DNS ルックアップを有効にします
(さらに、CGI/SSI に REMOTE_HOST
変数として渡します)。
Double
を指定した場合、2 重の逆引きを行ないます。
つまり、逆引きの後に、その結果に対して正引きを行ないます。正引きの
結果の IP アドレスの中にオリジナルのアドレスと一致するものがなければ
なりません。("tcpwrappers" の用語では PARANOID と呼ばれています。)
HostnameLookups Double
を設定しない限り、
他の部分はこの 2 重逆引きの結果を使うことはできません。
例えば、HostnameLookups On
と設定してある状態で、
ホスト名によるアクセス制限を行なったオブジェクトへの
リクエストを受けたとすると、2 重の逆引きが成功するか否かによらず、
REMOTE_HOST
には通常の逆引き結果が渡されます。
ディレクティブのデフォルトは
本当に逆引きを必要としているわけではないサイトの
ネットワークトラフィックを低減させるために、Off
になっています。
ルックアップによる余計な遅延がなくなるため、
エンドユーザにとっても良いでしょう。
DNS のルックアップには、かなりの時間が必要となる場合が多く、
負荷の高いサイトではこのディレクティブは Off
にすべきです。
なお、/support ディレクトリに含まれ、デフォルトでは
インストールディレクトリの bin
サブディレクトリに
インストールされる logresolve ユーティリティにより、
Apache の動作とは別に、ログに残されている IP アドレスからホスト名を
ルックアップすることが可能です。
<IfDefine test>...</IfDefine>
セクションは、
ディレクティブを条件付きで指定するために利用します。
!
parameter-name前者の場合には、parameter-name と名付けられたパラメータが 定義されていれば開始と終了の間のディレクティブが処理されます。 後者の場合は逆で、parameter-name が指定されていない 場合に処理されます。
parameter-name 引数は、サーバを起動する際に
httpd
のコマンドラインに
-Dparameter-
という形で指定すると定義されます。
<IfModule test>...</IfModule>
セクションは、モジュールが存在するときに処理されるディレクティブを
指定するために利用します。
前者の場合は、module name と名付けられたモジュールが
Apache に組み込まれていれば
(コンパイル済みのものと、
module name 引数は、
コンパイルをした時のモジュールのファイル名で、
例えば mod_rewrite.c
といった形になります。
モジュールが複数のソースファイルから構成されている場合は、文字列
STANDARD20_MODULE_STUFF
があるファイルの名前を
使ってください。
このディレクティブにより、サーバの設定ファイルから 他の設定ファイルをインクルードすることができます。
複数のファイルをアルファベット順に一度に読み込むために、
シェル形式 (fnmatch
) のワイルドカード文字を使うことができます。
さらに、httpd
が読み込みに失敗するような
一時ファイルをディレクトリに残してしまうようなことがよくあるからです。
指定するファイルパスは絶対パスか、
例:
apachectl configtest
を実行すると、設定をチェックしている時に
読み込まれたファイルのリストが表示されます:
HTTP/1.0 の Keep-Alive 拡張と HTTP/1.1 の持続的接続の機能は、
複数のリクエストが同じ TCP の接続で送られる、長時間持続する
HTTP セッションを提供します。たくさんの画像が
含まれる HTML ドキュメントでは場合によっては遅延時間が 50% 短縮される結果も
でています。Keep-Alive 接続を有効にするには
KeepAlive On
と設定します。
HTTP/1.0 に対応したクライアントの際には、 クライアントより特に要求があった場合のみ Keep-Alive 接続となります。 さらに、HTTP/1.0 クライアントでは、コンテンツの容量が先に (訳注: 要求に対して応答を返す前に) わかる場合のみ Keep-Alive 接続を利用できます。 これは、CGI の出力や SSI のページ、 サーバが生成したディレクトリのリストのような動的コンテンツを HTTP/1.0 クライアントに送る場合には Keep-Alive 接続を使えないことを意味します。 HTTP/1.1 に対応したクライアントの際には、 特に指定されない限りはデフォルトとして持続的な接続が行なわれます。 クライアントが要求すれば、コンテンツの容量を判別できないものを 持続的な接続を通して送るために、チャンクエンコーディングが用いられます。
接続を閉じる前に、Apache が次のリクエストを何秒待つかを指定します。
リクエストを受け付けた後は、
アクセス制御は、通常全てのアクセスメソッドに対して
影響し、普通はこれが望ましい挙動です。
そうしたことから、大部分の場合にはアクセス制御に関わるディレクティブを
POST
, PUT
, DELETE
のメソッドに対してのみアクセスの制御を行ない、
それ以外のメソッドについては制限しません:
メソッド名には以下の中から一つ以上を列挙することができます:
GET
,
POST
, PUT
, DELETE
,
CONNECT
, OPTIONS
,
PATCH
, PROPFIND
, PROPPATCH
,
MKCOL
, COPY
, MOVE
,
LOCK
, UNLOCK
. メソッド名は
大文字小文字を区別します。 GET
を指定した場合には
HEAD
リクエストにも制限がかかります。TRACE
メソッドに制限をかけることはできません。
</LimitExcept>
は、引数に
含まれていない
HTTP のアクセスメソッドに適用するためのアクセス制御
ディレクティブを括るために利用します。
つまり、
例:
内部リダイレクトは例えば
このディレクティブは、リクエスト毎に評価される、二つの違う限界値を 設定します。最初の number は、起こり得る 内部リクエストの最大値を設定します。二つめの number は サブリクエストが入れ子にできる深さを設定します。number を 一つだけ指定したときは、両方の限界値にその値が設定されます。
このディレクティブは、リクエストボディに許されるバイト数、bytes を 0 (無制限を意味します) から 2147483647 (2GB) までの数値で指定します。
PUT
メソッドの実装は、このディレクティブの値として
少なくともあるリソースに対してサーバが受け付けようとする
表現の大きさほどの値を必要とします。
このディレクティブは、 管理者にクライアントからの異常なリクエストを制御できるようにし、 何らかの形のサービス拒否攻撃 (訳注:DoS) を避けるのに有効です。
ある場所へのファイルアップロードを許可する場合に、 アップロードできるファイルのサイズを 100K に制限したければ、 以下のように指定します:
number には、0 (無制限を意味します) から 32767
までの整数を指定します。
デフォルト値は、定数 DEFAULT_LIMIT_REQUEST_FIELDS
によりコンパイル時に定義されます (配布時には 100 と指定されています)。
LimitRequestBody ディレクティブは、 サーバ管理者が HTTP リクエスト中において許可するリクエストヘッダフィールド数を 指定します。 サーバはこの値には通常のクライアントからのリクエストに含まれるであろう フィールドの数より大きな値が必要とします。 クライアントにより使われた要求ヘッダーフィールドの数が 20 を超えることはほとんどありませんが、 これは種々のクライアントの実装よって変わり、 詳細なコンテントネゴシエーションをするためのブラウザの設定までにも 影響されることがあります。 オプションの HTTP 拡張はリクエストヘッダフィールドを使って現される場合が 多くあります。
このディレクティブは、 管理者にクライアントからの異常なリクエストを制御できるようにし、 何らかの形のサービス拒否攻撃 (訳注:DoS) を避けるのに有効です。 リクエストのフィールドが多過ぎることを意味するエラー応答が 普通のクライアントに返されるような時はこの値を増やしてください。
例:
このディレクティブは、HTTP リクエストヘッダ内に含めることのできる
バイト数、bytes を
0 からコンパイル時に定義される定数
DEFAULT_LIMIT_REQUEST_FIELDSIZE
(配布時には 8192 と指定)
で指定された値までの数字で指定します。
このディレクティブは、 管理者にクライアントからの異常なリクエストを制御できるようにし、 何らかの形のサービス拒否攻撃 (訳注:DoS) を避けるのに有効です。
例:
このディレクティブは、HTTP リクエスト行内で許容されるバイト数
bytes を 0 からコンパイル時の定数
DEFAULT_LIMIT_REQUEST_LINE
(配布時には 8190 と指定)
で指定された値までの数字で指定します。
GET
リクエストのクエリ部分も含めて、リソースの名前が入るに足る
大きさを必要とします。
このディレクティブは、 管理者にクライアントからの異常なリクエストを制御できるようにし、 何らかの形のサービス拒否攻撃 (訳注:DoS) を避けるのに有効です。
例:
XML 形式のリクエストのボディの最大値を (バイト単位で) 制限します。
値に 0
を指定するとチェックを無効にします。
例:
</Location>
ディレクティブで終了する
サブセクションを開始します。
.htaccess
の読み込みの後、
<Location />
で、これはサーバ全体に対して
設定を適用する簡単な方法です。
全ての (プロキシ以外の) リクエストに対し、
URL は /path/
という、
接頭辞 http://servername
を含まない形でマッチします。
プロキシリクエストの場合には、scheme://servername/path
という接頭辞を含む形でマッチし、接頭辞を含めて指定する必要があります。
URL にはワイルドカードを利用することができます。
?
は任意の一文字、*
は任意の文字列にマッチします。
~
という文字を追加することで、拡張正規表現を
利用することもできます。
例えば:
は URL に /extra/data
か /special/data
という文字列が
含まれている場合にマッチします。
foo.com
のブラウザからのみステータスの参照を有効にしたければ、
次のようにすれば良いでしょう。
スラッシュ文字は、URL 内に現れる場所に応じて変化する
特別な意味を持っています。
ファイルシステムにおいて利用する場合には複数のスラッシュでも一つの
スラッシュとして扱われることが多いですが、
(すなわち、/home///foo
は
/home/foo
と同じいったように)
URL においては必ずしもそうなるわけではありません。
例えば、<LocationMatch ^/abc>
は、
/abc
というリクエスト URL にマッチしますが、
//abc
というリクエスト URL にはマッチしません。
(正規表現でない) <Location /abc/def>
と指定し、
/abc//def
というリクエストがあれば、
マッチすることになります。
は URL に /extra/data
か /special/data
という文字列が含まれている場合にマッチします。
レベル | 説明 | 例 |
---|---|---|
emerg |
緊急 - システムが利用できない | Child cannot open lock file. Exiting (子プロセスがロックファイルを開けないため終了した) |
alert |
直ちに対処が必要 | getpwuid: couldn't determine user name from uid (getpwuid: UID からユーザ名を特定できなかった) |
crit |
致命的な状態 | socket: Failed to get a socket, exiting child (socket: ソケットが得られないため、子プロセスを終了させた) |
error |
エラー | Premature end of script headers (スクリプトのヘッダが足りないままで終わった) |
warn |
警告 | child process 1234 did not exit, sending another SIGHUP (子プロセス 1234 が終了しなかった。もう一度 SIGHUP を送る) |
notice |
普通だが、重要な情報 | httpd: caught SIGBUS, attempting to dump core in ... (httpd: SIGBUS シグナルを受け、... へコアダンプをした) |
info |
追加情報 | "Server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers)..." (「サーバは負荷が高い、 (StartServers や Min/MaxSpareServers の値を増やす必要があるかも)」) |
debug |
デバッグメッセージ | "Opening config file ..." (設定ファイルを開いている...) |
特定のレベルが指定された場合、それより高いレベルの全てのメッセージが
報告されます。
例えば、LogLevel info
に指定すると、
notice
と warn
も報告されます。
なお crit
以上のレベルを指定することが推奨されます。
例:
ファイルにログを出力する場合、notice
レベルのメッセージは抑制されず、すべてログに出力されます。
しかし syslog
を使用している場合は、
これは当てはまりません。
0
に設定していれば、受け付けるリクエストは無制限になります。
この設定は、サーバ性能を向上させるために、大きな数値を指定すること勧めます。
例:
addr にはホスト名を指定できますが、 常に IP アドレスを指定するのが推奨されます。 例えば、
「主サーバ」や、どの _default_
サーバも、
名前ベースのバーチャルホストにポート番号を指定することも可能です。 例えば
IPV6 のアドレスは次の例のように角括弧で囲む必要があります:
すべてのインタフェースへのリクエストを受け取るようにするためには、
引数として *
を使います。
option を None
に指定すると、
特別な機能は全て無効になります。
また、以下の示す 1 個以上のものを指定できます。
All
MultiViews
を除いた全ての機能が有効となります。
これがデフォルトです。ExecCGI
FollowSymLinks
サーバがシンボリックリンクをたどる場合でも、
Includes
IncludesNOEXEC
#exec
コマンド と #exec CGI
は無効になります。
ただし、#include virtual
により、Indexes
index.html
) が
ディレクトリ内に無ければ、MultiViews
SymLinksIfOwnerMatch
通常、ディレクトリに対して複数の +
や -
付きで
指定された場合はオプションの値はマージされます。
+
を頭につければ現在の設定に加えられ、
-
を付ければ現在の設定から削除されます。
例えば、+
や -
を利用しない場合は:
/web/docs/spec
というディレクトリには、
Includes
だけが適用されます。
しかし、2 番目の +
や -
を利用してみると:
/web/docs/spec
というディレクトリには、 FollowSymLinks
と
Includes
が適用されます。
-IncludesNOEXEC
もしくは
-Includes
を指定すると、
前の設定がどのようになっていようとも SSI は無効となります。
どのような設定もされていなければ、デフォルトでは All
に
なります。
このディレクティブは、どの認証済みのユーザがディレクトリに アクセスすることができるかを指定します。 以下のような構文になります。
Require user userid [userid] ...
Require group group-name [group-name] ...
Require valid-user
このようにして適用されたアクセス制御は、全てのメソッドに
対して行なわれます。
通常は、これが望ましい動作です。
もし、特定のメソッドに対してのみアクセスの制御を適用し、
他のメソッドは制限しない場合には、
一つか二つのパラメータをとります。
最初のパラメータは全プロセスに対するリソースのソフトリミットを設定し、
2 番目のパラメータは最大のリソースリミットを設定します。
パラメータには数字か、オペレーティングシステムの最大となる
max
のどちらかを指定することができます。
最大のリソースリミットを上げるためには、サーバを
root
で実行するか起動されなければいけません。
ちなみに、この設定は Apache の子プロセス自体ではなく、 リクエストを受け付けた Apache の子プロセスから fork されたプロセスに 適用されます。 これには CGI や SSI から実行されたコマンドが含まれますが、Apache の 親プロセスから fork されたログのパイププロセスなどには適用されません。
CPU リソースのリミットはプロセスあたりの秒数で表わされます。
一つか二つのパラメータををとります。
最初のパラメータは全プロセスに対するリソースのソフトリミットを設定し、
2 番目のパラメータは最大のリソースリミットを設定します。
パラメータには数字か、オペレーティングシステムの最大となる
max
のどちらかを指定することができます。
最大のリソースリミットを上げるためには、サーバを
root
で実行するか起動されなければいけません。
この設定は Apache の子プロセス自体ではなく、 リクエストを受け付けた Apache の子プロセスから fork されたプロセスに 適用されます。 これには CGI や SSI から実行されたコマンドが含まれますが、Apache の 親プロセスから fork されたログのパイププロセスなどには適用されません。
メモリリソースのリミットはプロセスあたりのバイト数で表わされます。
一つか二つのパラメータをとります。
最初のパラメータは全プロセスに対するリソースのソフトリミットを設定し、
2 番目のパラメータは最大のリソースリミットを設定します。
パラメータには数字か、オペレーティングシステムの最大となる
max
のどちらかを指定することができます。
最大のリソースリミットを上げるためには、サーバを
root
で実行するか起動されなければいけません。
この設定は Apache の子プロセス自体ではなく、 リクエストを受け付けた Apache の子プロセスから fork されたプロセスに 適用されます。 これには CGI や SSI から実行されたコマンドが含まれますが、Apache の 親プロセスから fork されたログのパイププロセスなどには適用されません。
プロセスの制限は、ユーザあたりのプロセス数で制御されます。
CGI プロセスがウェブサーバのユーザ ID 以外で実行されるので
無ければ、
このディレクティブは、サーバ自身が生成できるプロセスの数を制限することになります。
そのような状況になっているかどうかは、error_log
中の
cannot fork
というメッセージにより
確認することができます。
All
か Any
です。このディレクティブはある場所へのアクセスがユーザ名/パスワード
とクライアントのホストのアドレスで制限されているときにのみ
役立ちます。デフォルトの動作 (All
) はクライアントがアドレスによる
アクセス制限を満たし、かつ正しいユーザ名とパスワードを入力することを
要求します。Any
では、クライアントはホストの制限を満たすか、
正しいユーザ名とパスワードの入力をするかをすればアクセスを許可されます。
これは、ある場所をパスワードで保護するけれど、特定のアドレスからの
クライアントにはパスワードの入力を要求せずにアクセスを許可する、
というようなときに使用できます。
例えば、同じネットワーク上にいる人にはウェブサイトのある部分について 無制限のアクセスを許したいけれど、外のネットワークの人には パスワードを提供させるようにするためには、次のような設定をすることが できます:
Registry-Strict
は Apache 2.0 以降で使用可能このディレクティブは、Apache で CGI スクリプトを
実行する場合に利用するインタープリタを、
どのように探し出すかについて制御するために使用します。
デフォルトの設定は Script
です。これはスクリプトの
shebang 行 (最初の行で #!
から始まるもの)
に指されているインタープリタを使用します。Win32 ではその行は
以下の様になります。
もしくは、perl が PATH
にある場合は単に:
ScriptInterpreterSource Registry
を指定すると、
スクリプトファイルの拡張子 (例えば、.pl
) を
キーとして、Windows のレジストリツリー HKEY_CLASSES_ROOT
を検索するようになります。レジストリのサブキー
Shell\ExecCGI\Command
か、それが存在しない場合は
Shell\Open\Command
がスクリプトファイルを開くために
使われます。レジストリキーが見つからないときは、Apache は Script
オプションが指定されたときの動作に戻ります。
ScriptInterpreterSource Registry
を Registry
という設定は通常は実行されない
ファイルに対して望ましくないプログラムの実行が発生する可能性があります。
例えば、ほとんどの Windows システムで、
.htm
ファイルのデフォルトの「開く」コマンドは
Microsoft Internet Explorer を実行しますので、スクリプトに指定された
ディレクトリにある .htm
ファイルへのリクエストはサーバの
バックグラウンドでブラウザを実行することになります。これは、一分内くらいで
システムをクラッシュさるための良い方法です。
Apache 2.0 から導入されたオプション Registry-Strict
は
Registry
と同じことを行ないますが、サブキー
Shell\ExecCGI\Command
のみを使います。
ExecCGI
キーは普通に使われるキーではありません。Windows
レジストリに手動で設定する必要がありますので、システムでの偶発的なプログラムの
実行を防ぐことができます。
その際、これのために専用のアドレスを設定するのが良いでしょう。 例えば、
といったようにします。ユーザはいつもサーバに関する話であるということを 明記してくるわけではありませんので。
simple.example.com
で、DNS のエイリアス www.example.com
もあるときに、
ウェブサーバが後者として認識されて欲しいときは、以下のようにディレクティブを
使います。
名前ベースのバーチャルホスト
を利用している場合、
自己参照 URL (例えば
conf/
や logs/
といったサブディレクトリが
存在します。
また、他の設定ファイルにおける相対パスは、このディレクトリからとなります。
httpd
の -d
オプションデフォルトである Off
に設定をすると、フッタ行が抑制されます
(そして、Apache-1.2 以前と互換の動作をします)。
On
に設定した場合は、単にドキュメントの中に、サーバのバージョン、
稼動中のバーチャルホストの ServerName の書かれた行を追加し、
EMail
にした場合はさらに参照されたドキュメントに対する ServerAdmin を指す "mailto:" が追加されます。
バージョン 2.0.44 以降ではこのディレクティブは
このディレクティブは、クライアントに送り返す Server
応答ヘッダ内に、サーバの一般的な OS 種別や、
コンパイルされて組み込まれているモジュールの情報を
含めるかどうかを指定します。
ServerTokens Prod[uctOnly]
Server:
Apache
といったように送ります。ServerTokens Major
Server:
Apache/2
ServerTokens Minor
Server:
Apache/2.0
ServerTokens Min[imal]
Server:
Apache/2.0.41
といったように送ります。ServerTokens OS
Server: Apache/2.0.41
(Unix)
といったように送ります。ServerTokens Full
(もしくは未指定)Server: Apache/2.0.41
(Unix) PHP/4.2.2 MyMod/1.2
といったように送ります。この設定はサーバ全体に適用され、バーチャルホスト上で有効にしたり 無効にしたりはできません。
バージョン 2.0.44 以降ではこのディレクティブは
.htaccess
や .htaccess
ファイルに記述します:
別の例: URL http://servername/status
が指定されたときにサーバが状態報告をするようにしたいときは、以下を
httpd.conf
に記述します:
None
という値を設定することで、
前の方の
複数のフィルタを指定するときは、データを処理する順番に セミコロンで区切る必要があります。
例えば、以下の設定は /www/data/
ディレクトリのすべての
ファイルを SSI で処理します。
複数のフィルタを指定するときは、データを処理する順番に セミコロンで区切る必要があります。
将来には別々の設定をすることが可能にできるよう考慮中です。 Apache 1.2 以前はタイマーは 1200 がデフォルトでしたが、 300 に下げられました。300 でもほとんどの場合は十分すぎる値です。 コード中の変な場所にまだパケットを送る際にタイマをリセットしない 場所があるかもしれないので、デフォルトをより小さい値にはしていません。
多くの状況で Apache は自己参照 URL、すなわち
同じサーバを指す URL、を作成する必要があります。
UseCanonicalName On
を使うと (1.3 より前の
すべてのバージョンでも) Apache は ServerName ディレクティブと Port
ディレクティブを使ってサーバの正式な名前を作成します。
この名前がすべての自己参照 URL で使われ、CGI の SERVER_NAME
と SERVER_PORT
にも使われます。
UseCanonicalName Off
では Apache は
クライアントがホスト名とポートを提供した場合には自己参照 URL を
それらを元に作成します (提供されていない場合は上で定義されているように
正式な名前を使います)。
これらの値は名前ベースの
バーチャルホストを実装するのに使われているのと同じ値で、
同じクライアントから取得できる値です。CGI 変数 SERVER_NAME
と SERVER_PORT
もクライアントから与えられた値から
作成されます。
これが有用な場合の例は、イントラネットのサーバで、www
の
ような短い名前でユーザがマシンに接続しているときです。
ユーザが短い名前を入力して、URL が最後のスラッシュ無しのディレクトリ
へのものであるときに、Apache はリクエストを
http://www.domain.com/splat/
へリダイレクトすることに
気付くでしょう。認証をするように設定していると、この場合
ユーザは 2 回認証をしなければならなくなります (www
に
対して 1 回、www.domain.com
に対してもう一回 --
より詳しい情報は この話題の
FAQ を参照してください)。
しかし、Off
になっていると、
Apache は htttp://www/splat/
にリダイレクトします。
三つ目のオプション UseCanonicalName DNS
は、
Host:
ヘッダを提供しない古いクライアントをサポートした
大規模な IP ベースのバーチャルホスティングで使用されることを
意図しています。このオプションでは、Apache はクライアントが
接続した IP アドレスに DNS の逆引きを行なって自己参照 URL を
作成します。
CGI が SERVER_NAME
に
関する仮定を行なっているときは、このオプションの設定で動作しなく
なるかもしれません。クライアントは実質的にはホスト名にとして
何でも望みの値を指定することができます。CGI が
SERVER_NAME
のみを使って自己参照 URL を作成している
場合はどの設定を行なっても大丈夫なはずです。
</VirtualHost>
は、
特定のバーチャルホストに対してのみ適用されるディレクティブ群を括る
ために使われます。
バーチャルホストコンテキストで許可される全てのディレクティブを指定可能です。
サーバが、指定されたバーチャルホストにあるドキュメントへの
リクエストを受け付けた場合、
NameVirtualHost *
と共に使われる、
すべての IP アドレスにマッチする文字 *
_default_
IPv6 アドレスはオプションのポート番号の指定と区別するために、 角括弧で括って指定する必要があります。次は IPv6 の例です:
各々のバーチャルホストにはそれぞれ違う IP アドレス、ポート番号
もしくはホスト名に対応する必要があり、
1 番目の場合には複数のアドレスで IP パケットを受信できるように
サーバマシンを設定しなければなりません。
(もし、マシンが複数のネットワークインターフェースと持たない場合は、
(OSがサポートしていれば) ifconfig alias
コマンドにより
達成できます)。
:port
といった形式で記述することにより、
マッチさせるポートを変更可能です。
この指定をしない場合には、主サーバ設定における
一番最後に Port
で指定されたポートが
デフォルトとなります。
:*
を指定することにより、
アドレス上の全てのポートにマッチします。(_default_
のときは
これを使うことが推奨されています。)
セキュリティに関して: サーバーを起動した以外のユーザがログファイルが保管されるディレクトリに 書き込み可能なときになぜセキュリティが破られる可能性があるかの詳細は セキュリティに関するコツ を 参照してください。
IP ベースのバーチャルホストを使っている場合は、特別な名前
_default_
を指定することができます。その場合は
そのバーチャルホストは他のバーチャルホストで明示的に挙げられていない
すべての IP アドレスにマッチします。_default_
バーチャルホストが無い
場合に IP がバーチャルホストで指定されたものにマッチしないときは、
VirtualHost セクションの外のすべての定義からなる「主」サーバ設定が
使われます。(ただし、_default_
バーチャルホストも
使わないことに注意してください。詳しくは ネームベースのバーチャルホスト を
参照してください。)
:port
といった形式で記述することにより、
マッチさせるポートを変更可能です。
この指定をしない場合には、主サーバ設定における
一番最後に :*
を指定することにより、
アドレス上の全てのポートにマッチします。(_default_
のときは
これを使うことが推奨されています。)
:port
といった形式で記述することにより、
マッチさせるポートを変更可能です。
この指定をしない場合には、主サーバ設定における
一番最後に Port
で指定されたポートが
デフォルトとなります。
:*
を指定することにより、
アドレス上の全てのポートにマッチします。(_default_
のときは
これを使うことが推奨されています。)
サーバーを起動した以外のユーザがログファイルが保管されるディレクトリに 書き込み可能なときになぜセキュリティが破られる可能性があるかの詳細は セキュリティに関するコツ を 参照してください。