🚁

【AWS③】EC2インスタンスにWebサーバーをインストールしてアクセスできるようにする

2022/08/29に公開

どうもoreoです。

前回までの記事で、AWSでネットワークとサーバーを構築しました

https://zenn.dev/oreo2990/articles/bf3112bb6ccb48

https://zenn.dev/oreo2990/articles/8a55bad283880d

第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.serviceenabledになっていれば、自動起動の設定完了です。

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にアクセスできます。

4-2 nslookupでの名前解決の確認

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の動きを深掘りしたいと思います!

6 参考

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版

Discussion