.
.
.
.
.
TOPページ(Alt+B)
.
UNIX版Apacheの設定ファイル

その高速性、安定性が高く評価され、市場使用率も非常に高いこのApacheですが、やはりUNIX環境で使用してこそその真価が発揮されることは云うまでもありません。ここでは安全かつ高速運用のための設定ファイル(httpd.conf)のサンプルを見ながら各設定項目を見ていきましょう。赤文字部分がオリジナルからの修正箇所となります。

##
## httpd.conf -- Apache HTTP server configuration file
##

### Section 1: Global Environment

ServerType standalone

サーバーの動作方法を指定する。standaloneは80番ポートなどの単独モードでデーモンとして常駐した状態で動作することを意味する。UNIXではもう1つinetdという動作方法も指定できるが、これは要求があるとそれに対応するポートでのサーバープロセスを開始し、要求が満たされるとプロセスを終了する。しかし、こちらは非常に効率が悪く今後はサポートされないとドキュメントにも明記されている。

ServerRoot "/usr/local/apache"

Apacheが必要とする設定ファイル(httpd.conf、access.conf、srm.conf等)の場所を示す。インストール時に別の場所を指定しない限り自動設定される。

LockFile /usr/local/apache/logs/httpd.lock

ロックファイルの場所を示す。

PidFile /usr/local/apache/logs/httpd.pid

プロセス識別ファイルの場所を示す。

ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard

Apacheのstatus(稼動状況)を記入するファイルの場所を示す。

#ResourceConfig conf/srm.conf
#AccessConfig conf/access.conf

現バージョンのApacheでは上の2つのファイルは使用しない。httpd.confで全てを制御する。

Timeout 300

クライアントとの間でデータパケットをやり取りする際に待機する最長の時間を秒単位で設定する。接続が頻繁に中断するなら値を増やすが、それ以外はデフォルトのままで十分である。

KeepAlive On

Webブラウザとの間で持続的な接続を維持するかどうかを指定する。Onに設定するとサーバーのオーバーヘッドが減り、パフォーマンスが向上する。

MaxKeepAliveRequests 200

1回の接続で処理できる要求の数を指定する。可能な限り大きな値を指定しておく。但し、KeepAliveをOnにしていないと無効。

KeepAliveTimeout 15

1つの要求が完了してから、接続を中断せずに次の新しい要求を待つ時間を秒単位で指定する。

MinSpareServers 5
MaxSpareServers 10

StartServers 5

起動時に作成される子サーバーの数や、最小、最大の子サーバーの数を指定する。以前はこの設定がパフォーマンスに大きく影響したが、現バージョンのApacheではプロセスの生成のタイミング等が最適化されているため、特に理由がない限り変更の必要はない。

MaxClients 150

同時に受け付けることができるクライアントの数を設定する。上限は256まで指定可能であるが、特に理由がない限りこのままでよい。

MaxRequestsPerChild 0

StartServer項目と同様、特に理由がない限り変更の必要はない。0は無制限であることを意味する。

#Listen 3000
#Listen 12.34.56.78:80

デフォルトの80番ポート以外のポートでリクエストを受け取るように設定する際に指定する。

#BindAddress *

仮想ホストを指定した場合にそれぞれのサーバーに異なるIPアドレスを指定する際に利用する。

#
# Dynamic Shared Object (DSO) Support
#

# LoadModule foo_module libexec/mod_foo.so

DSOモードで読み込むモジュールを指定する。ただし、必要な機能はDSOモードにはせず、Apacheに組み込んでしまったほうが効率が良い。詳細はソースコードからインストールを参照。

#ExtendedStatus On

mod_status.soモジュールを有効にしてApacheの稼動状況を確認する際、Onを指定すると詳細情報が取得できる。Offだと簡易版になる。

### Section 2: 'Main' server configuration

Port 80

