Apacheのhttpd.confの’Main’ server configurationの設定内容について 中盤戦
ログの設定やエイリアスの設定など
同名の記事、その1から’Main’ server configuration内の設定の続き。
ログについての設定
ここではログの設定について残しています。
HostnameLookups Off ・・・・・・ (1) #EnableMMAP off ・・・・・・ (2) #EnableSendfile off ・・・・・・ (3) ErrorLog logs/error_log ・・・・・・ (4) LogLevel warn ・・・・・・ (5) LogFormat "<ログフォーマット>" combined ・・・・・・ (6) LogFormat "<ログフォーマット>" common ・・・ (省略) ・・・ #CustomLog logs/access_log common ・・・・・・ (7) ・・・ (省略) ・・・ CustomLog logs/access_log combined ・・・ (省略) ・・・
(1) ログを記録する際に、IPアドレスからDNSへの問い合わせを行い得られたホスト名でログを記録するかどうかを設定します。「On」「Off」「Double」が指定可能で、OnだとDNSへの問い合わせを行い、Doubleだとホスト名とIPアドレスの情報も合わせて取得します。
(2) ファイルの送信時にメモリマッピングを使用するかどうかを設定します。ファイルの途中のデータへアクセスする必要がある場合に、OSがサポートしていればファイルをメモリにマップし、性能を向上させることができるそうです。ただし、マルチプロセッサ環境でメモリマッピングを行うと性能が落ちたり、NFSなどのネットワーク環境下のファイルにアクセスする必要がある場合はhttpdがメモリマッピング中にファイルが削除されたときや短くなった時ににクラッシュする可能性があります。デフォルトはコメントアウトされており「On」の設定になっていますが、コメントアウトを外して「Off」にする方が安全です。
(3) ファイルの読み込み時に、OSのsendfile機能を使うかどうかを設定します。この設定はデフォルトでコメントアウトされて「On」の状態になっています。プラットフォームによっては壊れたsendfileを使用している場合や、IP v6環境や、NFSなどのネットワーク環境下へDocumentRootを設定している場合などは「Off」にします。
(4) エラーログの出力先を指定します。
(5) 出力するログのレベルを指定します。ログのレベルには以下の設定が存在します。
- emerg ・・・ 緊急事態・システムが利用できない
- alert ・・・ 緊急警告・直ちに対処が必要
- crit ・・・ 致命的な状態
- error ・・・ エラー
- warn ・・・ 警告
- notice ・・・ 正常だが重要な情報
- info ・・・ 追加情報
- debug ・・・ デバッグメッセージ
設定している項目より上位レベルのログ(緊急度の高いログ)を全て記録します。
(6) アクセスログのフォーマットと、フォーマット形式に対して任意の名称を付ける。「LogFormat <書き出すログの形式> <フォーマットのニ任意の名前>」という書き方でログのフォーマットと、そのフォーマットに対して任意の名前を付けています。
(7) ログのファイル名とフォーマットを指定します。「CustomLog <保存するログファイル> <LogFormatで付けたニックネームか、フォーマットそのもの>」という形式で設定を行います。
エイリアスの設定
Apacheで設定するエイリアスとは、ドキュメントルート以外の特定のディレクトリに対してApache内で管理される架空のパスを作る機能です。(ドキュメントルート以下のパスに対してエイリアスを設定しても良いかもしれませんが、あまり意味はないように思います。)
Linuxにはシンボリックリンクという機能があり(Windowsでもあるけど、あまり一般的ではない)、シンボリックリンクを使えば、システムのどのような機能からもディレクトリ(ファイル)にアクセスするのと同じアクセス方法で、リンクに設定されたディレクトリ(ファイル)へアクセスする事が可能になります。エイリアスもエイリアスを含んだURLにアクセスする事で設定されたディレクトリへアクセスできるようにする機能ですが、Apache以外からはエイリアスのパスのディレクトリを見ても何もなく(例えばFTPなどで対象のパスを確認しても何も見当たらない)、あくまで架空のパスによってURLの位置にディレクトリが存在しているのと同じように扱えるようにしたのがエイリアスという機能です。
Alias /icons/ "var/www/icons/" ・・・・・・ (8) <Directory "/var/www/icons"> ・・・・・・ (9) Options Indexes MultiViews FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> <IfModule mod_dav_fs.c> ・・・・・・ (10) # Location of the WebDAV lock database. DAVLockDB /var/lib/dav/lockdb </IfModule> ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" ・・・・・・ (11) <Directory "/var/www/cgi-bin"> ・・・・・・ (12) AllowOverride None Options None Order allow,deny Allow from all </Directory>
(8) エイリアスのパスの設定を行っています。フォーマットは「Alies <架空パス> <架空パスの先のディレクトリやファイル>」になります。上記の記述はクライアントのブラウザから、「http://~~.com/icons/」とアクセスすると、サーバー内でのディレクトリでは「/var/www/icons/」の下へアクセスしたのと同じ結果を返します。注意するべき点はディレクトリ名の最後に’/’を付ける事です。
(9) 「/var/www/icons」に対するアクセス制限を設定します。(他の設定の意味などはコチラを参照)
設定されている内容を簡単に説明すると、ディレクトリ内のリスト表示、ブラウザの言語設定に合わせたファイルの送信機能、シンボリックリンクのそれぞれを許可し、「.htaccess」による設定変更を無効化、IPなどによるアクセス制限は設けない。という設定を行っています。
(10) WebDAVのロックファイルの指定を行います。WebDAVとは、wwwサーバーを介してファイルのやり取りを行う機能で、Windowsのエクスプローラーでファイルの送受信が可能になります。ここで設定するのは複数のクライアントからの書き込みに対しての排他制御用のロックファイルの指定です。
※なぜ、こんなところにWebDAVの設定内容をhttpd.confで記述されているのか不明・・・
(11) スクリプトエイリアスの設定を行います。フォーマットはエイリアスと同様で「ScriptAlies <架空パス> <架空パスの先のディレクトリやファイル>」になります。ここで設定したパスはスクリプト(CGIプログラム)用のディレクトリとして扱われます。
(12) 「/var/www/cgi-bin」に対するアクセス制限を設定しています。(他の設定の意味などはコチラを参照)iconsのディレクトリとは異なり、リスト表示や言語別のファイルの送信などを一切禁止し、「.htaccess」による設定も禁止、IPなどによるアクセス制限は設けない。という設定を行っています。
その他の設定
# Redirect permanent /foo http://www.example.com/bar ・・・・・・ (13) IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8 ・・・・・・ (14) AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip ・・・・・・ (15) AddIconByType (TXT,/icons/text.gif) text/* ・・・ (省略) ・・・ AddIcon /icons/binary.gif .bin .exe ・・・ (省略) ・・・ DefaultIcon /icons/unknown.gif ReadmeName README.html ・・・・・・ (16) HeaderName HEADER.html IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t ・・・・・・ (17) AddLanguage ca .ca ・・・・・・ (18) ・・・ (省略) ・・・ LanguagePriority en ca cs・・・(省略)・・・ ForceLanguagePriority Prefer Fallback AddDefaultCharset UTF-8 ・・・・・・・・ (19) #AddType application/x-tar .tgz ・・・・・・ (20) ・・・ (省略) ・・・ AddType application/x-compress ・・・ (省略) ・・・ #AddHandler cgi-script .cgi ・・・・・・ (21) ・・・ (省略) ・・・ AddHandler type-map var AddType text/html .shtml AddOutputFilter INCLUDES .shtml ・・・・・・ (22)
(13) リダイレクトの設定を行います。(あるURLにアクセスされたリクエストを別のURLへ転送する)
記述形式は「Redirect <ステータス> <リダイレクトを適用するパス> <リダイレクト先>」というように設定します。なお、ステータスには以下のいずれかを指定します。
permanent | 適用されたパスの内容は、リダイレクト先へ永久的に移動したことを意味する。 |
temp | 適用されたパスの内容は、リダイレクト先へ一時的に移動したことを意味する。 |
seeother | 適用されたパスの内容が他へ置き換わったことを意味する。 |
gone | 適用されたパスの内容が永久的に削除されたことを意味する。(この場合にリダイレクト先の指定は不要) |
(14) ファイルをリスト表示する場合の設定を行います。本機能を有効にすると、ディレクトリ内の構造が見えてしまい、隠したいディレクトリなどが丸見えになってしまうので詳細は当サイトでは扱いません。
(15) ファイルをリスト表示した場合のアイコンの設定を行っています。
- AddIconByEncoding ・・・ MIMEタイプとアイコンを結び付け
- AddIconByType ・・・ MIMEタイプファイルにアイコンを結び付け
- AddIcon ・・・ ファイルの拡張子とアイコンの結び付け
- DefaultIcon ・・・ 上記のいずれにも属さないファイルとアイコンの結び付け
を、それぞれ行っています。
(16) ファイルをリスト表示した場合に、リスト表示の前(HeaderNameで指定したファイル)とリスト表示の後(ReadmeNameで指定したファイル)に挿入するファイル名を指定します。アクセスしたディレクトリにここで指定したファイルが存在するとリスト表示の前と後にそれぞれファイルの内容を挿入します。
(17) ファイルをリスト表示した場合に、表示しないファイルを指定します。
(18) MultiViews(詳しくはコチラ)のための設定です。
- AddLanguage ・・・ 言語の拡張子を定義
- LanguagePriority ・・・ 言語別ファイルの検索優先順位を指定
- ForceLanguagePriority ・・・ 返すファイルが複数あった場合のファイルの指定方法
を、それぞれ設定しています。
(19) デフォルトの文字コード(文字エンコーディング)を指定します。クライアントへのレスポンスが「text/plain」か「text/html」で文字コードを特定できない場合に、ここで指定した文字コードを返すことになります。「On(iso-8859-1)」「Off」「<文字コード名>」のいずれかで指定します。
(20) 拡張子とMIMEタイプを結び付けます。「AddType <MIMEタイプ> <拡張子(空白を入れての複数記述OK)>」という形式で指定し、拡張子には’.'(ピリオド)から始まる拡張子名を指定します。
(21) 拡張子とサーバの挙動(ハンドラ)を結び付けます。「AddHandler <ハンドラタイプ> <拡張子(空白を入れての複数記述OK)>」という形式で指定します。標準のハンドラは以下の通り。
ハンドラ名 | 内容 | 必要なモジュール |
default-handler | 静的なファイルを送信するときに使用するハンドラ | なし |
send-as-is | ファイルの先頭にHTTPヘッダを書いておいて、そのファイルをそのまま送信する | mod_asis |
cgi-script | ファイルをCGIスクリプトとして扱い、スクリプト(プログラム)を実行する | mod_cgi |
imap-file | 画像と座標位置などからimapファイルで指定したURLの応答を返すイメージマップファイルに指定するハンドラ | mod_imap |
server-info | サーバーの設定情報を送信するハンドラ | mod_info |
server-status | サーバーの状態を送信するハンドラ | mod_status |
type-map | type-mapファイルの情報に従い、状況に合わせたファイルを送信するようにするハンドラ(詳しくは公式へ) | mod_negotiation |
(22) サーバーがクライアントにファイルを送信する前に処理(スクリプトの実行)が必要な拡張子について設定します。「AddOutputFilter <タイプ> <拡張子(空白を入れての複数記述OK)>」という形式で記入します。
なお、タイプには以下の設定があります。
- INCLUDES ・・・ SSIとして動作する拡張子を指定
- DEFAULT ・・・ 出力を圧縮する拡張子を指定
長くなってきたので、続きはその3で行います。
ログのフォーマット(カスタムログ書式)
ログフォーマット中に出てくる 「%~」 の役割についてまとめています。
%a | リモートのIPアドレス(リクエスト元のIPアドレス) |
%h | リモートのホスト名 |
%u | リモートのユーザー名(認証によるもので,%sが401の場合は意味がない可能性がある) |
%l | (identdをクライアントがサポートしていれば)リモートのログイン名 |
%A | ローカルIPアドレス |
%b | HTTPヘッダを除く、レスポンスのバイト数、0バイトの場合は「-」が記録される |
%B | HTTPヘッダを除く、レスポンスのバイト数 |
%I | HTTPヘッダを含む、リクエストのバイト数※大文字のI(アイ) |
%O | HTTPヘッダを含む、レスポンスのバイト数 |
%r | HTTPリクエストの最初の行(例:GET /dirname/filename.html HTTP/1.1) |
%D | リクエストを処理するのにかかった時間(マイクロ秒) |
%T | リクエストを処理するのにかかった時間(秒) |
%H | リクエストを受けたプロトコル名(TCPやUDPなど) |
%m | リクエストのメソッド(GETやPOSTなど) |
%p | リクエストを受け付けたポート |
%f | リクエストされたファイル名 |
%q | リクエスト時に渡されたクエリー(「?key=xxx」のようにファイル名の後ろに付いた文字列) |
%P | リクエストを受け付けたサーバーのプロセスID |
%s | リクエストされた際のステータス(「%>s」と書くことで最新のステータスを記録する) |
%t | リクエストを受けた時刻 |
%v | リクエストを処理する正式なServerName |
%V | UseCanonicalNameの設定によるサーバー名 |
%X | レスポンスが完了したときの接続ステータス |
%{name}c | サーバーに送られてきたnameの名前を持つCookieの値 |
%{name}i | サーバーに送られたHTTPリクエストのnameの値 |
%{name}o | レスポンスヘッダのnameの値 |
%{name}e | 環境変数nameの値 |
%{name}n | apacheにロードさせているモジュールが書き出しているノートのnameの値 |
%{format}P | リクエストを扱ったワーカーのプロセスIDかスレッドID |
%{format}t | formatの形式でリクエストを受けた時刻を記録 |
※%{name}のnameの部分は公式ではfoobarと書かれている。foobarは「任意の~」という意味を持つジャンク用語。
トラックバック & ピンバック