複数のWebサイトが同じIPアドレスを共有しているという考えにいつも戸惑っていました。つまり、IPアドレスを持つWebサーバーがそこにある場合です。 80などの適切なポートでこのIPアドレスを入力するだけで、宛先ゲートウェイはこの着信要求を転送するサーバーを認識します。この場合、ポート80はWebサーバーであり、Webサイトはクライアントに提供されます。
ただし、2つのWebサイトをWebサーバーと1つのIPアドレスでホストする方法を理解できません。 abc.comおよびxyz.comという名前の2つのWebサイトが、1つのIPアドレスを持つ同じWebサーバーでホストされているとします。私が使用しているISPなどのDNSサーバーは、IPアドレスで名前を解決し、Webブラウザーを正しいWebサーバーに向けることができますが、混乱はWebサーバーがどのWebサイトを提供するかを知ることですか?
同じWebサーバー上の異なるWebサイトを区別する唯一の方法は、それぞれのポート番号だといつも思っていました。つまり、着信要求がポート80にある場合、それはabc.comであり、ポート81にある場合はxyz.comです。明らかに、ウェブブラウザにxyz.com:81を入れていないので、デフォルトでポート80を使用します。次に、abc.comではなく、実際のxyz.com Webサイトを取得するのはなぜですか?
Webサーバーソフトウェアは、HTTPリクエスト内のホスト名を確認し、それを使用してどのWebサイトを提供するかを決定します。たとえば、Apacheには、この動作を制御するNameVirtualHost
構成オプションがあります。このプロセスがどのように機能するかの詳細な説明は、そのドキュメントで見つけることができます: https://httpd.Apache.org/docs/2.2/vhosts/name-based.html
Host: example.com
ヘッダーです。この時点で、サーバーはこのリクエストが意図する正しいWebサイトを認識し、対応するホスト設定に従ってリクエストを実行します... nginxのサーバーブロック、またはApacheの仮想ホスト定義。実際のメカニズムについて詳しくは説明しませんが、基本的にabc.comおよびxyz.comドメインを両方のドメインが共有する1つのIPアドレスに解決するDNSサーバーは、この共有IPアドレスをWebブラウザーに返します。次に、WebブラウザーはこのIPアドレスにHTTPリクエストを送信し、最終的にこれら2つの(そしておそらくもっと多くの)WebサイトをホストするWebサーバーに到達します。さらに、これはHTTP要求であるため、この要求がWebサーバーに到達するときのIPアドレス以外の追加情報、つまり実際の名前がabc.comまたはxyz.comのヘッダーパケット、またはこの単一のWebサーバーがホストする他のドメインがあります。このHTTPヘッダーパケットを使用して、WebサーバーはどのWebサイトを提供するかを正確に認識します。 HTTPは、IPアドレスに加えていくつかのASCIIテキスト情報を含むデータパケットをカプセル化します。