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 が有効なファイルにマップすれば
受け付けられます。DefaultPATH_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 個以上のものを指定できます。
AllMultiViews を除いた全ての機能が有効となります。
これがデフォルトです。ExecCGIFollowSymLinksサーバがシンボリックリンクをたどる場合でも、
このオプションを省略したからといってセキュリティの強化にはなりません。 なぜなら symlink の検査はレースコンディションを引き起こす可能性があり、 そのため回避可能になるからです。
IncludesIncludesNOEXEC#exec コマンド と #exec CGI は無効になります。
ただし、#include virtual により、Indexesindex.html) が
ディレクトリ内に無ければ、MultiViewsSymLinksIfOwnerMatchこのオプションはセキュリティの強化にはなりません。 なぜなら 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 MajorServer:
Apache/2ServerTokens MinorServer:
Apache/2.0ServerTokens Min[imal]Server:
Apache/2.0.41 といったように送ります。ServerTokens OSServer: 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 リクエストを受け付けます。
TraceEnale 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_ のときは
これを使うことが推奨されています。)
サーバーを起動した以外のユーザがログファイルが保管されるディレクトリに 書き込み可能なときになぜセキュリティが破られる可能性があるかの詳細は セキュリティに関するコツ を 参照してください。