HTTPの標準ポート80番を指定する。特に理由がない限りこのままで使用する。これ以外のポートを指定した場合、例えば8080番などを指定するとアクセスする際には「http://foo.bar.com : 8080/index.html」と指定する必要がある。

User apache
Group apache

デフォルトのユーザー指定はnobodyとなっているが、ここではapacheという低い権限の専用のユーザー、グループを作成した上で動作させる。間違ってもrootなどと指定してはいけない。

ServerAdmin root@localhost

サーバー管理者のメールアドレスを記入する。これは接続に何らかの問題が生じたときに表示されるエラーメッセージ中に表示される。

ServerName foo.bar.com

インターネットサーバーホスト名を指定する。ここに指定するものは、DNS(ドメインネームサーバー)に登録されている必要がある。

DocumentRoot "/usr/local/apache/htdocs"

公開する文書が置かれている場所やURLをファイル名に変換する方法を指定する。インストール時に自動設定される。余談だが、このディレクトリにはMultiViews用の多国語ファイル等、不要なファイルがインストールされるので、すべて削除しておく。

<Directory />
Options FollowSymLinks → Options None
AllowOverride None
Order deny,allow
Deny from all

</Directory>

サーバールートディレクトリの指定。安全のため、すべてのオプションを無効しに、すべてのファイルへのアクセスを拒否する。

<Directory "/usr/local/apache/htdocs">
Options Indexes FollowSymLinks MultiViews → Options SymLinksIfOwnerMatch
AllowOverride None
Order allow,deny
Allow from all
</Directory>

ドキュメントルートディレクトリーの指定。ここではディレクトリインデックスファイルの表示を無効にし、さらにSymLinksIfOwnerMatchと修正し、オーナーのみシンボリックリンクがたどれるように変更する。また、多言語ファイルを作成利用しないならMultiVewsも必要ない。

UserDir public_html → UserDir /home/*/public_htmlまたは/var/www/*/public_htmlでもよい。余談だが、ユーザーホームディレクトリ作成の際の効率化を図るため、Linuxでは/etc/skelにあらかじめ雛形を作成しておくと良い。mkdirコマンドでpublic_html(パーミッション755)を作成しておくと、新規ユーザー作成時に自動的にpublic_htmlが作成されて便利である。尚、suEXECを有効にしてapacheとは異なる各ユーザーの権限でCGIプログラムを動作させたい場合は/home/*/public_htmlと指定する。

<Directory /home/*/public_html>
 AllowOverride None
 Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec → Opions SymLinksIfOwnerMatch
 <LimitExcept GET POST>
 Order deny,allow
 Deny from all
 </Limit>
</Directory>

ユーザーディレクトリを指定する。ここでもサーバー速度向上のためディレクトリインデックスファイルの表示を無効にし、さらにSSIの使用を無効にしている。また、LimitExceptでGETとPOST以外からの要求を拒否する。

<IfModule mod_dir.c>
DirectoryIndex index.html index.htm
</IfModule>

ファイル名を何も指定せずにアクセスした際に表示させるファイル名及び優先順位を指定する。http://foo.bar.com/とだけ指定した場合、そのディレクトリ内にindex.html、index.htmという2つのファイルがあれば、index.htmlのほうが表示される。index.htmlとindex.htmの2つを指定しておくとよい。

AccessFileName .htaccess

アクセス制御ファイルの名前を指定する。デフォルトは「.htaccess」。が、高速Apache実現のためには使用しないほうが良いことは云うまでもない。.htaccessを使用しないなら上記のAllowOverrideの引数はNoneとする。逆に使用するにはAllと指定する。また個別に設定することも可能で、AddType、AddEncoding、AddLanguageの上書きを許可するにはFileInfoを、FancyIndexing、AddIcon、AddDescriptionの上書きを許可するにはIndexesを、ホスト名またはIPアドレスを用いたアクセス制限の上書きを許可するにはLimitを、パスワードによる認証を許可するにはAuthConfigを指定する。また、それらを複数で組み合わせることも可能である。

