【AWS③】EC2インスタンスにWebサーバーをインストールしてアクセスできるようにする
どうもoreoです。
前回までの記事で、AWSでネットワークとサーバーを構築しました
第3回のこの記事では、Webサーバーのインストールとファイアウォール、DNSの設定を行います。自分へのメモ的な記事になりますが、普段インフラを触らない人の参考になれば幸いです!
1 前提知識
インバウンド
- 外部からインスタンスに接続する向き
アウトバウンド
- インスタンスから外部に接続する向き
ドメイン名
- IPアドレスのエイリアスであり、IPアドレスと同じく、Webサーバーなどの「住所」を表すもの。英数字などで構成されており、数字だけのIPアドレスと比べて、人間にとって扱いやすい。
DNS(DomainNameSystem)
- ドメイン名とIPアドレスを変換する仕組み。実際に変換するのはDNSサーバー(DNSリゾルバ)。
- TCP/IPでは、Webサーバーなどの住所を特定するのはあくまでIPアドレスなので、ドメイン名でアクセスした場合、DNSサーバーがIPアドレスに変換してからアクセスされる。
2 Webサーバーをインストールする
2-1 概要
前回作成したサーバーをWebサーバーとして機能させるために、「Webサーバーソフト」をインストールします。Webサーバーを構築すると、Webブラウザなどからのリクエストを受け取り、サーバー上のコンテンツを返したり、サーバー上でWebアプリケーションを実行したりできます。
今回は、「Webサーバーソフト」としてApacheをインストールします。ファイアウォールでのApacheへのアクセスの許可やDNS名の設定なども合わせて行います!
2-2 Apacheのインストール
まず、sshでサーバーにログインします。詳しい手順は前回の記事をご参照。
Apacheの実行ファイルであるhttpdをインストールします。
sudo yum -y install httpd
下記コマンドでApacheを起動できます。
sudo systemctl start httpd.service
この状態だとサーバーを再起動させると、Apacheは停止してしまします。下記コマンドでサーバーが起動した時にApacheが自動起動するように設定します。
sudo systemctl enable httpd.service
下記コマンドを実行し、httpd.service
がenabled
になっていれば、自動起動の設定完了です。
sudo systemctl list-unit-files -t service
続いて、下記コマンドでApacheのプロセスを確認してみます。
ps -ax | grep httpd
ps
コマンドで実行中のプロセスが確認でき、-ax
オプションでサーバー上で動作している全てのプロセスを表示できます。このコマンドにパイプでgrep httpd
をつなげると、Apacheの実行ファイル(httpd)を含むプロセスだけ確認できます。
実行結果として、以下画像のような行が表示されていれば、Apacheが起動していることを確認できます。
Apache(httpd)の待受状態を確認します。以下コマンドを実行すると、ApacheがHTTPのウェルノウンポートである80番ポートで待ち受けていることがわかります。
sudo lsof -i -n -P
ここでインスタンスのパブリックIPアドレスにブラウザからアクセスして、Apacheに接続しようとするとエラーとなります。
これは、80番ポートがファイアウォールによってブロックされているからです。
3 ファイアウォールの設定を変更し、ブラウザからApacheにアクセスする
AWSマネジメントコンソールで、ファイアウォールの設定を変更します。
インスタンスの画面から「セキュリティ」を選択すると現在の設定が確認できます。「インバウンドルール」をみるとSSHのウェルノウンポートである22番ポートには、全ての通信(0.0.0.0/0)が許可さレていますが、80番ポートには何も設定されていません。
80番ポートを通すために「セキュリティグループ」を選択します。
「インバウンドルールを編集」を選択します。
「カスタムTCPルール」を選択し、ポート範囲を80、ソースを0.0.0.0/0として、「ルールを保存」します。これで80番ポートを通りました!
WebブラウザからインスタンスのパブリックIPアドレスにアクセスすると、Apacheにアクセスできます。
4 DNSサーバーを構築する
4-1 DNSサーバーの構築
Amazon VPCでは、ネットワーク内で名前解決をする機能がある為、それを有効にします。
VPCの設定画面から、「アクション」>「DNSホスト名を編集する」を選択します。
「DNSホスト名」で有効化にチェック入れて保存すると、VPC内に起動したインスタンスにDNS名が名が割り当てられます。
インスタンスの詳細画面の「パブリックIPv4 DNS」でDNS名が確認できます。
DNS名で、webブラウザにアクセルするとパブリックIPアドレスと同様にApacheにアクセスできます。
nslookup
での名前解決の確認
4-2 DNSの名前解決は、お手元のターミナルからnslookup
で確認できます。
nslookup [DNS名]
で、DNS名からIPアドレスを確認できます。これを「正引き」と言います。この場合は、IPアドレスが12.231.24.225と確認できます。
尚、DNSサーバーに複数のIPアドレスが設定されている場合に正引きをすると、それらipアドレスのいずれかが返されます。このように複数のipアドレスを設定しアクセスの分散をすることででサーバーへの負荷分散ができます。
nsloogup [ipアドレス]
で、ipアドレスからDNS名の確認できます。これを「逆引き」と言います
この場合は、DNS名はec2-13-231-24-225.ap-northeast-1.compute.amazonaws.com.と確認できます。
尚、DNSサーバーに複数のipアドレスが設定されている場合、いずれのipアドレスを使って逆引きをしても返されるDNS名は1つになります。
5 最後に
ファイアーフォールなど自分で設定することで、ポートなどの理解が定着しますね。次回は、HTTPの動きを深掘りしたいと思います!
Discussion