9.5. ディレクティブとコンテキスト

Apache の設定は、設定ファイルである /etc/httpd/conf/httpd.conf にディレクティブを記述することで行います。/etc/httpd/conf/httpd.conf には、1 行に 1 つのディレクティブを記述します。Apache には、各モジュールを制御するための様々なディレクティブが提供されており、それらのディレクティブを指定することにより、Apcahe の動作を制御することができます。また、ディレクティブの中には、ディレクティブ名とその値が < と > で囲まれたものもあります。これらのディレクティブは終了タグまでを適用範囲として扱い、開始タグと終了タグの中に記述されたディレクティブは、その範囲内でのみ有効となります。ここでは、各モジュールを制御する個々のディレクティブを解説する前に、これらのコンテナとなるディレクティブについて解説します。また、ディレクティブを記述する際に重要となるコンテキストについても解説します。

9.5.1. コンテナとなるディレクティブ

コンテナとなるディレクティブには、以下があります。

<Directory directory-path> ... </Directory>

<Directory directory-path> から </Directory> の間に指定されたディレクティブは、directory-path に指定されたディレクトリとそのサブディレクトリにのみ適用されます。例えば、以下の指定では、/var/www/html/data とそのサブディレクトリにのみ適用されます。

<Directory "/var/www/html/data">

  ...

</Directory>

また、directory-path の指定には正規表現を使用することもできます。その場合には、以下のように directory-path の前に ~(チルダ)を指定します。

<Directory ~ "/var/www/html/data*">

    ...

</Directory>

<DirectoryMatch regex> ... </DirectoryMatch>

<Directory> ディレクティブと同様ですが、ディレクトリの指定に必ず正規表現を使用します。~ を指定する必要はありません。

<Files filename> ... </Files>

<Files filename> から </Files> の間に指定されたディレクティブは、filename に指定されたファイルにのみ適用されます。<Directory> ディレクティブと同様に filename の前に ~ を指定し、正規表現を使用することもできます。例えば、以下の指定では、.ht で始まるファイルにのみ適用されます。

<Files ~ "^\.ht">

    ...

</Files>

<FilesMatch regex> ... </FilesMatch>

<Files> ディレクティブと同様ですが、ファイルの指定に必ず正規表現を使用します。

<Location URL-path|URL> ... </Location>

<Location URL-path|URL> から </Location> の間に指定されたディレクティブは、URL-path|URL に指定された URL へのアクセスにのみ適用されます。<Directory> ディレクティブは、ファイルシステム上のディレクトリパスを指定するのに対して、<Location> ディレクティブでは、URL を指定します。<Directory> ディレクティブと同様に URL-path|URL の前に ~ を指定し、正規表現を使用することもできます。例えば、サーバーの FQDN を www.example.com とすると、以下の指定では、http://www.example.com/server-status へのアクセスにのみ適用されます。

<Location /server-status>

    ...

</Location>

<LocationMatch regex> ... </LocationMatch>

<Files> ディレクティブと同様ですが、URL の指定に必ず正規表現を使用します。

<Limit method [method] ... > ... </Limit>

<Limit> ディレクティブを使用すると、HTTP リクエストに含まれる POST や GET など、特定のメソッドに対するアクセス制御を指定することができます。<Limit method [method] ... > から </Limit> の間に指定されたディレクティブは、method [method] ... に指定されたメソッドでアクセスしてきた要求にのみ適用されます。例えば、以下の指定では、POST メソッドでアクセスしてきた要求にのみ適用されます。

<Limit POST>

    ...

</Limit>

<LimitExcept method [method] ... > ... </LimitExcept>

<Limit> とは逆に、指定したメソッド以外でアクセスしてきた要求に対してのみ適用されます。

<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>

バーチャルホストを指定するためのディレクティブです。詳細については、項9.22 を参照してください。

<IfModule [!]module-name> ... </IfModule>

<IfModule> ディレクティブでは、モジュールがサーバーに読み込まれているときだけ有効になるディレクティブを指定できます。<IfModule [!]module-name> から </IfModule> の間に指定されたディレクティブは、module-name に指定されたモジュールがサーバーに読み込まれているときのみ適用されます。!module-name の場合は、逆にモジュールが読み込まれていないときに適用されます。