<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>

デフォルトで、上記.htaccessファイルが表示されてしまう(ブラウザのURL欄にhttp://foo.bar.com/.htaccessなどと直接入力された場合)のを防ぐための処置がなされている。

#CacheNegotiatedDocs

コンテンツネゴシエーション(クライアントから送られてきた情報に基づいてサーバーが適切なコンテンツを返すこと)の結果返したドキュメントをキャッシュするかどうかを指定する。

UseCanonicalName On

リクエストされたサーバ名とポートを検索するときにサーバー参照名(SERVER_NAME)などに別名を使えるようにする。

<IfModule mod_mime.c>
TypesConfig /usr/local/apache/conf/mime.types
</IfModule>

DefaultType text/plain

ディレクトリに含まれているファイルのデフォルトのMIMEタイプを指定する。

<IfModule mod_mime_magic.c>
MIMEMagicFile /usr/local/apache/conf/magic
</IfModule>

MIMEモジュールが提供するMIMEタイプを指定したファイルのパスを指定する。

HostnameLookups Off

IPアドレスに対応するホスト名を調べるためにDNSを参照するかどうかを設定する。OnにするとDNSの二度引きが行われるため、サーバーの応答速度が大幅に遅くなる。必ずOffを指定し、CGIプログラムなどで必要がある場合にはPerlのgethostbyaddr関数で個別に取得するようにする。

ErrorLog /usr/local/apache/logs/error_log

LogLevel warn

エラーのあったリクエストを記録するエラーログファイルのパスとレベルを指定する。デフォルトで十分である。

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
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)$" object-is-image

CustomLog  /usr/local/apache/logs/access_log common env=!object-is-image

#CustomLog /usr/local/apache/logs/referer_log referer
#CustomLog /usr/local/apache/logs/agent_log agent

#CustomLog /usr/local/apache/logs/access_log combined

サーバーへのリクエストを記録するアクセスログのパスを指定する。CustomLogの引数とすることでカスタムのログ形式を指定できる。アクセスログ容量の肥大化を防ぐため、gifなどの画像ファイルに対してはログを記録しない設定にしてある。(上記では、GIF、JPG、PNG画像に対してログを記録しない)

ServerSignature Off

サーバーが自動生成するページにApacheのバージョンと仮想ホストの名前を表示することを指定する。デフォルトはOnだが、バナー表示は無用のため、Offを指定する。また、以下の指定によりHTTPレスポンスヘッダからApacheのバージョンを消しておくとセキュリティーが向上する。これは「GET / HTTP/1.1」と指定してHTTPサーバーの種類やApacheのバージョンを検索する攻撃に対して有効である。

ServerTokens ProductOnly

<IfModule mod_alias.c>

#Alias /icons/ "/usr/local/apache/icons/"

#<Directory "/usr/local/apache/icons">
#Options Indexes MultiViews
#AllowOverride None
#Order allow,deny
#Allow from all
#</Directory>

Apacheで使用するアイコン画像の場所を指定する。ここではディレクトリインデックスファイルを生成しないので無効化しておく。該当ページが見つからない時にそのディレクトリ中の全ファイルへの案内をアイコンとともに生成するこのディレクトリインデックスファイルであるが、セキュリティーの面からも使用しないのが好ましい。使用してない場合、要求に対しては403を返す。

#ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

#<Directory "/usr/local/apache/cgi-bin/>
#AllowOverride None
#Options ExecCGI
#Order allow,deny
#Allow from all
#</Directory>

CGIプログラム実行のデフォルトの指定であるが、多数のユーザーを抱えるなら下記のようにユーザーディレクトリ配下で指定しておく。CGIプログラムの設置は必ず指定場所でしか行えないようにしておくのが大原則である。

Alias /cgi-bin/ "/home/*/public_html/cgi-bin/"

<Directory "/home/*/public_html/cgi-bin/">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

</IfModule>

