CentOS 5.4でWEBサーバーの構築
CentOS 5.4 に Apache を導入し、WEBサーバーとして動作させる。
1. 要件
今回の要件は以下の通り。
- バーチャルホスト設定による複数ドメイン運用を行う。
- アクセス頻度が低い小規模サーバーの構築を目的とする。
- MPMは導入時のデフォルトである prefork を前提としている。
便宜上、設定等について下記の通り仮定する。
- 使用するドメインはドメインは www.example.com および hoge.example.com とする。
2. インストール
例によって yum からインストールする。
[root@localhost ~]# yum -y install httpd
3. httpd.confの編集
Apacheの設定ファイルは /etc/httpd/conf/httpd.conf にある。以下、主に標準設定から変更した部分についてのみ記述する。詳しい情報は公式のリファレンスマニュアルを参照。いくつかの項目は
項目名 | デフォルト | 変更後 | 説明 |
---|---|---|---|
ServerTokens | OS | Min | エラーページやレスポンスヘッダに含めるサーバー情報の指定。OSやモジュールの情報を含めないようにする。 |
Timeout | 120 | 60 | タイムアウトまでの秒数。120秒では長すぎるので60秒に設定。 |
KeepAlive | Off | On | 有効にすることで、一度の接続で複数のリクエストを処理できるようになる。 |
KeepAliveTimeout | 15 | 5 | リクエストを受信しない状態で何秒接続を維持するかを秒数で指定する。少なめでOK。 |
StartServers | 8 | 8 | サービス起動時に生成する子プロセスの数。 |
MinSpareServers | 5 | 3 | 待機プロセス数の最小値。小規模の場合、あまり大きくしない方がよい。 |
MaxSpareServers | 20 | 10 | 待機プロセス数の最大値。小規模の場合、あまり大きくしない方がよい。 |
ServerLimit | 256 | 128 | 起動プロセス数の最大値 = 同時接続数。小規模の場合、あまり大きくしない方がよい。 |
MaxClients | 256 | 128 | 同上。 |
LoadModule | - | - | 沢山あるLoadModuleには不要な物も多い。別表を参考に不要なモジュールをコメントアウト。 |
ServerAdmin | root@localhost | 実際のメールアドレス | サーバー管理者のメールアドレスを指定する。 |
Apache 2.x系ではモジュール体系(特に認証系)が複雑でわかりづらいので少し説明をする。ここで行った分類は独自調査と独断による分類なので、過信は禁物。
- 認証フロントエンド(認証F)
- アクセス制御にユーザー/パスワード認証を採用する際に、実際にクライアントと認証情報をやりとりする際の手法を決定する。標準ではBasic(平文)認証とMD5-DIGEST認証が使用可能。
- 認証プロバイダ(認証P)
- 認証フロントエンドが使用できるユーザー情報には複数の形式があり、認証プロバイダ系モジュールはその各形式を使用するのに必要となる。
- 認証バックエンド(認証B)
- 各種アクセス制御の実現に必要となる。アクセス制御にはIP/ホスト単位やユーザー単位、グループ単位などがあり、それぞれ対応したモジュールが必要となる。
- 認証総合
- 認証プロバイダと認証バックエンドを兼ね備えたモジュール。
- 標準
- 多くの運用において、事実上必須となるモジュール。特に理由がない限り有効にしたほうがよい。
- 拡張
- なくても特に困らないが、場合によっては必要となるモジュール。使用する予定がなければ無効にしてもよい。
- WebDAV
- WebDAV機能を利用する場合に必要となるモジュール。WebDAVを使用しない場合は無効でよい。
- Proxy
- プロクシ機能を利用する場合に必要となる。意図的にProxyサーバーとする場合以外、無効にするべき。
実際に標準の httpd.conf で読み込まれているモジュールは下記の通り。
モジュール名 | 分類 | 用途 |
---|---|---|
mod_auth_basic | 認証F | Basic認証を行う場合に必要。 |
mod_auth_digest | 認証F | MD5-DIGEST認証を行う場合に必要。 |
mod_authn_file | 認証P | テキストファイル(.htpasswd)によるユーザー/パスワード認証に必要。 |
mod_authn_alias | 認証P | 認証エイリアスを設定を使用する場合に必要。 |
mod_authn_anon | 認証P | 認証時にAnonymous接続を許可する場合に必要。 |
mod_authn_dbm | 認証P | DBMファイル(簡易DB)によるユーザー/パスワード認証に必要。 |
mod_authn_default | 認証P | 複数の認証プロバイダを同時に使用した場合、いずれのプロバイダでも認証できなかったアクセスを拒否する? |
mod_authz_host | 認証B | IPやホスト名によるアクセス制御を実現する。特定のIP/ホストからのアクセスを拒否したい場合などに用いる。 |
mod_authz_user | 認証B | ユーザー単位のアクセス制御を実現する。認証に成功した場合にも、特定のユーザーのみにアクセスを許可したい場合などに用いる。 |
mod_authz_owner | 認証B | ユーザー単位のアクセス制御を実現する。認証に成功した場合にも、ファイルの所有者のみにアクセスを許可したい場合などに用いる。公開WEBサーバーでは必要性は低い。 |
mod_authz_groupfile | 認証B | グループ単位のアクセス制御を実現する。認証に成功した場合にも、特定のグループに所属するユーザーのみにアクセスを許可したい場合などに用いる。グループの設定はテキストファイルで行う。 |
mod_authz_dbm | 認証B | グループ単位のアクセス制御を実現する。認証に成功した場合にも、特定のグループに所属するユーザーのみにアクセスを許可したい場合などに用いる。グループの設定はDBMファイルで行う。 |
mod_authz_default | 認証B | 複数の認証バックエンドを同時に使用した場合、いずれのバックエンドでも認証できなかったアクセスを拒否する? |
mod_ldap | 拡張 | LDAP接続の管理を行うモジュール。mod_authz_ldapを使用する場合は必須。 |
mod_authz_ldap | 認証総合 | LDAPによるユーザー/パスワード認証、およびアクセス制御を実現する。 |
mod_include | 拡張 | SSI機能を使用する場合に必要。 |
mod_log_config | 標準 | アクセスログの記録に必要。 |
mod_logio | 標準 | アクセスログに入出力データサイズを記録するのに必要。 |
mod_env | 標準 | CGIなどに環境変数を渡すのに必要。 |
mod_ext_filter | 拡張 | 有効にすることで、レスポンス内容に任意のフィルタリング処理を行うことができるようになる。あまり使用されない。 |
mod_mime_magic | 標準 | 拡張子などからMIMEタイプが判別できなかった場合に、ファイルの内容からMIMEタイプを識別する。 |
mod_expires | 拡張 | 有効にすることで、ExpireヘッダとCache-Controlヘッダを動的に制御できるようになる。 |
mod_deflate | 拡張 | 有効にすることで、レスポンス内容を圧縮して転送量を軽減する DEFLATE フィルターを使用できるようになる。 |
mod_headers | 拡張 | 有効にすることで、リクエストヘッダ/レスポンスヘッダの制御を行うことができるようになる。 |
mod_usertrack | 拡張 | 有効にすることで、Cookieによるユーザー追跡が可能になる。アクセス解析で必要とされない限りいらない。 |
mod_setenvif | 標準 | リクエスト内容に応じて環境変数を設定する機能を提供。 |
mod_mime | 標準 | MIMEタイプの判定や、MIMEタイプ/拡張子別の設定を行うのに必要。 |
mod_dav | WebDAV | WebDAV機能のメインモジュール。 |
mod_status | 拡張 | 有効にすることで、Web上でサーバーの動作状況を確認できるようになる。セキュリティリスクに注意。 |
mod_autoindex | 拡張 | 有効にすることで、indexファイルが存在しない場合にディレクトリ内容を表示できるようになる。 |
mod_info | 拡張 | 有効にすることで、Web上でApacheの設定状況を確認できるようになる。セキュリティリスクに注意。 |
mod_dav_fs | WebDAV | WebDAV機能のファイルシステム制御モジュール。 |
mod_vhost_alias | 拡張 | 有効にすることで、動的バーチャルホスト機能が利用できるようになる。 |
mod_negotiation | 拡張 | 有効にすることで、HTTP/1.1のコンテンツネゴシエーション機能が利用できるようになる。 |
mod_dir | 標準 | DirectoryIndexなど、ディレクトリに関するいくつかの設定を行うのに必要。 |
mod_actions | 拡張 | 有効にすることで、特定のリクエストメソッドやMIMEタイプが呼び出された際に自動でCGIスクリプトを実行できるようになる。まず不要。 |
mod_speling | 拡張 | 有効にすることで、ユーザーが入力ミスをした場合にも正しいコンテンツに誘導することを試みる機能が利用できるようになる。まず不要。 |
mod_userdir | 拡張 | 有効にすることで、http://www.example.com/~user/ のようなユーザー毎の公開ディレクトリを設定できる様になる。 |
mod_alias | 標準 | エイリアス設定を行うのに必要。 |
mod_rewrite | 拡張 | 有効にすることで、特定のパスを別のパスにマッピングするリライト機能が利用できるようになる。 |
mod_proxy | Proxy | HTTP/1.1 プロキシ/ゲートウェイサーバ−。 |
mod_proxy_balancer | Proxy | Proxyサーバーに負荷分散機能を提供する。 |
mod_proxy_ftp | Proxy | ProxyサーバーでFTPサーバーへアクセスできる様にする。 |
mod_proxy_http | Proxy | ProxyサーバーでHTTPサーバーへアクセスできる様にする。 |
mod_proxy_connect | Proxy | ProxyサーバーでCONNECTリクエストを扱うのに必要となる。 |
mod_cache | 拡張 | 有効にすることで、各種キャッシュ機能を利用できるようになる。 |
mod_suexec | 拡張 | 有効にすることで、CGIスクリプトを実行するユーザー/グループを設定できるようになる。 |
mod_disk_cache | 拡張 | 有効にすることで、動的コンテンツの出力結果などをディスク上にキャッシュできるようになる。 |
mod_file_cache | 拡張 | 有効にすることで、特定のファイルを起動時にメモリ上にキャッシュできるようになる。 |
mod_mem_cache | 拡張 | 有効にすることで、動的コンテンツの出力結果などをメモリ上にキャッシュできるようになる。 |
mod_cgi | 標準 | CGIスクリプトの実行に必要。 |
mod_version | 拡張 | 有効にすることで、Apacheのバージョン別の設定を行うことができるようになる。 |
今回は下記のモジュールを無効化した。
- mod_authn_anon
- mod_authn_dbm
- mod_authz_owner
- mod_authz_groupfile
- mod_authz_dbm
- mod_include
- mod_ext_filter
- mod_usertrack
- mod_dav
- mod_status
- mod_autoindex
- mod_info
- mod_dav_fs
- mod_vhost_alias
- mod_negotiation
- mod_actions
- mod_speling
- mod_rewrite
- mod_proxy
- mod_proxy_balancer
- mod_proxy_ftp
- mod_proxy_http
- mod_proxy_connect
- mod_cache
- mod_suexec
- mod_disk_cache
- mod_file_cache
- mod_mem_cache
- mod_version
LDAP認証を行うつもりなのでLDAP系のモジュールは無効化していない。LDAP認証を行うつもりがなければ
も無効化していいだろう。mod_rewriteなどはよく使われるモジュールだが、必要となった際に有効化すればよいと考えた。また、mod_autoindex と mod_negotiation を無効化したため、
- IndexOptions
- AddIconByEncoding
- AddIconByType
- AddIcon
- DefaultIcon
- ReadmeName
- HeaderName
- IndexIgnore
- LanguagePriority
- ForceLanguagePriority
の各行をコメントアウトした。
4. conf.d/*.conf の編集
最近のApacheは httpd.conf 以外にも /etc/httpd/conf.d 以下の設定ファイルを読むようになっている。今回のインストールでは
- proxy_ajp.conf
- welcome.conf
の2ファイルがインストールされていた。welcome.conf は不要、proxy_ajp.conf もProxyを使用しない限り不要なので、全て内容をコメントアウトしておく。
[root@localhost ~]# vim /etc/httpd/conf.d/proxy_ajp.conf (内容を全てコメントアウトして保存) [root@localhost ~]# vim /etc/httpd/conf.d/welcome.conf (内容を全てコメントアウトして保存)
5. バーチャルホスト設定
続いてバーチャルホストの設定を行う。httpd.confに直接記述しても構わないのだが、バーチャルホストが増えたりする度にhttpd.confを編集するのは気が引ける。よって /etc/httpd/conf.d 以下に virtualhost.conf を作成し、バーチャルホスト関連の設定はそこで行うことにする。今回は以下の内容で virtualhost.conf を作成した。また、今回設定するバーチャルホストの管理はhogeユーザーに行わせることとし、DocumentRootはhogeユーザーのホームディレクトリ以下とした。
NameVirtualHost *:80 <Directory "/home/hoge/public_html"> Options All -Indexes AllowOverride All Order allow,deny Allow from all </Directory> <VirtualHost *:80> ServerName www.example.com DocumentRoot /home/hoge/public_html/www.example.com ServerAdmin hoge@example.com CustomLog logs/access_log combined ErrorLog logs/error_log </VirtualHost> <VirtualHost *:80> ServerName hoge.example.com DocumentRoot /home/hoge/public_html/hoge.example.com ServerAdmin hoge@example.com CustomLog logs/access_log combined ErrorLog logs/error_log </VirtualHost>
ここで指定した DocumentRoot が存在しないと起動時にエラーが表示されてしまうので、hogeユーザーでログインし、ディレクトリを作成しておく。
[root@localhost ~]$ mkdir public_html [root@localhost ~]$ mkdir public_html/www.example.com [root@localhost ~]$ mkdir public_html/hoge.example.com
さらに、テストのためのページを作成しておこう。
[root@localhost ~]$ echo 'This is test.' > public_html/www.example.com/index.html
6. 起動と動作確認
設定を完了したらApacheを起動する。
[root@localhost ~]# service httpd start
WEBブラウザから http://www.example.com/ へアクセスし、先程設定した"This is test."が表示されることを確認する。確認できたら、次回から起動時に実行されるように設定する。
[root@localhost ~]# chkconfig httpd on