※この記事は公開されてから1年半以上経過しています。情報が古い可能性がありますのでご注意ください。
こんにちは、梶川です。
今回はIDCフロンティア セルフクラウドで、Apacheのバーチャルホストのお話です。
IDCフロンティア セルフクラウドは、内部のプライベートIP(仮想マシンへ振られるIP)がDHCPで管理されており、自由にIPアドレスを仮想マシンへ振ることができません。
バーチャルホスト、IPアドレスとくれば、鋭い方はもうお分かりになったかもしれませんが、IPを自由に振れない=IPベースのバーチャルホストはできない、ということになります。今時、IPベースのバーチャルホストを使いたい理由は、おそらくHTTPSを複数ホストしたい場合でしょう。名前ベースのバーチャルホストは、ご存知のようにHTTPSのバーチャルホストでは使えません。
それでは、IDCフロンティア セルフクラウドではHTTPSのバーチャルホストはできないのでしょうか?ブログに書くぐらいなので、もちろんできます。その方法を説明しましょう。(もちろんクラウドなので、ジャブジャブと仮想マシンを作って、1仮想マシン=1HTTPSホストで作ってもらっても構わないんですけどね。;-))
クラウド側の設定
IDCフロンティア セルフクラウドではネットワークの上位に「仮想ルーター」があり、ポートフォワードの機能が提供されています。今回はこれを使って実現します。具体的には、バーチャルホスト用のパブリックIPアドレスを複数取得し、それぞれのパブリックポート80(または443)をバーチャルホストを設定する仮想マシンの、別々のプライベートポート(8081と8082など)へポートフォワードするように設定します。
ここでは2つのバーチャルホストを設定するために、2つのパブリックIPを取得し、図にあるポートフォワードを設定していきましょう。設定方法は利用ガイドのポートフォワードを参照してください。
登録するルールは、次の通りです。
合わせてそれぞれのIPでファイアウォールを設定する必要があります。パブリックIPに対してのファイアウォール設定のため、ポートフォワード前のTCP-80(又は443)を開ける必要があります。設定方法は利用ガイドのファイアウォールの設定を参照してください。
クラウド側の設定は、これで準備完了です。
Apacheの設定
Apache側では、名前ベースのバーチャルホストではなく、IPベースのバーチャルホストをポートを指定した形で設定していきます。具体的には次のような形で設定します。
Listen 8081 <VirtualHost *:8081> ServerName www1.example.jp DocumentRoot /var/www/html/www1.example.jp ErrorLog logs/www1.example.jp-error_log CustomLog logs/www1.example.jp-access_log combined </VirtualHost> Listen 8082 <VirtualHost *:8082> ServerName www2.example.jp DocumentRoot /var/www/html/www2.example.jp ErrorLog logs/www2.example.jp-error_log CustomLog logs/www2.example.jp-access_log combined </VirtualHost>
この設定はIPベースのバーチャルホストですが、IPはDHCPで振られたIPアドレス一つだけです。ただし<VirtualHost>タグでポートを指定した形(*:8081,*:8082)でバーチャルホストを設定しています。また、指定したポートでApacheがListenするように8081,8082を指定しています。つまり、IPはひとつですがポートを分けることで、バーチャルホストを特定しています。例ではHTTPS(SSL)を設定していませんが、各バーチャルホストでHTTPS(SSL)の設定をすれば、HTTPSを複数ホストすることも可能です。