esehttpdはapacheとほぼ同等の書式の設定ファイルを使います。デフォルトではesehttpdは起動時に設定ファイルとして/etc/esehttpd/esehttpd.confを読み込みますが、コマンドライン引数で変更することもできます。
設定ファイルの各行は、ディレクティブとその引数から成っています。引数がどのように解釈されるかは、各ディレクティブによって異なります。行頭の空白は無視され、また行頭が'#'文字で始まっている行は無視されます。
特定のディレクトリなど、サーバの一部分だけの設定を変更するには、<VirtualHost>...</VirtualHost>, <Directory>...</Directory>, <FilesMatch>...</FilesMatch>, <Limit>...</Limit>に囲まれた行(セクション)にそのディレクティブを書きます。サーバ全体にかかわるディレクティブはこれらのセクションの外側に書きます。
ディレクティブの引数がファイル名やパス名、正規表現などをあらわしている場合は、引数をダブルクォート『""』で括ることが出来ます。ダブルクォートの内側ではエスケープ文字としてバックスラッシュ『\』を使います。『\"』はダブルクォート文字自身をあらわし、『\\』はバックスラッシュ文字自身をあらわします。
ServerRoot DIRNAME
BindAddress ADDRESS
User NAME
Group NAME
User
ディレクティブと同様です。
MaxFiles NUMBER
StartServers NUMBER
ChangeRoot DIRNAME
User
で指定したユーザに権限を落す直前に指定したディレクトリへchrootします。これを指定しなかった場合はchrootしません。このディレクティブによってchrootするように設定した場合は、設定ファイルの中のいくつかのディレクトリ等のパス名が、chrootするディレクトリのサブディレクトリになっていなければならないことに注意してください。例えば/var/www
にchrootしたときは、DocumentRootディレクティブには/var/www/html
のように/var/www/
のサブディレクトリでなくてはなりません。また<Directory
で指定するディレクトリ名もchrootするディレクトリのサブディレクトリでなくてはなりません。この条件を満たしてない場合は、エラーになります。
ListenBacklog NUMBER
SendBufferSize NUMBER
RecvBufferSize NUMBER
FileCacheSize NUMBER
FileCacheThreshold NUMBER
SendCGIErrors (On|Off)
MultipleAccept (On|Off)
ForceLingeringClose (On|Off)
LingeringCloseLimit NUMBER
RequestHeaderLimit NUMBER
RequestBodyLimit NUMBER
Expect: 100-continue
ヘッダの無いリクエストかHTTP 1.0リクエストのリクエストボディがこの値を越えた場合は413 Request Entity Too Large
を返し、lingering closeを行います。Expect: 100-continue
ヘッダが有るばあいは417 Expectation Failed
を返します。この値を小さくするとフォーム等で大きなデータが送れなくなり、逆に大きいとDoS攻撃に弱くなります。
ScriptEvalMax NUMBER
StartServers
に2以上の値を指定したときに限られ、StartServers
が1の場合はScriptEvalMax
の設定は無視されます。
<VirtualHost HOSTNAME>
</VirtualHost>
に挟まれた行にバーチャルホスト毎の設定を書きます。
<VirtualHost>
と</VirtualHost>
に挟まれた行に以下のディレクティブを書きます。以下のディレクティブは<VirtualHost>
の外側にも書くことができますが、その設定はいずれの<VirtualHost>
にもマッチしない場合に有効になります。
Port NUMBER
ServerName HOSTNAME
localhost
になります。
PassEnv NAME [...]
CustomLog FILENAME [LOGTYPE]
StartServers
に2以上の値を指定した場合には、ここで指定したファイル名にさらにプロセス番号のサフィックスが付いた名前のファイルに書き込まれます。LOGTYPE
はcommon
かcombined
のいずれかを指定します。common
を指定した場合にはCommon Logfile Formatに従った形式のログが出力されます。combined
の場合はCommon Logfile Formatに加えて、User-AgentとRefererも記録されます。LOGTYPE
を省略した場合にはcommon
を指定したことと同じになります。
NoLog CODE [...]
DocumentRoot DIRNAME
TypesConfig FILENAME
/usr/local/lib/esehttpd/conf/mime.types
等(インストール方法によって変わってきます)になります。
ErrorDocumentDir DIRNAME
TimeOut SEC
SSLPort NUMBER
Port
とSSLPort
のいずれも指定しなかった場合はそのサーバは何もおこないません。
SSLCertificateFile FILENAME
FILENAME
は証明書を含んだPEM形式のファイルでなくてはなりません。このディレクティブはSSLを利用するときには必須です。
SSLCertificateKeyFile FILENAME
FILENAME
はRSAキーを含んだPEM形式のファイルでなくてはなりません。もしこのディレクティブを指定しなかった場合には、SSLCertificateFile
で指定されたファイルからRSAキーも読み取ろうとします。よって、SSLを利用するときにはこのSSLCertificateKeyFile
で指定したPEMファイルかSSLCertificateFile
で指定したPEMファイルのいずれかにRSAキーが含まれていなければなりません。
SSLCACertificateFile FILENAME
SSLVerifyClient require
が指定されたディレクトリにアクセス要求が来た際、このCAが発行した証明書を提示するようクライアントに要求し、正しい証明書を提示しなかった場合に接続を切断します。FILENAME
は証明書を含んだPEM形式のファイルでなくてはなりません。
SSLDHParamFile FILENAME
FILENAME
はDHパラメータを含んだPEM形式のファイルでなくてはなりません。もしこのディレクティブを指定しなかった場合には、SSLCertificateFile
で指定されたファイルからDHパラメータも読み取ろうとします。もしSSLDHParamFile
が指定されておらず、SSLCertificateFile
で指定されたファイルにもDHパラメータが含まれていなかった場合には、DHを使った暗号は利用できなくなります。
SSLCipherSuite STRING
STRING
に指定する文字列は、openssl ciphers
と実行して得られる結果と同じ書式です。実際にサーバとクライアント間の通信で利用される暗号は、このリストに含まれるものの中からクライアントとネゴシエートして決められます。
Alias URI DIRNAME
ScriptAlias URI DIRNAME [MODULENAME]
Alias
と同様、指定したURI以下を特定のディレクトリにマップしますが、さらにそのURIに対するハンドラをMODULENAME
に設定します。MODULENAME
が指定されなかった場合はcgi-script
が指定されたことと同じになります。
<Directory DIRNAME>
</Directory>
に挟まれた行にそのディレクトリ以下のファイルについての設定を書きます。
<Directory DIRNAME>
と</Directory>
で挟まれた内側の行に、以下で説明するディレクティブを書きます。ここでDIRNAME
は設定を施す対象となるディレクトリ名です。リクエストがあったファイルが複数の<Directory>
にマッチする場合は、マッチするパスが最も長いものが有効になります。以下のディレクティブは<Directory>
セクションの外側にも書くことができ、ファイルがいずれの<Directory>
にもマッチしない場合にこの<Directory>
セクションの外側に書かれた設定が有効になります。
AuthUserFile FILENAME
AuthName NAME
AuthRequireSSL (On|Off)
DirectoryIndex FILENAME [...]
index.html
が指定されたのと同じことになります。これらのファイルが見つからなかった場合、そのディレクトリの一覧表示が許可されている場合は一覧表示をおこない、許可されていなければ403 Forbidden
になります。
DefaultType MIMETYPE
MIMETYPE
にします。すなわち、AddType
やTypesConfig
ファイルを参照してもMIME型が判明しなかったファイルのMIME型がこれで指定されたものになります。
AddType MIMETYPE SUFFIX
SUFFIX
であるようなファイルのMIME型をMIMETYPE
にします。このディレクティブは複数現われても構いません。このディレクティブによる指定はTypesConfig
ファイルの指定よりも優先されます。
AddHandler MODULENAME SUFFIX
SUFFIX
であるようなURIに対してハンドラをMODULENAME
に設定します。
Options OPTION [...]
OPTION
として利用可能なものは、Indexes
とNoFileCache
です。Indexes
オプションをディレクトリに指定すると、そのディレクトリ及び下位のディレクトリの一覧表示を許可します。NoFileCache
オプションを指定すると、そのディレクトリ及び下位のディレクトリ上のファイルをキャッシュに保存せず、常にディスクから読み出すようになります。
SSLVerifyClient REQUIREMENT
REQUIREMENT
がrequire
のときはSSLCACertificateFile
で指定されたCAが発行した証明書を提示するようクライアントに要求し、提示しなかった場合には接続を切断します。REQUIREMENT
がnone
のときはクライアント認証をおこないません。
SSLVerifyDepth NUMBER
NUMBER
個までの長さのチェーンまで許可します。これを指定したかった場合は1を指定したのと同じことになります。
SSLRequireSSL (On|Off)
On
にすると、SSL接続ではないクライアントからのそのディレクトリ以下へのリクエストを拒否するようになります。
<FilesMatch PATTERN>
</FilesMatch>
に挟まれた行に、ファイル名が正規表現PATTERN
にマッチするようなファイルについての設定を書きます。
<FilesMatch PATTERN>
と</FilesMatch>
に挟まれた内側の行に、以下で説明するディレクティブを書きます。リクエストが複数の<FilesMatch>
のパターンにマッチする場合は、設定ファイルの前のほうにある<FilesMatch>
セクションが有効になります。以下のディレクティブは<FilesMatch>
セクションの外側にも書くことができ、これはリクエストがいずれの<FilesMatch>
セクションにもマッチしない場合にその設定が有効になります。
<Limit METHOD [...]>
</Limit>
に挟まれた行に、メソッドがMETHOD ...
のいずれかである場合についての設定を書きます。
<Limit METHOD [...]>
と</Limit>
に挟まれた内側の行に、以下で説明するディレクティブを書きます。リクエストが複数の<Limit>
のパターンにマッチする場合は、設定ファイルの前のほうにある<Limit>
セクションが有効になります。以下のディレクティブは<Limit>
セクションの外側にも書くことができ、これはリクエストがいずれの<Limit>
セクションにもマッチしない場合にその設定が有効になります。
Require user USERNAME [...]
USERNAME ...
のいずれかであり、なおかつ入力されたユーザ名とパスワードがそのディレクトリに設定されたAuthUserFile
ファイルに書かれた正しいユーザ名とパスワードの組に一致した場合にのみアクセスを許可します。
Require valid-user
AuthUserFile
ファイルに書かれた正しいユーザ名とパスワードの組に一致した場合にのみアクセスを許可します。
<Directory>
にマッチするとき、その<Directory>
の中で設定されていない項目については<Directory>
の外側に書かれた設定が有効になります。一方esehttpdの設定ファイルでは、もしリクエストがある<Directory "/foo/bar">
にマッチするとき、その<Directory "/foo/bar">
の中で設定されていないディレクトリ毎の設定項目についてはデフォルトの値が利用され、<Directory "/foo/bar>
と&lgt;/Directory
で囲まれたセクションの外側に書かれたディレクトリ毎の設定は一切影響を及ぼしません。