トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

Apache設定ファイル

Apache

[Apache]
最終更新時間:2009年12月23日 21時05分51秒

Apache設定ファイル

 必須ではないけど、そこそこ必要な情報の設定

Apacheが待ち受けるポート番号
 Listen 80
管理者のメールアドレス
 ServerAdmin hoge@kichon.net
サーバー名の指定(エラー時に表示されるサーバ名とポート番号)
 ServerName www.kichon.net:80
ServerNameの有効化

※Onにすることでサーバ名としてServerNameを使用する

 UseCanonicalName On
他の設定ファイルの取り込み
 Include conf.d/*.conf

 ログファイルの設定

ログの出力先ファイルと出力情報の指定方法を記述する

ログの出力情報の指定

※詳細は別途説明。とりあえずLogFormatということを覚える。

 LogFormat "%h %l %u %t \"%r\%" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combine
ログの出力先ファイルの指定
 CustomLog logs/access_log combine
エラーログの出力先ファイルの指定
 ErrorLog logs/error_log

ログの出力先はServerRootという設定で指定された場所からのスタートになる。
例えば、

 ServerRoot /var/www/

の場合、ErrorLogは/var/www/logs/error_logになる。

 セッションコンテナ

DocumentRoot(※下記で説明)以下以外のフォルダにアクセスをしたい場合、
別な方法で指定してやる必要がある。
その際に使うのがセッションコンテナ。
↑は認識が違った。
セッションコンテナ自体はDocumentRoot以下のディレクトリやファイルを指定しても問題ない。
各ディレクトリ、ファイルに関する詳細な設定ができるという意味かな。
ちなみにDocumentRoot以外のディレクトリにアクセスをしたい場合は
Aliasを使う。
範囲という意味合いがあるらしい。

ディレクトリ<Directory>

ディレクトリ指定のコンフィグの解釈順は、まず正規表現のないディレクトリ指定で、
パス名の短い順に解釈されて、次に正規表現のあるディレクトリ指定の順に読み込まれる。

 <Directory "パス名">
   ・・・
 </Directory>
ファイル<Files>

ファイル指定のコンフィグの解釈順は、設定ファイルへの登場順に読み込まれる。

 <Files "ファイル名">
   ・・・
 </Files>
パス名<Location>

パス名指定のコンフィグの解釈順は、設定ファイルへの登場順に読み込まれる。

 <Location "URLパス名">
   ・・・
 </Location>

※セッションコンテナ同士の設定がかぶった場合、設定はディレクトリ名、
ファイル名、URLの順で解釈され、解釈される順番が後になる設定で上書きされる。

 ドキュメントルート

いちいちセッションコンテナを指定していると大変なため、
デフォルトでここ以下は読み込みますよという設定。

DocumentRoot
 DocumentRoot "/var/www/html"

この設定で/var/www/htmlはhttp://test.kichon.net/(ドメインはてきとー)にマッピングされる。
例えば/var/www/html/hoge.htmlにアクセスしたい場合、
http://test.kichon.net/hoge.htmlにアクセスすればよい。

 /var/www/html ⇔ http://test.kichon.net/

 ユーザ、グループの指定

apacheを実行するユーザとグループを指定する。
普通はapacheユーザ、apacheグループを使用する。

実行ユーザ、実行グループを指定
 User apache
 Group apache

 文字コード周りの設定

文字コード。。
いまだによくわからないけど、apacheのデフォルトではISO-8859-1が
使用されている為、このまま日本語を表示すると文字化けを起こす可能性がある。

デフォルトの文字コード
 AddDefaultCharset off

デフォルトの文字コードをoffにする。

 インデックスファイルの指定

いきなり例から入るが、あるサイトでhttp://test.kichon.net/
にアクセスすると自動的にページを解釈して表示できる。
この設定を行う。

インデックスファイルの指定
 DirectoryIndex index.htm index.html index.html.var

これでファイル名を指定しない場合は、index.htmかindex.htmlかindex.html.varが
自動的に読み込まれるようになる。
評価順は左からになる。

ファイル名一覧の非表示
 <Directory "/var/www/html">
   Options Indexes ←こいつ(Indexes)を削除
 </Directory>

たまにあるURLにアクセスすると、そのディレクトリ以下のファイルが全部見えるように
なっていることがある。
それはセキュリティ上あまりよろしくないので削除する。
この設定はインデックスファイルの指定がない場合にのみ効いてくるらしい。

 DocumentRoot以外のファイルを表示する

セッションコンテナのところで勘違いしてたやつです。
Aliasを指定することによって、DocumentRoot以下以外で
指定したフォルダも公開できるようにできる。

イメージが付かない場合は他のサイトを参照w

Aliasの指定

/usr/local/apache2/iconsディレクトリに/iconsでアクセスできるようにする。

 Alias /icons/ "/usr/local/apache2/icons/"
  • マッピング図
 http://hogehoge.kichon.net/icons/hoge.gif ⇔ /usr/loca/apache2/icons/hoge.gif

 データの種類

ブラウザはWebサーバから取得したデータをMIMEタイプをみて、
処理を判断する。
この場合の処理というのは、画像であれば画像を表示するし、
テキストであればテキストを表示するということ。
そのため、サーバ側でMIMEタイプを指定する必要がある。
どうやらApache側での設定は拡張子とMIMEタイプの対応を
書いてるみたい。
これを指定してあげることによって、ブラウザ側は処理の判断をする・・のかねw

MIMEタイプの指定

.htmlのファイルはtext/html(テキスト)として扱うように指定

 AddType text/html .html

 アクセス制御

意外と忘れるアクセス制御。
ここできちんと覚えてしまいましょう。

アクセス制御の設定

192.168.0.0/24以外からのアクセスは全て許可をする。

 <Directory "/var/www/html/test">
   Order allow, deny
   Allow from all
   Deny from 192.168.0.0/24
 </Directory>

ここで注意点をあげる

  • アクセス制御は必ず全て評価される
    • スイッチやファイアーウォールなどの設定は順番に評価されていって、対象のルールがあった時点でそれ以下の条件判断はしないが、Apacheのアクセス制御は全てのパターンを見る。(ここの違いが地味にめんどい。。)
  • アクセス制御の評価順はOrderの書き方に依存する。
    • allow, denyの順で書けば、allowが先に評価され、次にdenyが評価される。
    • deny, allowの順で書けば、denyが先に評価され、次にallowが評価される。


特定のホストからのアクセスを制御したい場合

 Order allow, deny
 Allow from all
 Deny from "特定のホスト"
特定のホストからのアクセスのみを許可したい場合
 Order deny, allow
 Deny from all
 Allow from "特定のホスト"

こういう風にまとめると楽に覚えられるなw

環境変数を設定してアクセス制御をかけることも可能。
詳細はApache_環境変数を参照。

 CGIを使う

cgiスクリプトを使えるように設定を行う。

CGI用の設定

cgiを使うためには主に3つの設定が必要になる。

  1. ScriptAliasの設定
    • CGIプログラムをがおかれるディレクトリを指定
  2. Optionsの設定
    • ExecCGIを指定して、CGIの実行を許可する
  3. AddHandlerの設定
    • 拡張子に".cgi"とついているファイルをcgiスクリプトとして扱う
 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
 <Directory "/var/www/cgi-bin">
   AllowOverride None
   Options ExecCGI
   Order allow, deny
   Allow from all
 <Directory>
 AddHandler cgi-script .cgi

詳細はApache Tutorial: CGI による動的コンテンツを読んでみよう!

 モジュール

モジュールを追加することによって、Apacheに追加機能をつけることができる。
なんでモジュール化をして提供するかというと、全ての機能をデフォルトのApache
組み込むと、必要のない機能(使う人によって異なる)によってApacheが肥大化されるため。

Apache2.2のモジュールはモジュール一覧を見てみよう!

 ログ

ログの取得方法に関してまとめる。

ログの取得方法

Apacheのログの取得方法は主に2つある。
1つ目はLogFormatで出力形式を設定し、CustomLogでログ出力ファイルを決定する方法。
LogFormatとCustomLogを結びつけるものとして一番最後に名前(下記の場合は"combine")を設定する。
2つ目はTransferLogを使う方法。
これに関してはまだ調べきれてないが、さらっと見た感じそんなに難しいことはやってない。

 LogFormat "%h %l %u %t \"%r"\ %>s %b \"%{Refere}i\" \"%{User-Agent}i\"" combine
 CustomLog logs/access_log combine
フォーマットの指定方法

LogFormatの中身を見ると%hとかわけのわからないものが書かれている。
これはログのフォーマット指定をしているもので主なものをいかに書く。

フォーマット 意味
%a リモートIPアドレス
%A ローカルIPアドレス
%B 送られたバイト数(ヘッダーを含まない)
%b 送られたバイト数(ヘッダーを含む)
%{クッキー名}C リクエスト中のクッキーの値
%{環境変数}e 環境変数の値
%f リクエストのファイル名
%h リモートホスト
%H リクエストのプロトコル
%{ヘッダー名}i リクエストのヘッダーの値
%l クライアントの識別情報
%m リクエストのメソッド
%{メモ}n モジュールから渡される値
%{ヘッダー名}o レスポンスヘッダーの値
%q クエリ文字列。空でなければ前に「?」が追加される
%r リクエストの最初の行
%s レスポンスのステータス。内部でリダイレクトされた場合は元のレスポンスのステータス
%>s 最後のレスポンスのステータス
%t 時刻
%{フォーマット}t フォーマットにもとづいた時刻
%T リクエストの処理にかかった時間(秒)
%u 認証したときのユーザ名
%U リクエストされたURLパス。クエリ文字列は含まない。
%v サーバー名
%V UseCanonicalNameの設定によるサーバ名
%X 応答が完了したときの接続ステータス。