apacheの設定ファイルについて
あとで…を連発したうちの一つ、apacheの設定ファイルについて調べた。
うーん長いなw
というわけで、そもそもから。
apacheとは
フリーのWebサーバソフトウェア
Webサーバ全体の環境設定(Section 1: Global Environment)
ServerRoot "/etc/httpd"
Web サーバのルートになるディレクトリで、インストールした場所のパス。基本変更しない
ServerTokens Prod
エラーメッセージ出力時等のサーバ情報を制限。
下にいくにつれ情報が増える。
値 | 表示内容 | 例 |
---|---|---|
Prod | サーバ | Server: Apache |
Major | +メジャーバージョン | Server: Apache/2 |
Minor | +マイナーバージョン | Server: Apache/2.0 |
Min | +マイナーバージョン | Server: Apache/2.0.41 |
OS | +OS | Server: Apache/2.0.41 (Unix) |
Full | すべて | Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2 |
PidFile run/httpd.pid
httpd の PID を書き込むファイルを指定する。
つまり、/etc/httpd/run/httpd.pid がPidファイルとして指定。
基本変更しない
Timeout 60
タイムアウトするまでの秒数。基本変更しない
KeepAlive Off
HTTPセッションを一定時間保持する設定
ONにするとパフォーマンスが向上するため、変更する。
MaxKeepAliveRequests 100
受け付ける接続要求数の最大許容値。
可能な限り大きな値を指定(KeepAlive Onが必須)
この値を0にすると無制限になるが、基本しない。
KeepAliveTimeout 15
HTTPセッションを保っておく秒数
値を大きくすれば、クライアント側の快適さは向上するが、サーバへの負荷は大きくなる
<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 </IfModule>
preforkプロセス制御の設定
設定名 | 内容 |
---|---|
StartServers | 起動時に生成される子サーバプロセスの数 |
MinSpareServers | アイドルな子サーバプロセスの最小個数 |
MaxSpareServers | アイドルな子サーバプロセスの最大個数 |
ServerLimit | 設定可能なサーバプロセス数の上限 |
MaxClients | リクエストに応答するために作成される子プロセスの最大個数 |
MaxRequestsPerChild | 個々の子サーバが稼働中に扱うリクエスト数の上限 |
<IfModule worker.c> StartServers 4 MaxClients 300 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
workerスレッド制御の設定
設定名 | 内容 |
---|---|
StartServers | 起動時に生成される子サーバプロセスの数 |
MaxClients | リクエストに応答するために作成されるスレッドの最大個数 |
MinSpareThreads | アイドルなスレッド数の最小個数 |
MaxSpareThreads | アイドルなスレッド数の最大個数 |
ThreadsPerChild | それぞれの子プロセスに生成されるスレッド数の上限 |
MaxRequestsPerChild | 個々の子サーバが稼働中に扱うリクエスト数の上限0で無制限 |
Listen 80
Apacheが使用するポートを指定。基本はそのまま。
LoadModule hoge_module modules/mod_hoge.so
モジュールの読み込み
個々のモジュールはあとで調べてみよう
Include conf.d/*.conf
読み込む外部設定ファイルの設定
/etc/httpd/conf.d/ディレクトリにあるconf拡張子のファイルをすべて読み込む。
ExtendedStatus On
各リクエストに対して拡張ステータス情報を保存する。
有効にしておく
User apache Group apache
サーバーを実行するユーザとグループ。特に変更しない。
Apacheがインストールされるときに自動的に作成されるHTTP接続専用のシステムアカウント
メインのサーバの環境設定(Section 2: 'Main' server configuration)
ServerAdmin root@localhost
エラーページに表示する管理者メールアドレス。
ServerName localhost:80
サーバ名。
UseCanonicalName Off
サーバが自分自身を表す名前を作成する方法
On ServerNameで指定したポート番号とホスト名をクライアントに返す
Off クライアントから提供されたホスト名やポート番号をそのまま使用して返す
DNS Hostヘッダーをつけないクライアントをサポート(IPベースのバーチャルホストで使用されるのを想定)
DocumentRoot "/var/www/html"
ドキュメントルート
これより上位の階層へはアクセスできないが、SymbolicLink やalias を使用すれば、アクセスさせる事も可能
<Directory /> Options FollowSymLinks AllowOverride None </Directory>
サーバールート(/)に対しての設定
中身は後述
DirectoryIndex index.html index.php
/で終わるURLを指定した際にデフォルトで表示するファイルを指定
AccessFileName .htaccess
アクセス制御を行うためのファイルを指定。特に変更しない。
制限をかけたいディレクトリ内に置くことで、そのディレクトリに対して認証が行われる
Direcotryの設定で、AllowOverrideの値をAllかAuthConfigにする必要がある
<IfModule mod_userdir.c> UserDir disable #UserDir public_html </IFModule>
ユーザーディレクトリ機能を有効か無効に設定する
有効にした場合、
<Files ~ "^\.ht"> Order allow,deny Deny from all Satisfy All </Files>
ブラウザからアクセスできないファイルを指定。
TypesConfig /etc/mime.types
MIME タイプ設定ファイルのパスを指定。基本変更しない
DefaultType text/plain
MIMEタイプファイルに記述が無かった場合の指定
HostnameLookups Off
IPアドレスをホスト名に変換し(逆引き)、ログに記録する機能
#EnableMMAP off
配送中にファイルを読み込むためにメモリマッピングを使うかどうかの設定。
SSI(Server Side Include)実行時などに利用される。
#EnableSendfile off
ファイルのクライアントへの配送時にカーネルのsendfileサポートを使うかどうかの設定
Onにするとファイルアクセスが低減される。
Apacheが参照するファイルがNFS(Network File System)上にある場合はOffにしておく必要がある。
ErrorLog logs/error_log
エラーログを記録するファイルを指定
実際のファイルの場所は/var/log/httpd/error_log
特に変更する必要なし
LogLevel warn
エラーログに出力するメッセージのレベルを指定する。
レベルを下げすぎるとログ膨大になってしまう。
指定 | 内容 |
---|---|
emerg | 緊急事態。システムが利用不可 |
alert | 直ちに対応すべき必要がある |
crit | 致命的状態 |
error | エラー |
warn | 警告 |
notice | 重要な情報 |
info | 情報 |
debug | デバッグ情報 |
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent
ログファイルで使用する書式を設定する。基本変更しない
#CustomLog logs/access_log common #CustomLog logs/referer_log referer #CustomLog logs/agent_log agent CustomLog logs/access_log combined
クライアントからのアクセスログを記録するファイルを指定する
実際のファイルの場所は/var/log/httpd/access_log
特に変更する必要なし
ServerSignature off
エラーメッセージ等をクライアントに返す際のフッターラインの表示を指定
ONにすると、ServerTokensで設定された内容だけがサーバー情報として追加表示される。
EMailにすると、上記に加えてServerAdminで設定した連絡先も掲載される
OFFにすると、エラーメッセージ以外の情報はクライアント側に表示されない
Alias /icons/ "/var/www/icons/"
仮想ディレクトリの設定。ディレクトリのシンボリックリンクに相当する機能。
HTTPではアクセスを受け付けないディレクトリを、コンテンツの配置場所として利用できる
IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8
インデックス表示に関する基本的な設定
クライアントからディレクトリのみを指定され、かつDirectoryIndexで指定されるインデックスファイルが無い場合、ディレクトリ内のファイル一覧を作成しクライアントに返す機能。
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
ファイルに表示するアイコンをMIME符号化方法で選択
AddIconByType (TXT,/icons/text.gif) text/*
ファイルの隣に表示するアイコンをMIMEタイプによって選択
AddIcon /icons/binary.gif .bin .exe
ファイルに表示するアイコンを名前で選択
DefaultIcon /icons/unknown.gif
特定のアイコンが何も設定されていない時にファイルに表示するアイコン
AddDescription "GZIP compressed document" .gz AddDescription "tar archive" .tar AddDescription "GZIP compressed tar archive" .tgz
アイコン情報の指定。特に変更する必要なし
ReadmeName README.html HeaderName HEADER.html
インデックス表示の最後および先頭に挿入するファイルを指定する。
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
インデックス表示において無視するファイルを指定する。
AddLanguage zh-TW .zh-tw
指定される拡張子を持つファイルを特定のMIME言語タイプに結びつける
基本変更しない。
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
MIME言語タイプの適用優先順位を指定する。AddLanguageに定義されているもののみ指定可。
基本変更しない。
ForceLanguagePriority Prefer Fallback
要求に合う単独のドキュメントが見つからなかったときに行なうことを指定。
Prefer wwwサーバの応答が複数の場合に、LanguagePriorityに指定された優先順位に従い応答を返す。
Fallback wwwサーバが応答するページが無い場合にLanguagePriorityに指定されたページを応答する。
Noneも指定可。
基本変更しない。
AddDefaultCharset UTF-8
httpdが、クライアントにコンテンツデータを送るとき、Webブラウザで利用させる文字セットを設定する
指定していると、ヘッダが無視され強制的にこの文字セットになる。
Offにするとコンテンツデータに任意の文字セットが利用できるが、必ず文字セットの指定をしなければならない。
AddType application/x-tar .tgz
MIMEタイプファイルに記載されてないマッピングを追加
#AddEncoding x-compress .Z
ファイル名の拡張子を指定されたエンコーディングにマップする
AddHandler cgi-script .cgi
ファイル名の拡張子を指定されたハンドラにマップする
AddOutputFilter INCLUDES .shtml
サーバの応答をクライアントに送る前に処理するフィルタを設定する
#ErrorDocument 500 "The server made a boo boo." #ErrorDocument 404 /missing.html #ErrorDocument 404 "/cgi-bin/missing_handler.pl" #ErrorDocument 402 http://www.example.com/subscription_info.html
エラーコードごとに出力するHTMLを指定する。
ユーザーからのリクエストに何らかの問題があった場合、クライアントのブラウザにエラーページを出力する。
BrowserMatch "Mozilla/2" nokeepalive BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 BrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0
ブラウザによる環境変数の設定。
環境変数を設定すると、Apacheそのものの動作に制限をする事ができる。
#<Location /server-status> # SetHandler server-status # Order deny,allow # Deny from all # Allow from .example.com #</Location>
URLによるアクセス制御。
#<IfModule mod_proxy.c> #ProxyRequests On # #<Proxy *> # Order deny,allow # Deny from all # Allow from .example.com #</Proxy>
標準プロキシーリクエストを許可する
#ProxyVia On
ViaヘッダでのHTTP/1.1の扱いを有効/無効にする
#AddOutputFilter Includes html
利用許可する拡張子を設定
#AddHandler type-map var AddHandler cgi-script .cgi
ファイル拡張子とハンドラをマッピングする
#LanguagePriority en es de fr
2つ言語間で同じ優先度があった場合にどちらをより優先するかを設定
#ForceLanguagePriority Prefer Fallback
該当する言語がない場合に、選択肢を返すのか、アクセス拒否を返すのかの優先度を設定
選択肢を返す場合はPrefer
アクセス拒否を返す場合はFallback
バーチャルホストの設定(Section 3: Virtual Hosts)
NameVirtualHost *:80
名前ベースのバーチャルホストのための IP アドレスを指定
<VirtualHost *:80> ServerAdmin webmaster@dummy-host.example.com DocumentRoot /www/docs/dummy-host.example.com ServerName dummy-host.example.com ErrorLog logs/dummy-host.example.com-error_log CustomLog logs/dummy-host.example.com-access_log common </VirtualHost>
特定のホスト名やIPアドレスのみに適用される。
内容は上記同様
コンテナ
<Files hoge>~</Files>
hogeに指定されたファイルにのみ適用
<FilesMatch hoge>~</FilesMatch>
正規表現hogeに指定されたファイルにのみ適用
<IfModule module>~</IfModule>
moduleが読み込まれたときにだけ有効。!をmodule名の前につけると、読み込まれていないときになる
マルチプロセッシングモジュール (MPM)
apacheが、並列処理するためのモジュール
prefork
デフォルトの設定
あらかじめ複数のプロセスを用意しておき、クライアントからのリクエストを待ち受ける。
用意したプロセス数を越えるリクエストが要求された場合、新たなプロセスを生成することにより、クライアントからのアクセスに対応する
worker
リクエストの応答にスレッドを使い、プロセスベースのサーバよりも少ないシステム資源で、 多くのリクエストに応答することができる。
さらに、多くのスレッドを持った複数のプロセスを維持することで、 プロセスベースのサーバの持つ安定性を保持する。
指定したドメイン/ホストの環境設定
AllowOverride
.htaccessが使用できるかの設定
設定値 | 内容 |
---|---|
None | .htaccessでは何も設定できない |
All | .htaccessで設定可能なものは全て有効 |
AuthConfig | 認証関連の使用を許可 |
FileInfo | メタデータを制御を許可 |
Indexes | ディレクトリインデックス関連の使用を許可 |
Limit | アクセス制御関連の使用を許可 |
Options | カンマ区切りで許可するものを指定 |
Options
設定対象の基本的な動作許可、制限
設定値 | 内容 |
---|---|
None | 特殊な機能を使わない時 |
All | MultiViewsを除いた全ての機能が有効。設定しない場合はこれ |
FollowSymLinks | シンボリックリンクでのアクセスを許可 |
Includes | SSIの使用を許可 |
IncludesNOEXEC | SSIは許可するが、SSIが外部cgiを呼び出すのを禁止 |
Indexes | リクエストに対するファイルが存在しない場合に、ディレクトリ内ファイルの一覧を表示する |
MultiViews | コンテントネゴシエーションを有効 |
SymLinksIfOwnerMatch | 所有アカウントが一致している場合アクセス許可 |
ExecCGI | CGIの実行を許可 |
Order
AllowとDenyを組み合わせて、HTTPアクセスを制限する
Orderで評価される順番を制御する。
設定値 | 内容 |
---|---|
Order Deny,Allow | アクセスはデフォルトで許可(ブラックリスト方式) |
Order Allow,Deny | アクセスはデフォルトで拒否(ホワイトリスト方式) |
Satisfy all | Orderの制限と認証の両方クリアで許可 |
Satisfy any | Orderの制限か認証のどちらかクリアで許可 |
Allow from 対象 | 許可する対象を指定 |
Deny from 対象 | 拒否する対象を指定 |
すべてのアクセスを拒否する場合
Order Deny,Allow Deny from all
すべてのアクセスを許可する場合
Order allow,deny Allow from all
ローカルのみ許可
Order Deny,Allow Deny from All Allow from 127.0.0.1
ポートとは
外部とデータを入出力するための、ソフトウェアやハードウェアのインターフェース
ディレクティブとは
プログラム中に埋め込むコンパイラへの命令
MIMEタイプとは
拡張子という概念と、MIMEタイプという概念がある。
タイプ名/サブタイプ名の形式の文字列で、WEBサーバーとWEBブラウザの間は、このMIMEタイプを用いてデータの形式を指定する
例
ファイル形式 | 一般的な拡張子 | MIMEタイプ |
---|---|---|
テキスト | .txt | text/plain |
HTML文書 | .htm .html | text/html |
XML文書 | .xml | text/xml |
JavaScript | .js | text/javascript |
CSS | .css | text/css |
GIF画像 | .gif | image/gif |
JPEG画像 | .jpg .jpeg | image/jpeg |
PNG画像 | .png | image/png |
ZIPアーカイブ | .zip | application/zip |
PDFファイル | application/pdf | |
MPEG映像 | .mpg | video/mpeg |
flash | .swf | application/x-shockwave-flash |
OrderのDenyとAllowの感じがややこしい…。
次は、フレームワークに戻る予定。