#IndexOptions FancyIndexing

#AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

#AddIconByType (TXT,/icons/text.gif) text/*
#AddIconByType (IMG,/icons/image2.gif) image/*
#AddIconByType (SND,/icons/sound2.gif) audio/*
#AddIconByType (VID,/icons/movie.gif) video/*

#AddIcon /icons/binary.gif .bin .exe
#AddIcon /icons/binhex.gif .hqx
#AddIcon /icons/tar.gif .tar
#AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
#AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
#AddIcon /icons/a.gif .ps .ai .eps
#AddIcon /icons/layout.gif .html .shtml .htm .pdf
#AddIcon /icons/text.gif .txt
#AddIcon /icons/c.gif .c
#AddIcon /icons/p.gif .pl .py
#AddIcon /icons/f.gif .for
#AddIcon /icons/dvi.gif .dvi
#AddIcon /icons/uuencoded.gif .uu
#AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
#AddIcon /icons/tex.gif .tex
#AddIcon /icons/bomb.gif core

#AddIcon /icons/back.gif ..
#AddIcon /icons/hand.right.gif README
#AddIcon /icons/folder.gif ^^DIRECTORY^^
#AddIcon /icons/blank.gif ^^BLANKICON^^

#DefaultIcon /icons/unknown.gif

Apacheで使用するアイコン画像の種類を指定する。ここではディレクトリインデックスファイルを生成しないのですべて無効化しておく。

#
# AddDescription: allows you to place a short description after a file in
# server-generated indexes. These are only displayed for FancyIndexed
# directories.
# Format: AddDescription "description" filename
#
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz

ファイルタイプに応じてファイルの説明を付けるように設定する。特に説明を付ける必要もないため、デフォルトのままにしておく。

#
# ReadmeName: the name of the README file the server will look for by
# default, and append to directory listings.
#
# HeaderName: the name of a file which should be prepended to
# directory indexes.
#
# The server will first look for name.html and include it if found.
# If name.html doesn't exist, the server will then look for name.txt
# and include it as plaintext if found.
#
ReadmeName README.html
HeaderName HEADER.html

ReadmeNameでディレクトリインデックスファイル下部に標準で表示されるべきREADMEファイルの名前を指定し、HeaderNameで上部に付加したいファイルの名前を指定する。

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

ディレクトリインデックスファイル表示時にリストへ含めないファイルの名前を指定する。ワイルドカードでの指定が可能。

</IfModule>

<IfModule mod_mime.c>

AddEncoding x-compress Z
AddEncoding x-gzip gz tgz

ファイルがエンコードされていることを示す拡張子をApacheに指定する。

AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it

サーバーに登録されている特定のコンテンツ言語や文字セットに対応するファイル名拡張子を割り当てる。デフォルトのままで特に問題はない。

<IfModule mod_negotiation.c>
LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
</IfModule>

MultiViewsが指定されているときにサーバーが優先して使う言語を指定する。

</IfModule>

AddType application/x-tar .tgz
AddType image/x-icon .ico

AddTypeにより、新しいファイルタイプをMIMEに追加する。デフォルトではtgz、icoが指定されている。

AddHandler cgi-script .cgi

この指定により、CGIスクリプトは拡張子.cgiのものだけが実行されるようになる。

#AddType text/html .shtml
#AddHandler server-parsed .shtml

セキュリティー、サーバーパフォーマンスのためにSSIを使用できないようにコメントアウト。

#AddHandler send-as-is asis

#AddHandler imap-file map

#AddHandler type-map var

サーバーサイドイメージマップは使用しないのでコメントアウト。

</IfModule>

#MetaDir .web

#MetaSuffix .meta

メタ情報が含まれているファイルのファイル名拡張子を指定する。特に必要はない。

