Amazon EC2はいわゆる仮想サーバでOSやスペックを選んで数分後には使える名のとおりElasticなコンピューティング環境です。
OSでLinuxを選び起動後にApacheを導入すればウェブサーバのできあがりです。
お手軽に立てられるのですが、今回は複数のサイトを展開するところでちょっとハマったところをご紹介します。
こちらの投稿はAWS Advent Calendar 2013に参加しております。
今回の環境
お好みのスペックでOSはAmazon Linuxとして起動します。
ウェブサーバとしてApacheを使います。yum等で導入します。
今回はIPアドレスベースのvirtual hostで複数のサイトを展開しようと考えており、SSL(HTTPS)のアクセスも考慮して、グローバルIPアドレス(EIP)を複数割当てます。
(グローバルIPアドレスが1つでもHTTPSなサイトを複数立てられる方法はありますが、古いブラウザや設定しやすさを考えてこちらの方法を採ります)
EC2インスタンスを立てたときに元からあったENI(仮想NIC)にEIPを割当てます。複数のグローバルIPアドレスを割当てる方法はいくつかありますが、今回はENIをEC2インスタンスに追加して、この追加したENIにEIPを割当てることにします。(下図)
(オチがもう見えたでしょうか)
Apacheの設定
virtual hostの設定をしていきます。
$ sudo vi /etc/httpd/conf.d/ssl_foo.com.conf#
SSL Virtual Host Context
#
VirtualHost (IPアドレス):443
General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html" ServerName foo.com:443
Use separate log files for the SSL virtual host; note that LogLevel
is not inherited from httpd.conf.
ErrorLog logs/ssl_foo.com_error_log TransferLog logs/ssl_foo.com_access_log LogLevel warn::
ここで、上記の(IPアドレス)には、グローバルIPアドレス(EIPのアドレス)を入れたくなりますが、入れてもうまくいきません。
ローカルIPアドレスを指定するのが正しいです。
ここがハマりました。
ifconfigコマンド等で確認すれば分かりますが、グローバルIPアドレスは充てられていません。
ifconfigコマンド等でサーバのネットワーク設定をいじることはできなくはないですが、AWSの作法として非推奨です。
最後に
オンプレで慣れているとハマりますのでご注意ください。というネタでした。
「あるある」とご共感いただければ幸いです。