二つの異なるサイトを動かさなければならなくなったので、Apacheでバーチャルホストを動かすことにしました。バーチャルホストには、一つのIPアドレスで運用できる名前ベースのバーチャルホストと、IPアドレスがそれぞれのサイト分必要なIPベースのバーチャルホストがあります。通常ならコストもかからない名前ベースで充分なのですが、おやじは、SSL対応が必要なので今回はIPベースで動かすことにしました。名前ベースのバーチャルホストでは、アクセスしてきたホスト名をベースにApacheが制御しますが、SSLセキュアサーバではSSLでの認証が先に走るため使えません。下記は、RedHat9.0でApache2.0.47で検証したものです。家庭内から自宅サーバへのアクセスで問題が発生したので、ネットワーク構成を全面的に変更しました。前述のようにSSLを使用するためIPベースでバーチャルホストを実現しなければならないので、サイト分のIPアドレスが必要です。おやじは、Bフレッツマンションタイプで2つのISPと契約しているので、最大2つのサイトを構築できます。ネットワーク的には、サーバのNICにIPアドレスを2個付与するとともに、ルータのポリシールーティングを使うことで対応しました。ネットワーク関係の詳細はこちらを参照してください。■Apacheの設定Apacheのバーチャルホスト設定は、VirtualHostディレクティブで行います。SSL用も必要なので、2つのサイトで4つのVirtualHostの設定が必要になりますが、Section3にサンプルがあるVirtualHostディレクティブで通常アクセス用の設定をします。バーチャルホストの設定にあたっては、Apacheの動作が重要になります。アドレスで定義すればアクセスが明示されるので、設定は簡単です。おやじのような環境では、サイト毎にIPアドレスが一つしかないため、ドメイン名(http://example0.com)やホスト名((http://www.example0.com)だけでなく、DNSのホスト名でも同じアドレスでApacheにアクセスされ、ServerNameがミスマッチしてもアクセスできてしまいます。httpd.confの設定httpd.confでバーチャルホストの設定をしますが、httpd.confが大きくなってきて扱いにくくなってきたので、vhost.confとして作成し、Includeするようにしました。vhost.confのIncludehttd.confに下記を1行追加して、バーチャルホストの設定をvhost.confからIncludeする。conf/vhost.conf続いて、下記内容をvhost.confとして作成し、他の設定ファイルと同じconfディレクトリ配下に設置します。サンプルを参考に、各サイト固有に定義する必要がある設定を追加します。基本的に、元のサイトで設定していた設定は移す必要があり、ほとんどのディレクティブがバーチャルホストで使用できますので、設置に困ることはないと思います。バーチャルホストで使用できるディレクティブかどうかは、ドキュメントのコンテキストを見ればわかります。ここでは、www.aconus.com用のプライベートアドレスを192.168.1.100、www.example.com用を192.168.1.101として説明します。192.168.1.100)とLintenしているポート(通常は80)を「:」で区切って指定する。ServerAdminサーバ管理者のメールアドレスを指定する。postfixがバーチャルホスト未対応なので同じに設定した。DocumentRoot各サイトのドキュメントルートを指定する。ここでは、www.aconus.comは従来どおりとし、www.example.comは「/var/www」とした。各サイトの動作条件も追加設定する。ServerName各サイトのサーバ名(アクセスしてくるホスト名)を指定します。このバーチャルホストのServerNameを探すので重要であるが、IPベースの場合はさほどの意味を持っていない。内向きDNSがないなら、hostsファイルで設定しておくとよい。その他www.aconus.comでは、UserDirを使用しているのでその設定を今までのベースホストの設定から転記すると同時に、ログの分離収集のための設定も転記した。サイト毎に必要な設定を行えばよく、おやじのHPのApache関係の設定や他のサイトの情報、マニュアルを参考にして設定する。ssl.confの設定バーチャルホストのSSL関係の設定も、全てhttp.confと同じディレクトリに作成されるssl.confで行います。設定に先立ち、こちらでサイト毎の証明書を作成しておきます。ポイントは、server.csr作成時のホスト名で、ブラウザでアクセスするホスト名と一致させないと、CA証明書をインストールしても毎回ホスト名が違うと怒られます。ここでは、www.aconus.com用としてserver0.key/server0.crtを、www.example.com用としてserver1.key/server1.crtを作成したものとして記述します。下記は、デフォルトから変更したイメージで示してあり、設定内容は、基本的に上記およびSSL化対応に順次ます。(青字は削除、赤字は追加、緑字は変更したものです。%b"</VirtualHost></IfDefine>■logrotateの設定loglotateは、/etc/logrotate.d配下にあるapacheを参考に作成していますが、おやじは、下記のようなワイルドカードでの設定なので今回は変更していません。(青字は削除、赤字は追加、緑字は変更したものです。行頭の数字は説明上、おやじが付加したものです。logrotateしたいlogファイル名を*_logでワイルドカード指定。ログファイルが無くとも、処理を正常終了させる。1行目で複数指定されたlogファイルに対し、postrotate以降設定されたコマンドを実行する。このコマンドの後に、logファイルのローテーション後に実行するコマンドを記述する。logファイルのローテーション後、apacheサーバにハングアップシグナル(HUP)を送り、再起動させるためのもの。これにより、apacheが新たなlogファイルにログを出力するようになる。postrotateの終端を示す。以上で、二つのサイトにアクセスが可能となるので、Apacheを再起動して相互にアクセス確認しましょう。