インストールが済んだら、Apache の設定をしていきます。本ページでは、基本となる設定 ( CGI 、Userdir 、PHP 等)のみ示し、SSL
化 ( https ) 、DAV 、バーチャルホストについては各ページ参照ください。
- 不要モジュールの設定
デフォルトでは全てのモジュールが組み込まれるようになっているが、リソースの無駄遣いなので使う予定のないものをロードしないように設定(コメントアウト)する。モジュールの概要については、
Apacheのドキュメントを参照のこと。
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
#LoadModule auth_anon_module modules/mod_auth_anon.so
LoadModule auth_dbm_module modules/mod_auth_dbm.so
LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule ldap_module modules/mod_ldap.so
#LoadModule auth_ldap_module modules/mod_auth_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule expires_module modules/mod_expires.so
#LoadModule deflate_module modules/mod_deflate.so
#LoadModule headers_module modules/mod_headers.so
#LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
#LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule asis_module modules/mod_asis.so
#LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
#LoadModule imap_module modules/mod_imap.so
LoadModule actions_module modules/mod_actions.so
#LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
#LoadModule disk_cache_module modules/mod_disk_cache.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule cgi_module modules/mod_cgi.so
|
- サーバ管理者のメールアドレスの設定
エラーメッセージなどで表示されるサーバ管理者のメールアドレスを設定する。
#ServerAdmin root@localhost
ServerAdmin webmaster@mail.aconus.com
|
- サーバ名称の設定
この設定は、リダイレクトする URL を生成する際に利用されるので、サーバのマシン名ではなくサーバアクセス時のFQDNを指定する。DNSで牽ける名前を設定すること。
#ServerName new.host.name:80
ServerName www.aconus.com:80
|
- ドキュメントルートの変更(基本的に変更不可)
CentOSでは SuEXEC 環境になっているので、これを変更するとドキュメントルート配下で CGI が動作しない。従って、基本的には変更不可である。
CGI を cgi-bin ディレクトリ配下で動作させるなら変更も可能なので、その場合は一例であるが以下のようにセットで変更する。
#DocumentRoot "/var/www/html"
DocumentRoot "/home"
#
# This should be changed to whatever you set DocumentRoot to.
#
#<Directory "/var/www/html">
<Directory "/home">
|
- ドキュメントルートでのCGI/SSIの実行権付与とインデックスリストの非表示
CentOS のデフォルトでは Options デレクティブは Indexes と FollowSymLinks が指定されているが、ドキュメントルートでは
CGI が動作しないので必要なら指定する。また、Indexesがあると、ドキュメントルートにindex.html等のDirectoryIndexで指定したファイルがないとインデックスリストが表示されてしまうので、削除するほうがよい。
・Indexes : インデックスリストの表示
・FollowSymLinks : Symlink の使用許可
・Includes : SSI
の実行権付与
・ExecCGI : CGI の実行権付与
# Options Indexes FollowSymLinks
Options FollowSymLinks Includes
ExecCGI |
- ドキュメントルートでのディレクトリアクセス制御
CentOS のデフォルトでは AllowOverride デレクティブは None となっているので、.htaccess による制御や認証等が行えない。必要に応じて変更すること。詳細は Apache
のドキュメントを参照のこと。
・FileInfo : ファイル関係の制御
・AuthConfig : 認証関係
・Limit : アクセス制御(.htaccess)
# AllowOverride
None
AllowOverride FileInfo AuthConfig
Limit
|
- ユーザディレクトリの有効化と配下でのCGI/SSIの実行権付与とインデックスリストの非表示
Userdir を有効にするため、以下のように設定する。<Limit> ディレクティブは、アクセス制御の範囲を 指定された HTTP
メソッドに限定するもので、それ以外のメソッドは、影響を受けない。つまり、下記では、GET POST OPTIONS PROPFIND のメソッドに対してのみアクセスの制御を行ない(ここではアクセス許可)、
それ以外のメソッドについてはアクセス制御がかからない。
<LimitExcept> は、<Limit> セクションの反対の動作をし、
標準のメソッドと標準外や未認識のメソッドの場合の両方を設定できる。下記では、GET POST OPTIONS PROPFIND
のメソッド以外のアクセス制御が行われ、ここでの設定では不許可になる。<LimitExcept>は未設定のメソッド全てに制御がかかるので、こちらで設定したほうが確実である。
CGI/SSIの実行権付与とインデックスリストの非表示に関する設定内容は、5項/6項に準じて行えばよい。おやじが行ったのは、Indexesの削除とExecCGIの追加である。
なお、CentOSの場合、デフォルトで/home/usersのパーミッションが700になっているためアクセスすると403エラーとなるので、701/711に変更が必要である。
<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the
presence
# of a username on the system (depending on home directory
# permissions).
#
#UserDir disable
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disable" line
above, and uncomment
# the following line instead:
#
#UserDir public_html
UserDir public_html
</IfModule>
#
# Control access to UserDir directories. The following is an example
# for a site where these directories are restricted to read-only.
#
#<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# <Limit GET POST OPTIONS>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS>
# Order deny,allow
# Deny from all
# </LimitExcept>
#</Directory>
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec ExecCGI
# <Limit GET POST OPTIONS>
# Order allow,deny
# Allow from all
# </Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
|
- ディレクトリアクセス時に検索するファイル名の追加
ディレクトリアクセス時(http://www.aconus.com/~oyaji/のように/で終わっていたり、ディレクトリで終わっているようなアクセスの時)、ApacheはDirectoryIndexで指定されているファイルがそのディレクトリ配下にないか、左側のファイル名から順番に探しにいき、存在すればそのファイルを返送する。
おやじは、index.htmを基本にしているので、それを追加した。検索は左優先なので、どのように並べるかはそれぞれの環境に依存する。なお、SquirrelMailでindex.phpがデフォルトのファイルになっているが、CentOSでは、これに関してはphp.confで設定されているのでここでは設定不要。
DirectoryIndex index.html index.htm
index.html.var
|
- ホストネームでのログ収集
この機能を使うと、DNSの逆牽きで負荷が重くなるとともに応答が遅くなるが、アクセスがまだまだ少ないのとホストネームのほうが常連さんならすぐにわかるため、あえて使用しています。ただ、逆牽き設定をしていないDNSや設定が誤っているDNSが多くエラーログがかなり出てしまいます。(BINDの設定でログらないようにしています。)
#HostnameLookups Off
HostnameLookups On
|
- ログのカスタマイズ
おやじは管理上、以下のような方法でユーザ毎のログの分離や家庭内からのアクセス、worm 等のログを分離して収集しています。
#CustomLog logs/access_log combined
SetEnvIf Remote_Addr 192.168.1. homelog nolog
SetEnvIf Request_URI "~akirin" akirinlog nolog
SetEnvIf Request_URI "default.ida" wormlog nolog
SetEnvIf Request_URI "root.exe" wormlog nolog
SetEnvIf Request_URI "cmd.exe" wormlog nolog
SetEnvIf Request_URI "Admin.dll" wormlog nolog
CustomLog logs/home_log common env=homelog
CustomLog logs/akirin_log combined env=akirinlog
CustomLog logs/worm_log common env=wormlog
CustomLog logs/access_log combined env=!nolog
|
・1行目のCustomLog logs/access_log common をコメントアウトし、以下を記述。
・2/8行目で、家庭内からのアクセスをhome_logに採取。不要ならコメントアウト。
・3/9行目で、娘のサイトへのアクセスをakirin_logに採取。common -> combinedとしてreferrerを採取。
・4行目でCodeRed、5〜7行目でNimudaからアタックを識別し、10行目でworm_logに採取。不要ならコメントアウト。
・11行目で残りのアクセスをaccess_logに採取。common -> combinedとしてreferrerを採取。おやじのサイトへのアクセスは、ここに含まれる。
- 日本語表示の設定(ブラウザのエンコード自動選択時の文字化け対策: 1個所。詳細は、こちらを参照のこと。)
CentOSのApacheは、デフォルトで強制的にUTF-8キャラクタセットで表示するようになっており、下記のようにコンテンツのMETAタグで「charset=Shift_JIS」等の指定をしていても文字化けしてしまう。
<META http-equiv="Content-Type" content="text/html;
charset=Shift_JIS">
一般的な対処方法としては、AddDefaultCharset ディレクティブをコメントアウトするか、「AddDefaultCharset Off」とすれば良い。但し、このような設定をすると、ドキュメントで必ずcharsetを指定しないと文字化けする。おやじのコンテンツには、EUC-JP と shift-jis の両方があるようなケースではこれ以外の方法はなく、ドキュメントに依存して表示させるしかない。そのため、一部の CGI 等も改造しているので注意が必要である。
shift-jis
のコンテンツしかないなら、 AddDefaultCharset shift_jis とすれば良い。
- CGI ファイル拡張子の定義
おやじのようにcgi-binディレクトリ以外でCGIを動作させたい場合、本ディレクティブのコメントアウトを外し(行頭の#を削除)、CGI
として動作させたい拡張子を記述する。おやじは、「.pl」を追加した。
# To use CGI scripts outside of ScriptAliased directories: # (You
will also need to add "ExecCGI" to the "Options"
directive.) # AddHandler cgi-script .cgi
.pl |