#前提
AWS(Webサーバーソフトのインストール)について学んだことを書いていきます。
#本題
#Webサーバーソフトのインストール
サブネットのなかにサーバーを構築し、構築したサーバーにWebサーバーソフトをインストールすることでWebサーバーとしてインターネットに公開する。
##Apache HTTP Serverインストール
サーバーをWebサーバーとして機能させるには、Webサーバーソフトをインストールする。
すると、Webブラウザなどからの要求を受け取り、サーバー上のコンテンツを返したり、サーバー上でWebアプリケーションを実行したりできるようになる。
※Apacheはオープンソースで提供されている、世界で最も多く利用されているWebサーバーソフト。
###サーバーにApacheをインストール
1、インスタンスにログイン
インスタンスにSSHでログイン。
2、Apacheをインストール
下記コマンドを入力し、Apacheをインストール。
$ sudo yum -y install httpd
yumコマンドは、アプリケーションをダウンロードしインストールしたり、アンインストールしたりするときに用いる管理者コマンド。
ここで指定しているhttpdは、Apacheは構成する実行ファイル名。
つまり、このコマンドによって、Apacheがインストールされる。
なお、-yオプションはユーザーの確認なしにすぐにインストールする指定。
※sudoコマンドは、指定したコマンドを管理者権限(root権限)で実行するためのもの。
インスタンスには、ec2-userユーザーでログインする。
ec2-userユーザーは、管理者(rootユーザー)ではない。
そのため、管理者権限が必要な場合は、sudoコマンドをつけて実行する。
3、Apacheを起動する
以下のコマンドを入力してApacheを起動する。
$ sudo systemctl start httpd.service
systemctlコマンドは、指定したコマンド(ここではhttpdのためApache本体)を起動・停止・再起動するコマンド。
ここではstartを指定しているため、Apacheは起動する。
4、自動起動するように構成する
これでApacheは起動するが、サーバーを再起動するとまた停止する。
そこでサーバーが起動するときに、Apacheも自動的に起動するように構成する。
下記、コマンドを入力する。
$ sudo systemctl enable httpd.service
systemctlコマンドは、自動起動について設定(enable)、設定解除(disable)、設定の確認(list-unit-files)を指定するコマンド。
ここでは、httpdをenableに指定しているため、サーバーが起動したときにApacheが自動起動するように構成される。
※正しく構成されたかどうかは、下記コマンドを入力して確認できる。
$ sudo systemctl list-unit-files -t service
この結果において、httpd.serviceがenabledであれば自動起動が有効になっている。
###Apacheのプロセスを確認
Apacheをインストールし、その実行ファイルであるhttpdが起動したはず。
確認方法には、2種類ある。
1、Apacheはhttpdと言うファイルが実行コマンド。
もし実行中であるなら、このhttpdのプロセスがサーバー上に存在するはず。
Linuxシステムでは、psコマンドを使うと、実行中のプロセスを確認できる。
$ ps -ax
-axオプションは、-a(全てのプロセスを表示する)、-x(他の端末に結び付けられているプロセスも表示する)の組み合わせ。
-axオプションを指定して実行すると、サーバー上で動作している全てのプロセスが表示される。
httpdが存在するかを確認する。
※ps -ax |grep httpdと入力するとhttpdを含む行だけを出力することができる。
先頭に表示されている数字は、プロセス番号PIDと呼び、プロセスを区別するために自動的につけられる番号。
※プロセス番号は、プロセスを終了(killコマンドで終了できる)したり、プロセスに何か通知を送信したりするときに使われる。
2、ネットワークの待ち受け状態を確認する
エンドユーザーがWebブラウザを通じて、このサーバーにアクセスするとApache(httpd)はそれに対応するコンテンツを返す。
これを実現するため、httpdは、ポートを開けて待機する。
IPアドレスとポート番号で調査したのと同様にlsofコマンドを使って、ポートの状況を調べる。
$ sudo lsof -i -n -P
すると結果の中に、httpdが存在することがわかる。
TCP*:80と表示されていることから、Apacheはポート80番で待ち受けていることがわかる。
ポート80番は、Web通信で用いるHTTPのウェルノウンポート。
##ファイアウォールを設定する
Apacheをインストールし起動したため、このサーバーはWebサーバーとして機能している。
実際にWebブラウザを使ってアクセスしてみる。
###Webサーバーに接続する
WebブラウザからWebサーバーに接続するときには、接続先のパブリックIPアドレスを指定する。
現状だと、ブラウザにパブリックIPアドレスを入力しても接続できない状況です。
###ファイアウォールを構成する
接続できないのは、ポート80番がファイアウォールによってブロックされているから。
EC2において、ファイアウォール機能を構成するのは、セキュリティグループという機能。
ファイアウォール設定変更し、ブロックされているポートで通信できるようにする操作を、ポートを開けるやポートを開く、ポートを通すなどと表現する。
※アパッチのデフォルトの構成では、/var/www/htmlディレクトリの内容がWebブラウザに出力される。
ただし、このディレクトリが空の場合は、/var/www/error/noindex.htmlが出力される。
##ドメイン名と名前解決
このようにWebブラウザにパブリックIPアドレスを入力することで、Webサイトにアクセスできる。
しかし、一般にWebサイトにアクセスするときに直接パブリックIPアドレスを指定することは、ほとんどない。
なぜなら、単なる数字であるIPアドレスは覚えにくいから。
ほとんどの場合、www.example.co.jpなどのドメイン名を用いてアクセスするはず。
では、ドメイン名を利用するには、どのようにすればいいか。
###ドメイン名の構造
ドメイン名は、IPアドレスと同様に、Webサーバーやメールサーバーなどのインターネット上の住所に相当するもの。
英数字で構成された名称でIPアドレスのような数字に比べて、簡単に覚えられる。
ドメイン名はIPアドレスと同様にサーバーなどを指し示すものため、一意性が保証される必要がある。
・ドメインの階層
ドメイン名は、ピリオドで区切られた構成をしている。
ピリオドで区切られた部分をラベルと言う。
最も右側のラベルをドップレベルドメインと呼び、左に向かって第2レベルドメイン、第3レベルドメインと呼ぶ。
www 第4レベルドメイン
example 第3レベルドメイン
co 第2レベルドメイン
jp トップレベルドメイン
ドメインの階層をツリーで表現すると、
一番上のルート(root)と呼ばれる部分を頂点とし、下の階層へと広がる。
ルートの直下にはjp、com、netなどのトップレベルドメインが配置される。
そのさらに下に、第2レベルドメイン、第3レベルドメインと続く。
あるドメインの下に、ドメインを新設する場合は、必ず、異なるラベルをつける。
そうすることで、ドメイン名空間を構成する全てのドメイン名は、一意性が保証される。
・ドメインの管理
ドメイン名は、IPアドレスと同様にICANNが統括管理しており、トップレベルのドメイン名ごとに、それぞれの業者が管理している。
例えば、トップレベルが「com」、「net」のドメイン名はVerisignが、「jp」のドメイン名は、JPRSが管理している。
これらの管理組織のことをレジストリと言う。
企業や個人などがドメイン名を利用するときには、これらのレジストリ配下の指定事業者に申請する。
すると、ドメイン名を利用できるようになる。
###DNSによる名前解決
TCP/IPの世界では、相手先を確認するのは、あくまでもIPアドレス。
ドメイン名でアクセスするときも最終的にIPアドレスに変換して接続する。
そのときに使われる仕組みがDNS(Domain Name System)。
DNSを用いて、あるドメイン名からそれに対応するIPアドレスを引き出すことを名前解決と呼ぶ。
IPアドレスとドメイン名を変換するのは、DNSサーバー。
DNSのシステムは、世界中に分散したDNSサーバー群で構成された、大きな分散型データベース。
それぞれのDNSサーバーは、自分が担当する範囲のIPアドレスとドメイン名の変換だけをする。
管轄外の名前解決が必要になったときは、他のDNSサーバーへと問い合わせを転送する。
DNSサーバーは、このようなドメイン名の名前解決をするため、DNSリゾルバ(resolver:解決の意味)と呼ばれることもある。
名前解決は、ルートDNSサーバーから始まり、トップレベルドメインのDNSサーバー、第2レベルのDNSサーバー、第3レベルのDNSサーバーというように、階層的に処理される。
このように階層的に処理することで、どのようなドメイン名であっても、最終的に変換先のIPアドレスがわかる。
ドメイン名は、DNSサーバーが解決することから、DNS名と呼ばれることもある。
また、サーバーやネットワーク機器など、通信可能なホストに名付けるために使われることから、ホスト名やDNSホスト名と呼ばれることもある。
###DNSサーバーを構成する
VPCには、VPN内の名前解決をするオプション機能があり、その機能を有効にするとインスタンスにDNS名が設定されるようになる。
DNS名には、パブリックDNSとプライベートDNSの2つがある。
前者は、インターネットから参照できるDNS名、後者はVPC内でしか参照できないDNS名。
※パブリックIPアドレスを割り当てていないときはパブリックDNSは空欄となり、プライベートDNSしか設定されない。
■Route53サービスを用いて独自ドメイン名で運用する
独自ドメイン名を利用するには、まずレジストラと呼ばれるドメイン事業者から、利用したいドメイン名を取得する。
ドメイン名を取得したら、DNSサーバーを構成し、EC2インスタンスに向けるように構成する。
AWSでは、DNSサーバーを構成するためのRoute53というサービスが提供されている。
Route53サービスに、取得したドメイン名を設定すると、独自ドメイン名を利用できるようになる。
なお、Route53を利用してドメイン名を取得することもできるようになっている。
###nslookupコマンドでDNSサーバーの動きを見る
いくつかのコマンドを使うと、DNSサーバーがどのように名前解決しているのかを知ることができる。
DNSの名前解決を調査する際に、最もよく使われているコマンドがnslookup。
nslookupコマンドは、WindowsやMac、そして多くのLinuxディストリビューションに標準でインストールされている。
※nslookupコマンドは昔ながらのコマンド。
最新のUNIX系の環境では、もっと詳細にDNSサーバーとのやりとりを確認できるdigコマンドを使うこともある。
・クライアントからnslookupする
まずは、WindowsやMacの環境で、どのように名前解決されているか確認。
プロバイダーを通じてインターネットに接続しているのであれば、Webブラウザを使ってアクセスするときにプロバイダーが提供しているDNSサーバーが名前解決している。