# Customizable error response (Apache style)
# these come in three flavors
#
# 1) plain text
#ErrorDocument 500 "The server made a boo boo.
# n.b. the (") marks it as text, it does not get output
#
# 2) local redirects
ErrorDocument 404 /missing.html
# to redirect to local URL /missing.html
#ErrorDocument 404 /cgi-bin/missing_handler.pl
# N.B.: You can redirect to a script or a document using server-side-includes.
#
# 3) external redirects
#ErrorDocument 402 http://some.other_server.com/subscription_info.html
# N.B.: Many of the environment variables associated with the original
# request will *not* be available to such a script.

カスタムのエラードキュメントを指定する。404NotFound(エラー)ドキュメントくらいは自前で作成したほうがいいような気がするのは云うまでもない。

<IfModule mod_setenvif.c>

BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.

BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

BrowserMatchでは、指定した正規表現にマッチするパターンを持つ環境変数を設定する。

</IfModule>

#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Location>

サーバー管理者が遠隔地からサーバーのステータス状態(動作状態)を確認したい場合に設定するが、その場合にはAllowを自分だけにしておくことが大切。

#<Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Location>

サーバー管理者が遠隔地からサーバーの各設定状態を確認したい場合に設定するが、その場合にはAllowを自分だけにしておくことが大切。

# Allow access to local system documentation from localhost
#Alias /doc/ /usr/share/doc/
#<Location /doc>
#order deny,allow
#deny from all
#allow from localhost .localdomain
#Options Indexes FollowSymLinks
#</Location>

ローカルユーザーがローカルのディレクトリを参照できるようにするための指定であるが、このような項目は設定ミスを防ぐためにも削除しておいたほうがよい。

#<Location /cgi-bin/phf*>
# Deny from all
# ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
#</Location>

古いApacheのセキュリティーホールに対してアタックしてきた人がいた場合に、リポートする。現バージョンのApacheには全く無縁。

#<IfModule mod_proxy.c>
#ProxyRequests On
#
#<Directory proxy:*>
# Order deny,allow
# Deny from all
# Allow from .your_domain.com
#</Directory>

Apacheをプロキシサーバーとして動作させるか否かの設定を行う。動作させるならOnを指定する。プロキシを不特定多数のユーザーに利用可能とするのは荒らしなどの踏み台にされる可能性も否めないため、Allowに許可するユーザーやドメインを指定しておくことが肝要である。意味のないプロキシサーバーの開放のために迷惑を被っているサイトは数多い。

#ProxyVia On

プロキシ固有環境変数「HTTP_VIA」を操作する。Offなら何も操作されない。Onを指定した場合すべてのリクエストと応答にVIAヘッダが付加され、Fullにした場合にはそれに加えてプロキシのバージョンが表示される。VIAヘッダを取り除きたいときにはBlockを指定する。

#CacheRoot "/var/cache/httpd"
#CacheSize 5
#CacheGcInterval 4
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#NoCache a_domain.com another_domain.edu joes.garage_sale.com

#</IfModule>

プロキシのキャッシュを制御する。各指示子の詳細についてはApacheのモジュール一覧を参照。

### Section 3: Virtual Hosts
#

#NameVirtualHost *

バーチャル(仮想)ホストの指定を行う。

#<VirtualHost ip.address.of.host.some_domain.com>
# ServerAdmin webmaster@host.some_domain.com
# DocumentRoot /www/docs/host.some_domain.com
# ServerName host.some_domain.com
# ErrorLog logs/host.some_domain.com-error_log
# CustomLog logs/host.some_domain.com-access_log common
#</VirtualHost>

バーチャルホストもApacheの速度低下の要因となるためできれば使用しないほうが良いことは云うまでもない。どうしても使用する場合にはDNSを参照しなくて済むIPベースでの使用をお勧めする。ただし、HTTP1.1をサポートしているApache1.3.x以上でないと利用できない。

UNIX版 Apache1.3.27参照

TOPページ(Alt+B)

CopyRight (C) 2000-2013 by T.Shiraishi All right reserved 無断転載禁止/リンクフリー