Listen しているソケットに対して、OS が固有に持っているプロトコルについての最適化を
有効にするディレクティブです。大前提となる条件は、データが受信されるか
HTTP リクエスト全体がバッファされるかするまで、カーネルがサーバプロセスに
ソケットを送らないようになっている、ということです。現在サポートされているのは、
FreeBSD の Accept Filter と Linux のプリミティブな
TCP_DEFER_ACCEPT
のみです。
FreeBSD のデフォルト値は :
httpready
Accept Filter は HTTP リクエスト全体を、
カーネルレベルでバッファリングします。リクエスト全体を受信し終わると、
その後サーバプロセスにそれを送ります。詳細については accf_http(9)
を参照してください。HTTPS のリクエストは暗号化されているので accf_data(9)
フィルタのみが使用されます。
Linux でのデフォルト値は :
Linux の TCP_DEFER_ACCEPT
は HTTP リクエストのバッファリングを
サポートしていません。none
以外の値で
TCP_DEFER_ACCEPT
が有効になります。詳細については Linux
man ページ tcp(7)
を参照してください。
引数に none
を指定すると、プロトコルに対する全ての Accept
Filter が無効になります。nntp
といった、先にサーバにデータを
送る必要のあるプロトコルに有効です :
このディレクティブは実際のファイル名 (もしくは存在するディレクトリの
存在しないファイル) の後に続くパス名情報があるリクエストを受け付けるか
拒否するかを制御します。続きのパス名情報はスクリプトには 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-handler のようにスクリプトを扱うハンドラは
一般的にデフォルトで PATH_INFO
を受け付けます。AcceptPathInfo
の主な目的はハンドラの PATH_INFO
を
受け付けるか拒否するかの選択を上書きできるようにすることです。
例えば、これは例えば INCLUDES のような
フィルタを使って PATH_INFO
に
基づいてコンテンツを生成しているときに必要になります。
コアハンドラでは通常拒否されるので、そういったスクリプトを動作させるには
次のような設定を使います。
リクエストを処理するとき、サーバはディレクトリに 対して分散設定ファイルが有効になっていれば、 そのドキュメントへの パス上にある全てのディレクトリから、ここで指定された名前の一覧の中で 最初に見つかったファイルをそれぞれ設定ファイルとして読み込みます。例えば:
という設定があると、以下のようにして無効にされていない限り、
ドキュメント /usr/local/web/index.html
を返す前に、サーバは /.acl
, /usr/.acl
,
/usr/local/.acl
, /usr/local/web/.acl
から
ディレクティブを読み込みます。
text/plain
あるいは
text/html
の場合に追加するデフォルトの charset パラメータレスポンスのコンテントタイプが text/plain
あるいは text/html
の場合に限りますが、レスポンスに追加するメディアタイプの文字セットパラメータ
(文字エンコーディングの名前) のデフォルト値を、このディレクティブで指定します。
これはレスポンス META
要素で指定された、どのような文字セットも無効にしますが、
最終的な挙動はユーザのクライアント側の設定で決まります。
この機能は AddDefaultCharset Off
という設定で無効になります。
AddDefaultCharset On
にすれば、
Apache 内部のデフォルト文字セット iso-8859-1
に設定されます。
その他 charset に指定できる値であれば、どんな値でも使えます。
指定する値は、MIME メディアタイプとして使われる
IANA
に登録されている文字セット名のうちの一つにすべきです。
例えば:
このディレクティブは応答の
次の例は DEFLATE
フィルタを
使っています。text/html
と text/plain
の
すべての出力 (静的なものも動的なものも) をクライアントに送られる前に
圧縮します。
複数のフィルタでコンテンツを処理させたいときは、それぞれの名前をセミコロンで
分ける必要があります。各フィルタに対して
次の例は text/html
のスクリプトのすべての出力を
まず INCLUDES
フィルタで処理し、さらに DEFLATE
フィルタにかけます。
しかし、確実にフィルタが適用されるようにしたいときは、リソースに
明示的にコンテントタイプを割り当てることができます。これには例えば
/
は %2F
、さらにシステムによっては
\
に対応する %5C
) が存在する URL の使用を
許可するかどうかを決定します。通常はそのような URL は 404 (Not found) エラー
で拒否されます。
On
による
パス分離文字の使用は、PATH_INFO
と合わせて
使うときに一番役に立ちます。
符号化されたスラッシュを許可することは、復号をすることを
意味しません。%2F
や (関係するシステムでの)
%5C
は、他の部分が復号された URL の中でもそのままの形式で
残されます。
.htaccess
で許可されるディレクティブの種類サーバが (.htaccess
ファイルを見つけた時、そのファイルの中で
宣言されたどのディレクティブがより前に定義された設定ディレクティブを
上書きできるかを知る必要があります。
このディレクティブを None
に設定すると、.htaccess ファイルは完全に
無視されます。
この場合、サーバはファイルシステムの .htaccess
ファイルを読むことを
試みさえしません。
このディレクティブが All
に設定されている時には、
.htaccess
という コンテキスト を持つ
全てのディレクティブが利用できます。
directive-type には、以下のディレクティブ群の キーワードのどれかを指定します。
例:
上の例では AuthConfig
と Indexes
のどちらにも
属さないディレクティブはすべて内部サーバエラーを引き起こします。
このディレクティブは Apache が CGI スクリプトを実行するための
インタープリタを探す方法を制御します。
例えば、CGIMapExtension sys:\foo.nlm .foo
と設定すると
.foo
という拡張子のすべての CGI スクリプトは FOO インタープリタに
渡されます。
Content-MD5
HTTP 応答ヘッダの生成を有効にするこのディレクティブは、RFC1864 及び RFC2616 において定義されている
Content-MD5
ヘッダーの生成を有効にします。
MD5 は、任意長のデータの「メッセージダイジェスト」(「指紋」 と表現されることもある) を計算するアルゴリズムで、 データの変更があった場合には非常に高い信頼度でメッセージダイジェストに変更が 反映されます。
Content-MD5
ヘッダは、エンドツーエンドで
エンティティボディーに含まれるメッセージの完全性チェック
(Message Integrity Check - MIC)を提供します。
このヘッダを調べることで、プロキシやクライアントは、
途中経路におけるエンティティボディの予期せぬ変更などを
検出することができます。ヘッダの例:
リクエスト毎にメッセージダイジェストを計算する (値はキャッシュされません) ことから、 サーバパフォーマンスが低下することについて注意してください。
Content-MD5
は、
none
は Apache 2.2.7 以降で利用可能サーバは、
サーバは、ドキュメントのコンテントタイプをクライアントに通知するべきです。
サーバで通常の方法ではこれが判定できない場合は、
DefaultType
で指定されたタイプを利用します。
例:
これは .gif
という拡張子がファイル名に含まれていない
多くの GIF 画像が含まれているディレクトリに適しているでしょう。
サーバでも管理者でも判定することができない (例えばプロクシの) 場合、 誤った情報を与えるよりは MIME タイプの指定がない状態が望ましいことも あります。この場合は次のようにします :
DefaultType None
は httpd-2.2.7
以降でのみ利用できます。
-D
引数と同じものです。
このディレクティブを使うと、スタートアップスクリプトに
記載されている -D
引数を書き換える必要なく、
指定されたディレクトリとそのサブディレクトリにのみ
ディレクティブを適用させるためには、
</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/dir/.htaccess
の順にそれらのファイル中の
FileInfo ディレクティブが適用される。正規表現は、通常のセクションがすべて適用されるまで 考慮されません。 その後、全ての正規表現が設定ファイルに現れた順で試されます。 例えば、以下のような場合に
正規表現のセクションはすべての通常の .htaccess
の適用が終わるまで考慮されません。
その後で、正規表現は /home/abc/public_html/abc
にマッチし、
対応する
Apache のデフォルトでは <Directory />
へのアクセスは
Allow from All
になっていることに注意してください。
これは、URL からマップされたどのファイルでも Apache は送るということです。
これは以下のようにして変更することが推奨されています。
そしてアクセスを可能にしたいディレクトリに対して 個別に設定すればよいでしょう。 このあたりについては、セキュリティに関するコツを 参照してください。
ディレクトリセクションは httpd.conf
ファイルに書きます。
</DirectoryMatch>
は指定されたディレクトリと
そのサブディレクトリにのみ適用されるディレクティブ群を囲います。
しかし、このディレクティブは引数として
は /www/
以下にある数字 3 文字のディレクトリにマッチします。
このディレクティブは、
この場合、
http://www.my.host.com/index.html
へのアクセスがあれば
/usr/web/index.html
が返されます。
directory-path が絶対パスでない場合は、
このディレクティブは配送中にファイルの内容を読み込む必要があるときに
このメモリマップは性能の向上をもたらすことがあります。 しかし、環境によっては運用上の問題を防ぐためにメモリマッピングを 使用しないようにした方が良い場合もあります:
これらの問題に当てはまるサーバの設定の場合は、以下のようにして ファイルの配送時のメモリマッピングを使用不可にしてください:
NFS マウントされたファイルには、問題のあるファイルにのみ明示的に この機能を使用不可にします:
このディレクティブはクライアントにファイルの内容を送るときに
sendfile は read と send を別々に行なうことと、バッファの割り当てを 回避します。しかし、プラットフォームやファイルシステムの中には 運用上の問題を避けるためにこの機能を使用不可にした方が良い場合があります:
これらの問題に当てはまるサーバの設定の場合は、以下のようにして この機能を使用不可にしてください:
NFS や SMB マウントされたファイルには、問題のあるファイルにのみ明示的に この機能を使用不可にします:
問題やエラーが発生したときの動作として、 Apache には以下の四つのうち一つの動作を設定することができます。
最初のものがデフォルトの動作で、2 番目から 4 番目は、
URL の場合は、スラッシュで始まる (/) ローカルの web-path (
加えて、特別な値 default
を使って Apache に
ハードコードされている簡単なメッセージを指定することができます。
通常は必要ではありませんが、default
を使うと
既存の
リモート URL (例えば、頭に http
と付与した方法) を
ErrorDocument 401
にリモートの URL を指定すると、
クライアントは 401 というステータスコードを受け取らないため、
パスワードをユーザーに入力要求しなければならないことがわかりません。
従って、ErrorDocument 401
というディレクティブを使う場合は、
必ずローカルな文書を参照しなければなりません。
Microsoft Internet Explorer (MSIE) はデフォルトではサーバが生成したエラーメッセージが 「小さすぎる」ときには無視をして自分自身の「やさしい」エラーメッセージで 置換します。サイズのしきい値はエラーの種類によって異なりますが、 一般的にはエラーの文書を 512 バイトよりも大きくすると、MSIE は サーバが生成したエラーを隠さずに表示します。詳しい情報は Microsoft Knowledge Base の記事 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
と同じになります。
INode MTime Size
の固定フォーマットを使っています。
ETag
フォーマットを
変更してしまうと、条件付リクエストでうまく動作しなくなります。
</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
サブディレクトリに
インストールされる
上記例は Host: ヘッダの存在しない HTTP/1.0 のリクエストに マッチします。
<IfDefine test>...</IfDefine>
セクションは、
ディレクティブを条件付きで指定するために利用します。
!
parameter-name前者の場合には、parameter-name と名付けられたパラメータが 定義されていれば開始と終了の間のディレクティブが処理されます。 後者の場合は逆で、parameter-name が指定されていない 場合に処理されます。
parameter-name 引数は、サーバを起動する際に
-Dparameter
という形で指定するか
あるいは
<IfModule test>...</IfModule>
セクションは、モジュールが存在するときに処理されるディレクティブを
指定するために利用します。
前者の場合は、module と名付けられたモジュールが
Apache に組み込まれていれば
(コンパイル済みのものと、
module 引数は、モジュール識別子か
コンパイルをした時のモジュールのファイル名です。
例えば、rewrite_module
は識別子で
mod_rewrite.c
はファイル名です。
モジュールが複数のソースファイルから構成されている場合は、文字列
STANDARD20_MODULE_STUFF
があるファイルの名前を
使ってください。
このディレクティブにより、サーバの設定ファイルから 他の設定ファイルをインクルードすることができます。
複数のファイルをアルファベット順に一度に読み込むために、
シェル形式 (fnmatch
) のワイルドカード文字を使うことができます。
さらに、httpd
が読み込みに失敗するような
一時ファイルをディレクトリに残してしまうようなことがよくあるからです。
指定するファイルパスは絶対パスか、
例:
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 に対応したクライアントの際には、 特に指定されない限りはデフォルトとして持続的な接続が行なわれます。 クライアントが要求すれば、コンテンツの容量を判別できないものを 持続的な接続を通して送るために、チャンクエンコーディングが用いられます。
クライアントが Keep-Alive コネクションを使用している場合、 そのコネクションを通してどれだけたくさんのリクエストが処理されても、 それは「リクエスト」1 つとして、MaxRequestsPerChild ディレクティブでは 数えられます。
接続を閉じる前に、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 と指定されています)。
このディレクティブは、 管理者にクライアントからの異常なリクエストを制御できるようにし、 何らかの形のサービス拒否攻撃 (訳注:DoS) を避けるのに有効です。 リクエストのフィールドが多過ぎることを意味するエラー応答が 普通のクライアントに返されるような時はこの値を増やしてください。
例:
このディレクティブは、HTTP リクエストヘッダ一つで受付ける バイト数 bytes を指定します。
このディレクティブは、 管理者にクライアントからの異常なリクエストを制御できるようにし、 何らかの形のサービス拒否攻撃 (訳注:DoS) を避けるのに有効です。
例:
このディレクティブは、HTTP リクエスト行内で許容されるバイト数 bytes を指定します。
GET
リクエストのクエリ部分も含めて、リソースの名前が入るに足る
大きさを必要とします。
このディレクティブは、 管理者にクライアントからの異常なリクエストを制御できるようにし、 何らかの形のサービス拒否攻撃 (訳注:DoS) を避けるのに有効です。
例:
XML 形式のリクエストのボディの最大値を (バイト単位で) 制限します。
値に 0
を指定するとチェックを無効にします。
例:
</Location>
ディレクティブで終了する
サブセクションを開始します。
.htaccess
の読み込みの後、
<Location />
で、これはサーバ全体に対して
設定を適用する簡単な方法です。
全ての (プロキシ以外の) リクエストに対し、
URL は /path/
という、
接頭辞 http://servername
を含まない形でマッチします。
プロキシリクエストの場合には、scheme://servername/path
という接頭辞を含む形でマッチし、接頭辞を含めて指定する必要があります。
URL にはワイルドカードを利用することができます。
?
は任意の一文字、*
は任意の文字列にマッチします。
どちらのワイルドカードも URL パス中の / にはマッチしません。
~
という文字を追加することで、
は URL に /extra/data
か /special/data
という文字列が
含まれている場合にマッチします。
example.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
サーバがシンボリックリンクをたどる場合でも、
このオプションを省略したからといってセキュリティの強化にはなりません。 なぜなら symlink の検査はレースコンディションを引き起こす可能性があり、 そのため回避可能になるからです。
Includes
IncludesNOEXEC
#exec
コマンド と #exec CGI
は無効になります。
ただし、#include virtual
により、Indexes
index.html
) が
ディレクトリ内に無ければ、MultiViews
SymLinksIfOwnerMatch
このオプションはセキュリティの強化にはなりません。 なぜなら symlink の検査はレースコンディションを引き起こす可能性があり、 そのため回避可能になるからです。
通常、ディレクトリに対して複数の +
や -
付きで
指定された場合はオプションの値はマージされます。
+
を頭につければ現在の設定に加えられ、
-
を付ければ現在の設定から削除されます。
+
や
-
のついたものを、つけないものと組み合わせて
指定する構文は正しい構文ではありませんので、期待する結果に
ならないことがあります。
例えば、+
や -
を利用しない場合は:
/web/docs/spec
というディレクトリには、
Includes
だけが適用されます。
しかし、2 番目の +
や -
を利用してみると:
/web/docs/spec
というディレクトリには、 FollowSymLinks
と
Includes
が適用されます。
-IncludesNOEXEC
もしくは
-Includes
を指定すると、
前の設定がどのようになっていようとも SSI は無効となります。
どのような設定もされていなければ、デフォルトでは All
に
なります。
一つか二つのパラメータをとります。
最初のパラメータは全プロセスに対するリソースのソフトリミットを設定し、
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
というメッセージにより
確認することができます。
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
レジストリに手動で設定する必要がありますので、システムでの偶発的なプログラムの
実行を防ぐことができます。
httpd
が
URL と認識しない場合は、email-address だと解釈して、
ハイパーリンクのターゲットに mailto:
を付けます。
実際には、ここには電子メールアドレスを使うことが推奨されています。
多くの CGI スクリプトはそうなっていることを仮定しています。
URL を使う場合は、あなたの管理下にある別サーバを指すようにしてください。
そうでないと、エラーが起こったときに連絡をすることができなくなって
しまいます。
その際、これのために専用のアドレスを設定するのが良いでしょう。 例えば、
といったようにします。ユーザはいつもサーバに関する話であるということを 明記してくるわけではありませんので。
simple.example.com
で、DNS のエイリアス www.example.com
もあるときに、
ウェブサーバが後者として認識されて欲しいときは、以下のようにディレクティブを
使います。
名前ベースのバーチャルホスト
を利用している場合、
SSL を処理するデバイス、例えばリバースプロクシやロードバランサや
SSL 処理軽減アプライアンスの裏側でサーバが稼動する場合もあるでしょう。
そういった場合では、クライアントが接続するときに使う
https://
スキームとポート番号を
自己参照 URL (例えば
conf/
や logs/
といったサブディレクトリが
存在します。
また、他の設定ディレクティブ (例えば
httpd
の -d
オプションデフォルトである Off
に設定をすると、フッタ行が抑制されます
(そして、Apache-1.2 以前と互換の動作をします)。
On
に設定した場合は、単にドキュメントの中に、サーバのバージョン、
稼動中のバーチャルホストの ServerName の書かれた行を追加し、
EMail
にした場合はさらに参照されたドキュメントに対する ServerAdmin を指す "mailto:" が追加されます。
バージョン 2.0.44 以降では、表示されるサーバーのバージョン番号の詳細は
Server
HTTP 応答ヘッダを設定するこのディレクティブは、クライアントに送り返す 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
という値を設定することで、
前の方の
注意:SetHandler はデフォルトのハンドラをオーバーライド しますので、通常の挙動、たとえば、スラッシュ (/) で終わる URL が リクエストされたときにディレクトリやインデックスファイルを返すよう取り扱う挙動は、 行われなくなります。
複数のフィルタを指定するときは、データを処理する順番に セミコロンで区切る必要があります。
例えば、以下の設定は /www/data/
ディレクトリのすべての
ファイルを SSI で処理します。
複数のフィルタを指定するときは、データを処理する順番に セミコロンで区切る必要があります。
TRACE
メソッドのリクエストに対する応答方法を決める
Apache のコア機能TRACE
の挙動をオーバーライドします。デフォルトの TraceEnable on
は、リクエストボディを受け入れないような、RFC2616 に準拠した
TRACE
リクエストを受け付けます。
TraceEnable off
と設定すると、コアサーバと
405
(メソッド不許可)
エラーをクライアントに返します。
最後に、テストや調査目的などの限定用途として、仕様に準拠しない
TraceEnable extended
を使って、リクエストボディを
受け付けるように挙動を変更できます。(オリジンサーバとしての)
Apache のコアでは、リクエストボディのサイズは 64k (
Transfer-Encoding: chunked
が使われている場合は
chunk ヘッダ用に +8k) に制限されます。
Apache のコアは、ヘッダと全ての chunk ヘッダをレスポンスの
ボディとして返却します。
proxy サーバとしては、リクエストボディのサイズは 64k に制限されません。
多くの状況で Apache は自己参照 URL、すなわち
同じサーバを指す URL、を作成する必要があります。
UseCanonicalName On
の場合は、SERVER_NAME
と SERVER_PORT
でも使われます。
UseCanonicalName Off
の場合、
クライアントがホスト名とポートを指定したときには、
それらを元に自己参照 URL を作成します (指定がなかったときは
上の定義と同様にして正規名を解決します)。
これらの値は名前ベースの
バーチャルホストを実装で使われているのと同じ値で、
同じクライアントで取得できる値になっています。
CGI 変数 SERVER_NAME
と SERVER_PORT
もクライアントから与えられた値から作成されます。
このような挙動が便利な例は、イントラネットのサーバで www
のような短い名前でユーザがマシンに接続するときです。
ユーザの入力で短いホスト名が使われていて、URL が最後のスラッシュ無しの
ディレクトリになっている http://www/splat
のようなとき、
Apache はリクエストを http://www.domain.com/splat/
へリダイレクトします。
認証をするように設定していると、この場合
ユーザは 2 回認証をしなければならなくなります (www
に
対して 1 回、www.domain.com
に対してもう 1 回 --
詳細は この話題の
FAQ を参照してください)。
しかし Off
になっていると、
Apache は http://www/splat/
にリダイレクトします。
三つ目のオプション UseCanonicalName DNS
は、
大規模な IP ベースのバーチャルホスティングで、
Host:
ヘッダを提供しない古いクライアントを
サポートする場合を想定しています。
このオプションでは Apache は、クライアントが接続した IP アドレスに対して
DNS の逆引きを行なって、自己参照 URL を作成します。
CGI が SERVER_NAME
に関して何らかの前提条件を
仮定しているときには、このオプションの設定によっては動作しなく
なるかもしれません。クライアントは実質的にはホスト名として
何でも望みの値を指定することができます。CGI が
SERVER_NAME
を使って自己参照 URL を作成することしかしない
場合は、どの設定を行なっても大丈夫なはずです。
さまざまな局面で 自己参照 URL -- それ自体のサーバを参照する URL
を作ることになります。UseCanonicalPhysicalPort On
と設定すると、
UseCanonicalPhysicalPort Off
の場合は、実際の物理ポート番号は
使用せず、設定された情報を元にポート番号を決めます。
物理ポートが使われる場合の順番は次のようになっています:
UseCanonicalName On
ServerName
で指定されているポート番号UseCanonicalName Off | DNS
Host:
ヘッダをパースして取得されるポート番号ServerName
で指定されているポート番号UseCanonicalPhysicalPort Off
で、
物理ポート番号が上記の順序付けから除外されます。
</VirtualHost>
は、
特定のバーチャルホストに対してのみ適用されるディレクティブ群を括る
ために使われます。
バーチャルホストコンテキストで許可される全てのディレクティブを指定可能です。
サーバが、指定されたバーチャルホストにあるドキュメントへの
リクエストを受け付けた場合、
NameVirtualHost *
と共に使われる、
すべての IP アドレスにマッチする文字 *
_default_
IPv6 アドレスはオプションのポート番号の指定と区別するために、 角括弧で括って指定する必要があります。次は IPv6 の例です:
各々のバーチャルホストにはそれぞれ違う IP アドレス、ポート番号
もしくはホスト名に対応する必要があり、
1 番目の場合には複数のアドレスで IP パケットを受信できるように
サーバマシンを設定しなければなりません。
(もし、マシンが複数のネットワークインターフェースを持たない場合は、
(OSがサポートしていれば) ifconfig alias
コマンドにより
達成できます)。
IP ベースのバーチャルホストを使っている場合は、特別な名前
_default_
を指定することができます。その場合は
そのバーチャルホストは他のバーチャルホストで明示的に挙げられていない
すべての IP アドレスにマッチします。_default_
バーチャルホストが無い
場合に IP がバーチャルホストで指定されたものにマッチしないときは、
VirtualHost セクションの外のすべての定義からなる「主」サーバ設定が
使われます。(ただし、_default_
バーチャルホストも
使わないことに注意してください。詳しくは ネームベースのバーチャルホスト を
参照してください。)
:port
といった形式で記述することにより、
マッチさせるポートを変更可能です。
この指定をしない場合には、主サーバ設定における
一番最後に Port
で指定されたポートが
デフォルトとなります。
:*
を指定することにより、
アドレス上の全てのポートにマッチします。(_default_
のときは
これを使うことが推奨されています。)
サーバーを起動した以外のユーザがログファイルが保管されるディレクトリに 書き込み可能なときになぜセキュリティが破られる可能性があるかの詳細は セキュリティに関するコツ を 参照してください。