/etc/httpd/conf.d 以下の設定ファイルで syntax highlight 改訂版
/etc/httpd/conf.d 以下の設定ファイルを vim で編集する際に syntax highlight を有効にする方法について、http://d.hatena.ne.jp/shogo0809/20091225/1261737524 で行った方法がよろしくなかった事を知ったので、正しい手順で再度メモ。。
1. 事前準備
必要なディレクトリを作成する。すでに存在する場合は不要。
[root@localhost ~]# mkdir ~/.vim [root@localhost ~]# mkdir ~/.vim/ftdetect
CentOS 5.4でDNSサーバーの構築
CentOS 5.4にBINDを導入し、DNSサーバーとして動作させる。
1. 要件と仮定
今回の要件は以下の通り。
- 保有している独自ドメイン用のゾーンサーバーとして動作させる。
- 同時に、内部ネットワーク用のキャッシュサーバーとしても動作させる。
便宜上、設定等について以下の通り仮定する。
- 固定IPネットワーク 123.45.67.0/29 を取得済みであるとする。
- 内部ネットワークは 192.168.0.0/24 であるとする。
- 保有する独自ドメインは example.com であるとする。
2. インストール
yumからインストールを行う。セキュリティを考慮してchroot環境で動作させたいので、bind-chroot も同時に導入しておく。
[root@localhost ~]# yum -y install bind bind-chroot
2009年12月24現在、yumでインストールした場合のバージョンは 9.3.6 だった。以降の手順の確認は本バージョンで行っており、以前・以降のバージョンでは異なる場合があるので注意してほしい。
3. 設定
まず、bindの設定ファイルである named.conf を作成する。bind-chrootを導入した場合のパスは /var/named/chroot/etc/named.conf だ。設定方法が複雑なため、細かくコメントを入れているが、実際のファイルにコメントを記述する必要はない。
BIND9から実装された view ステートメントにより、リクエスト元のアドレスや受信インターフェースのアドレスなどにより、namedの挙動や返答内容を変えることができる。
view 定義は先頭から順に評価され、最初に全条件にマッチした view が使用される。ここではLAN向けの view と WAN向けの view を定義し、LAN向けには再帰問い合わせを許可するようにしている。また、LANへはローカルIP、WANへはグローバルIPを返すよう、ゾーンファイルをLAN用とWAN用で分けている。
# ネットワーク定義。ローカルネットワークを定義している。 acl "lan" { 127.0.0.1; 192.168.0.0/24; }; # ネットワーク定義。ゾーン転送を許可するホストを定義している。 # 有効なスレーブサーバーのIPを全て指定すればOK。 acl "slaves" { 192.168.0.3; }; # デフォルトオプション設定 options { # ゾーン情報が更新された場合にスレーブサーバーへ通知する。 notify yes; # バージョン情報を非公開とする。 version "unknown"; # ゾーン情報が格納されているディレクトリ。 # chroot環境の場合、以下の設定で /var/named/chroot/var/named となる。 directory "/var/named"; # ゾーン情報が更新された場合に通知するホストのリスト。 also-notify { slaves; }; # ゾーン情報のコピー(ゾーン転送)を許可するホストのリスト。 allow-transfer { slaves; }; }; # ログ設定 logging { # 通常のログチャンネル channel "log_default" { # ログファイルの指定とログの最大サイズ、保管世代数の指定。 file "/var/log/default.log" versions 7 size 10m; # ログのレベルの指定。 severity info; # ログの各行に日時を記録する。 print-time yes; # ログの各行にカテゴリ名を記録する。 print-category yes; }; # セキュリティ関連ログチャンネル channel "log_security" { file "/var/log/security.log" versions 7 size 10m; severity info; print-time yes; print-category yes; }; # 通常のログはログチャンネル log_default に記録。 category "default" { log_default; }; # セキュリティ/クライアント関連のログはログチャンネル log_security に記録。 category "security" { log_security; }; category "client" { log_security; }; }; # LAN用VIEW view "internal" { # 条件:ローカルネットワーク内からのリクエストである事。 match-clients { lan; }; # 条件:ローカルIPへ送られてきたリクエストである事。 match-destinations { lan; }; # 再帰問い合わせに応答する。 recursion yes; # ルートヒントファイルを読み込む。 include "/etc/named.root.hints"; # RFC1912に定義されているローカルエリア等のゾーン情報を読み込む。 include "/etc/named.rfc1912.zones"; # LAN向け example.com 正引きゾーン定義 zone "example.com" { type master; file "example.com.lan.zone"; }; # IPネットワーク 192.168.0.0/24 逆引きゾーン定義 zone "0.168.192.in-addr.arpa" { type master; file "lan.rev"; }; }; # WAN用VIEW view "external" { # 条件:LAN用VIEWにマッチしなかった全ての接続が対象となる。 match-clients { any; }; match-destinations { any; }; # 再帰問い合わせに応答しない。 recursion no; # WAN向け example.com 正引きゾーン定義 zone "example.com" { type master; file "example.com.wan.zone"; }; # IPネットワーク 123.123.123.0/29 逆引きゾーン定義 # ゾーン名はISPから指定された名前を設定すること。 # また、ISPから逆引き権限が委譲されない場合、設定は不要。 zone "sub-a.67.45.123.in-addr.arpa" { type master; file "wan.rev" } };
次に /var/named/chroot/etc/named.root.hints を以下の様に作成する。
zone "." { type hint; file "named.root"; };
続いて /var/named/chroot/etc/named.rfc1912.zones を作成する。/usr/share/doc/bind-9.3.6/sample/etc/named.rfc1912.zones にあるサンプルをそのままコピーすればOK。
[root@localhost ~]# cd /usr/share/doc/bind-9.3.6/sample/etc [root@localhost etc]# cp named.rfc1912.zones /var/named/chroot/etc/
/var/named/chroot/var/named 以下に必要なファイルをコピー(または作成)する。
[root@localhost ~]# cd /usr/share/doc/bind-9.3.6/sample/var/named [root@localhost named]# cp local*.zone /var/named/chroot/var/named/ [root@localhost named]# cp named.* /var/named/chroot/var/named/ [root@localhost named]# chown root:named *.* [root@localhost named]# chmod 644 *.*
ログファイルが存在しないとログの記録が開始されないため、あらかじめ用意しておく。
[root@localhost ~]# mkdir /var/named/chroot/var/log [root@localhost ~]# touch /var/named/chroot/var/log/default.log [root@localhost ~]# touch /var/named/chroot/var/log/secuirty.log [root@localhost ~]# chgrp named /var/named/chroot/var/log/*.log [root@localhost ~]# chmod 664 /var/named/chroot/var/log/*.log [root@localhost ~]# ln -s /var/named/chroot/var/log /var/log/named
4. 正引きゾーンファイルの作成
いよいよ自ドメイン用の設定に入る。ドメインからIPを割り出すためのデータファイルは「ゾーンファイル」と呼ばれ、ドメインごとに作る必要がある。ゾーンファイルは「レコード」と呼ばれる情報を列挙する形で記述する。レコードの形式は次のようになっている。
ホスト[ TTL] クラス タイプ データ[ データ[ データ]*]
「ホスト」はその名の通りホスト名を指定する。省略に関するルールが絡むので混乱しやすい。省略しない場合は「hostname.example.com.」の様に ホスト名.ドメイン名. の形となるが、ドメイン部は省略可能なので「hostname」とだけ書いても同じ意味になる。また、「@」とだけ書いた場合は「example.com.」と解釈される。また、レコードの先頭が空白文字で始まる=ホストを省略した場合、直前のレコードと同じホストが指定されたと見なされる。
「TTL」はそのレコードがキャッシュされた場合の有効期限だが、レコード毎にTTLを変える事は稀であり、たいてい省略される。省略した場合、$TTL で設定した数値が指定されたと見なされる。
「クラス」は本来ネットワークの種別などを指定するために存在するが、現在ではインターネットを表す "IN" 以外の設定はまず行われない。省略しないこと。
「タイプ」はレコードの種別を表す。使用可能なタイプと簡単な説明は下記の通り。
タイプ | 用途 |
---|---|
SOA | ゾーンファイルに必ず必要となるレコード。ゾーンに関する情報などを指定する。 |
NS | ネームサーバーの指定。 |
MX | メールサーバーの指定。 |
A | ホスト名に対応するIPv4アドレスの指定。 |
AAAA | ホスト名に対応するIPv6アドレスの指定。 |
CNAME | ホストの別名(Canonical Name)の指定。 |
PTR | PoinTeRレコード。主に逆引き設定に使用される。 |
「データ」はタイプ毎に必要なパラメータを指定する。必要なパラメータの内容や数はタイプによって異なる。データ部にホスト名を指定する場合、ホスト部と同様のルールで省略が可能。
各パラメータは任意の数の空白(半角スペースまたはTab文字)で区切られ、レコードとレコードの間は改行で区切られる。ただし、SOAレコードなどは1行に記述すると見づらいため、括弧でくくる事で複数行の記述も可能だ。
LAN向け正引きデータである /var/named/chroot/var/named/example.com.lan.zone を例に記述方法を解説する。
; デフォルトのTTL(キャッシュ有効期限)。以下の場合1日に設定。 $TTL 86400 ; SOAレコード(詳細は後述) @ IN SOA ns1 root ( 2009122401 ; Serial 3H ; Refresh 1H ; Retry 1W ; Expire 1H ; Min-TTL ) ; NSレコード ; データ部にはネームサーバーのホスト名を指定する。 IN NS ns1 IN NS ns2 ; MXレコード ; データ部には優先度とホスト名を指定する。 ; 優先度が低いサーバーから使用される。 IN MX 10 mail ; Aレコード ; ホスト名に対応するIPアドレスを指定する。 IN A 192.168.0.2 mail IN A 192.168.0.2 router IN A 192.168.0.1 host01 IN A 192.168.0.2 host02 IN A 192.168.0.3 host03 IN A 192.168.0.4 ; CNAMEレコード ; ホスト名に対応するホスト名を指定する。 ns1 IN CNAME host01 ns2 IN CNAME host02 www IN CNAME host01
SOAレコードに記述するデータは
- NameServer
- MailAddress
- Serial
- Refresh
- Retry
- Expire
- Minimum
と7つもあるため、上記のように括弧を使って複数行に分けるのが通例。それぞれ次の通り設定する。
項目 | 例 | 設定内容 |
---|---|---|
NameServer | ns1 | ドメインのプライマリネームサーバー、つまりBINDをセットアップ中のサーバーのホスト名を指定する。例の場合 "ns1.example.com" となる。 |
MailAddress | root | ゾーンファイルに記述されているドメインについての連絡先。例の場合 "root@example.com" となる。 |
Serial | 2009122401 | ゾーン情報の改訂番号。ゾーンファイルを更新した場合に以前より大きい数値を指定する必要がある。YYYYMMDD+2桁の連番とするのが通例。 |
Refresh | 3H | スレーブサーバーによる更新確認頻度の指定。例の場合3時間。 |
Retry | 1H | スレーブサーバーが更新確認に失敗した場合のリトライ間隔。例の場合1時間。 |
Expire | 1W | スレーブサーバーが更新を行わなかった場合のゾーン情報有効期限。指定期間以内に再び更新を行わなかったスレーブサーバーはクライアントからのリクエストに応答できなくなる。 |
Min-TTL | 1D | ネガティブキャッシュの有効期限。ネガティブキャッシュについては後述する。 |
ネガティブキャッシュについて説明するためには、まずDNSサーバーの役割について解説する必要がある。要件でもさらりと書いたが、DNSには大きく分けて2つの機能がある。
- ゾーンサーバー
- ドメインからIP、IPからドメインへの名前解決を実際に行うサーバー。ゾーン情報を保有する。
- キャッシュサーバー
- クライアントからの問い合わせに応じて外部のゾーンサーバーに問い合わせを行い、その結果をクライアントに返すと共に、一定期間結果をキャッシュする。
このキャッシュサーバーによる「キャッシュ」は正常な応答をキャッシュするのはもちろん、名前解決に失敗した事も記憶する。この失敗についての記憶が「ネガティブキャッシュ」だ。SOAレコードの「Min-TTL」はこのネガティブキャッシュの有効期限を指定するパラメータとなる。
ゾーンファイルを作成したら、named-checkzone コマンドで間違いがないか確認する。以下のように「OK」とでれば問題なし。
[root@localhost ~]# named-checkzone example.com /var/named/chroot/var/named/example.com.lan.zone zone example.com/IN: loaded serial 2009122401 OK
同様に、WAN向けのゾーンファイル example.com.wan.zone も作成し、チェックしておく。
5. 逆引きゾーンファイルの作成
次にLAN向け逆引きデータ /var/named/chroot/var/named/lan.rev を作成する。SOAレコードとNSレコードについては正引きの場合とほぼ一緒でOK。PTRレコードは同じIPについて1レコードしか記述できないので注意。
$TTL 86400 @ IN SOA ns1 root ( 2009122401 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 86400 ; Minimum ) ; NSレコード IN NS ns1.example.com. IN NS ns2.example.com. ; PTRレコード ; IPからドメイン名に変換する逆引き設定。 1 IN PTR router.example.com. 2 IN PTR host01.example.com. 3 IN PTR host02.example.com. 4 IN PTR host03.example.com.
こちらも named-checkzone コマンドで確認する。
[root@athena named]# named-checkzone 0.168.192.in-addr.arpa /var/named/chroot/var/named/lan.rev zone 0.168.192.in-addr.arpa/IN: loaded serial 2009122401 OK
6. namedの起動と確認
namedを起動し、次回から自動的に実行されるように設定する。
[root@localhost ~]# service named start [root@localhost ~]# chkconfig named on
起動したら、dig コマンドで応答を確認する。
[root@localhost ~]# dig @127.0.0.1 www.example.com ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_4.1 <<>> @127.0.0.1 www.example.com ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43734 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.example.com. IN A ;; ANSWER SECTION: www.example.com. 86400 IN CNAME host01.example.com. host01.example.com. 86400 IN A 192.168.0.2 ;; AUTHORITY SECTION: example.com. 86400 IN NS ns2.example.com. example.com. 86400 IN NS ns1.example.com. ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Dec 24 18:38:41 2009 ;; MSG SIZE rcvd: 106
こんなカンジに返答が帰ってくればOK。
CentOS 5.4にPHPを導入する
Apache をインストール済みの CentOS 5.4 に PHP を導入し、PHPによるWEBアプリケーションが動作するようにする。
1. 要件
今回の要件は以下の通り。
2. インストール
要件通り、yum でインストールを行う。
[root@localhost ~]# yum -y install php php-gd php-mysql php-mbstring
3. 設定
PHPの設定ファイル(/etc/php.ini)を編集する。以下に特に確認・変更を行うポイントのみを示す。なお、これらの変更は必須ではないので、デフォルトのまま使っても基本的には問題ない。
項目 | 変更前 | 変更後 | 理由 |
---|---|---|---|
memory_limit | 32M | 16M | デフォルトの16MBのままだと一部アプリケーションが動作しない場合がある。少し余裕を持たせて32Mに変更する。 |
log_errors | On | On | エラーをログに記録するか否か。Onであることを確認する。 |
error_reporting | E_ALL | E_ALL & ~E_NOTICE | デフォルトだと、利用するWEBアプリケーションによっては大量のログが記録されてしまう。実行に影響ないエラーは記録しないようにする。 |
html_errors | Off | コメントアウトされているので解除する。PHPのエラー表示がHTMLでうれしかった試しがない。 | |
error_log | /var/log/php.log | 新しく追加するか、コメントアウトを解除して書き換える。エラーログの記録先の指定。 | |
register_globals | Off | Off | この設定をOnにすることはセキュリティホールを自分で作ることと同義。Offであることを確認する。 |
magic_quotes_gpc | Off | Off | この設定をOnにすると、一部のWEBアプリケーションが動作しなくなる。Offであることを確認する。 |
date.timezone | Asia/Tokyo | この項目を設定しないと、一部のWEBアプリケーションが動作しなくなる。正しく設定する。 |
4. Apache の再起動
Apache+PHP の場合、Apacheを再起動することでPHPモジュールがロードされる。気になる人は /etc/httpd/conf.d/php.conf が作成されていることを確認しよう。確認したら、以下のコマンドで Apache を再起動。
[root@localhost ~]# service httpd graceful
5. 動作確認
試しに、どこか適当なところに下記のようなファイルを作成する。
<?php phpinfo(); ?>
アクセスすると、PHPに関する情報が確認できるページが表示される。設定内容や読み込まれているモジュールの情報が確認できるので、ここで一通り確認しよう。確認が終わったら同ファイルは削除した方がよい。
/etc/httpd/conf.d 以下の設定ファイルで syntax highlight
/etc/httpd/conf.d 以下の設定ファイルを vim で編集する際に syntax highlight を有効にする方法についてメモ。
追記(2010-01-08):以下の方法はお行儀が悪い(=やっちゃいけない)事が判明した。お行儀のよい作法については以下の記事を参照。
1. 経緯
CentOS 5.4 の Apache 2.x では /etc/httpd/conf/httpd.conf の他に /etc/httpd/conf.d 以下のファイルが自動で読み込まれる。これら設定ファイルを編集する機会は多いが、vim で開いても syntax highlight が有効にならない。気にしなければいいし、開く度に
:set syntax=apache
とすれば syntax highlight される……が、気になるし毎回コマンドを入力するのもアホらしい。どうすれば自動で判別してくれるのか。
2. 調査結果
当初、なんらかの方法でファイルを解析して判別していると思っていたのだが、何のことはない、ファイルの拡張子やパスで判別しているに過ぎなかった。その定義が /usr/share/vim/vim70/filetype.vim にある事がわかったので早速覗いてみると、以下のような行を見つけた。
" Apache config file au BufNewFile,BufRead .htaccess setf apache au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/apache2/*.conf*,auth_mysql.conf*,auth_pgsql.conf*,ssl.conf*,perl.conf*,php.conf*,python.conf*,squirrelmail.conf* call s:StarSetf('apache')
ここで Apache に関するファイルの定義を行っているわけだが、注目したのは
/etc/apache2/*.conf*
の部分。Debian などの場合これでいいっぽいが、CentOSの場合は /etc/httpd 以下に設定ファイル群がインストールされる。この差が syntax highlight されない原因だと断定。
3. 対応
/usr/share/vim/vim70/filetype.vim の該当部分を以下のように書き換えた。
" Apache config file au BufNewFile,BufRead .htaccess setf apache au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/httpd/*.conf*,auth_mysql.conf*,auth_pgsql.conf*,ssl.conf*,perl.conf*,php.conf*,python.conf*,squirrelmail.conf* call s:StarSetf('apache')
書き換えたら保存して、改めて /etc/httpd/conf.d 以下のファイルを開いてみると、バッチリ色づけされている。これで気持ちよく Apache の設定ファイルを編集することができそうだ。
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