<IfDefine [!]parameter-name> ... </IfDefine>

<IfDefine> ディレクティブでは、サーバー起動時にパラメータが指定されているときだけ有効になるディレクティブを指定できます。<IfDefine [!]parameter-name> から </IfDefine> の間に指定されたディレクティブは、parameter-name に指定されたパラメータがサーバーの起動時に指定されているときのみ適用されます。!parameter-name の場合は、逆にモジュールが読み込まれていないときに適用されます。例えば、以下の指定では、サーバーの起動時に SSL というパラメータが指定された場合のみ適用されます。

<IfDefine SSL>

    ...

</IfDefine>

9.5.2. コンテキスト

Apache は非常に多くのディレクティブを提供しています。ただし、各ディレクティブは、/etc/httpd/conf/httpd.conf のどの箇所にでも記述できるわけではありません。ディレクティブを記述したコンテキストによっては意味をなさない場合があります。コンテキストとは、/etc/httpd/conf/httpd.conf のどこにディレクティブを記述したときに有効であるかを示すものです。したがって、ディレクティブを指定するときは、そのディレクティブのコンテキストをオンラインマニュアル等で確認しなければなりません。コンテキストの種類と概要は以下の通りです。

表 9-3. コンテキスト

コンテキストの種類概要
server config設定ファイル内で使用可能ですが、<Directory> や <VirtualHost> のようなコンテナとなるディレクティブの中で使用することはできません。
directory<Directory>、<DirectoryMatch>、<Location>、<LocationMatch>、<Files>、<FilesMatch> ディレクティブの中で使用可能であることを意味します。
.htaccess.htaccess ファイル内で使用可能であることを意味します。ただし、.htaccess ファイルによる上書指定が許可されているディレクティブのみ有効になります。.httaccess については、項9.9 を参照してください。
virtual host<VirtualHost> ディレクティブの中で使用可能であることを意味します。

以下の表に代表的なディレクティブと、そのディレクティブで使用可能なコンテキストを示します。カラムに ○ の記載されているコンテキストで使用が可能です。

表 9-4. 出現可能なコンテキスト

ディレクティブserver configdirectory.htaccessvirtual host
AddEncoding
AddHandler
AddIcon
AddIconByEncoding
AddIconByType
AddInputFilter
AddLanguage
AddOutputFilter
AddType
Alias  
AliasMatch  
Allow  
AllowOverride   
AuthDigestFile  
AuthName  
AuthType  
AuthUserFile  
CacheNegotiatedDocs  
CustomLog  
Dav   
DavLockDB  
DefaultIcon
DefaultLanguage
Deny  
<Directory>  
DirectoryIndex
DocumentRoot  
ErrorDocument
ErrorLog  
<Files>
Group  
HostnameLookups 
<IfDefine>
<IfModule>
Include 
IndexIgnore
IndexOptions
KeepAlive  
KeepAliveTimeout  
<Limit>
Listen   
LoadModule   
<Location>  
LogFormat  
LogLevel  
MaxClients   
MaxKeepAliveRequests  
MaxRequestsPerChild   
MaxRequestsPerThread   
MaxSpareServers   
MaxSpareThreads   
MaxThreads   
MaxThreadsPerChild   
MimeMagicFile  
MinSpareServers   
MinSpareThreads   
NameVirtualHost   
Options
Order  
<Proxy>  
RemoveInputFilter 
RemoveOutputFilter 
ScriptAlias  
ServerAdmin  
ServerName  
ServerRoot   
ServerSignature
SetEnvIf
SetHandler
SetInputFilter
SetOutputFilter
SSLCACertificateFile  
SSLCACertificatePath  
SSLCertificateChainFile  
SSLCertificateFile  
SSLCertificateKeyFile  
SSLCipherSuite
SSLEngine  
SSLMutex   
SSLOptions
SSLPassPhraseDialog   
SSLRandomSeed   
SSLRequire  
SSLSessionCache   
SSLSessionCacheTimeout  
SSLVerifyClient
SSLVerifyDepth
StartServers   
StartThreads   
ThreadLimit   
ThreadsPerChild   
TimeOut   
User  
UserDir  
<VirtualHost>