web-dev-qa-db-ja.com

対応するドメイン名の代わりにIPアドレスを入力してもWebサイトが表示されないのはなぜですか?

> Host example.com
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946

私はタイプする 93.184.216.34 の代わりに http://example.com Chrome。ウェブサイトは読み込まれません。どうして?

38
PerrierCitror

目的のサイトを実際に取得するには、適切なHTTP Hostヘッダーが必要になることがよくあるからです。

同じIPアドレスで複数のWebサイトをホストし、クライアントによって指定されたHTTP Hostヘッダー(および最近のHTTPSの場合はTLS SNI値)に基づいてそれらを区別することは非常に一般的です。

つまり、ブラウザにhttp://example.comを入力したときのHostヘッダーはexample.comでしたが、93.184.216.34を入力したときはそうではありません。どちらの場合も同じWebサーバーに到達しますが、異なる応答を受け取ります(この特定のケースでは200と404)。

107

通常、ウェブサーバーは「仮想サーバー」テクノロジーを使用しており、ウェブサーバーのIPアドレスではなく、リクエストしたドメイン名内でHTTPリクエストに応答できます。 1つのIPアドレスで複数のドメイン名を非表示にしたおかげで。

たとえば、 Apache Webサーバーは、次のセクションを使用して、IPアドレスでHTTPリクエストに応答できます。

<VirtualHost *:80>
ServerName Default
...
</VirtualHost>

または、仮想ホストが構成でまったく使用されていない場合。

ApacheのVirtualHost機能は1996年に導入されました。

Apache では、1つのIPアドレスだけを使用して多くのWebサイトをホストできます。これは仮想ホスティングと呼ばれます。これは、スタンドアロンドメインであっても、サブドメインを作成する方法です。これは、各ドメイン/サブドメインのVirtualHostディレクティブを含むApache構成ファイルを設定することによって行われます。

2つの仮想ホストexample1.comとexample2.comを持つHTTPサーバーの例は、次のようになります(IPアドレス定義)。

<VirtualHost 93.184.216.34:80>
  ServerName example1.com
  ServerAlias www.example1.com
  DocumentRoot /var/www/example1.com
</VirtualHost>

<VirtualHost 93.184.216.34:80>
  ServerName example2.com
  ServerAlias www.example2.com
  DocumentRoot /var/www/example2.com
</VirtualHost>

また、次のようになります(名前ベースの定義)。

<VirtualHost *:80>
  ServerName example1.com
  ServerAlias www.example1.com
  DocumentRoot /var/www/example1.com
</VirtualHost>

<VirtualHost *:80>
  ServerName example2.com
  ServerAlias www.example2.com
  DocumentRoot /var/www/example2.com
</VirtualHost>

どちらの場合も、メモリ内に2つの仮想ホストレコードが内部的に作成され、Apacheがこれを使用して、URIリクエストが到着したときと比較します。

ユーザーがユーザーエージェントを介してIPアドレスを入力すると、構成ファイルにリストされている最初の仮想ホストがプライマリドメインとして使用されます(この場合はexample1.com)。

ユーザーがドメイン名を入力すると、関連付けられたIPアドレスを提供するパブリックインターネットDNSネットワーク(ICANN)に要求が送信されます。 ICANNレジストラ(GoDaddyなど)を介して両方を登録しました。 ICANNネットワーク上のすべてのDNSサーバーへの伝達が保留されるまで、これらの両方が正しく、ある程度の時間が必要です。最近では最大24時間かかることがあります。

リクエストがApache HTTPサーバーにルーティングされると、IPアドレスとドメイン名が内部VirtualHostレコードのリストと照合されます。見つかった場合、ドキュメントルートを使用して、オブジェクトリソースへの完全なファイルシステムパスを形成し、ユーザーエージェントに戻ります。そうでない場合は、HTTP 404が、それに関連付けられているエラードキュメントとともに送信されます。

10
Kerry Kobashi

「家」という用語を使いたい。

名前のない家に手紙を送るのはとても簡単で、家に届きます。

その人の名前をその上に置くと、意図した受信者に送信していることになります。

行き先は同じですが、家に着いたときの扱い方が違います。

サイト(www.example.comなど)を指定すると、サーバーはリクエストの処理方法、リクエストの対象となるホスト、およびサービスを提供するサイトを認識します。

8
Chris Lomax

ここには技術的な詳細で多くの答えがありますが、最も簡単な概要説明は、WebサーバーがそのIPアドレスでhttpトラフィックを適切にリッスンしている場合でも、サーバーは通常でなければならないということです特定のドメイン名に対して応答するように構成されており、その名前がクライアント(つまり、Webブラウザー)によって送信された要求に含まれている必要があります。

ほとんどの場合この方法で行われるため、「通常」と言いますが、実際には、IPアドレスのみが使用されている場合に応答するようにhttpサーバーを設定できる方法があります。

0

検索する重要な用語は、「名前ベースの仮想ホスティング」です。

人々は、同じWebサーバーに複数のホスト名を割り当てて、ホスト名ごとに異なるコンテンツを提供したいと考えています。これは仮想ホスティングと呼ばれます(最近の仮想マシンの概念と混同しないでください)。

最初は仮想ホスティングが複数のIPアドレスをサーバーに割り当てることによって行われ、サーバーは使用されたIPアドレスに基づいて異なるコンテンツを送信できましたが、これは無駄であると見なされていました。

したがって、「ホスト」ヘッダーは最初は拡張機能として導入されましたが、その後1997年にhttp 1.1仕様の必須部分になりました。このヘッダーは、クライアントが要求したホスト名を指定します。その後、サーバーはヘッダーの値に基づいてさまざまなコンテンツを提供できます。

0
Peter Green

Webサーバーのコストを抑えるために、多くのWebサーバーが複数のWebサイトをホストしています。これは、Apache2/nginx/etc内の仮想ホストまたはVhostsを使用して行われます。したがって、WebサイトのIPアドレスに直接アクセスすると、「Apacheが機能しています」画面が表示されるか、WebサーバーのメインWebサイトにリダイレクトされる可能性があります。

Vhostは着信Webサイトアドレスを調べ、有効なVhostsファイル内のServerNameまたはServerAlias名と比較します。それらの1つが一致する場合、その特定のWebサイトがロードされます。

Webサイトの負荷が高い(ユニークユーザー数/ページビュー数が多い)か、負荷の高いアプリケーション(youtube.com、facebookなど)を駆動する場合を除いて、共有サーバーで運用する方がコスト効率が良いでしょう。 WordpressブログWebサイトを実行するためだけに専用サーバー(月額60ドルから)を取得することは、お金の無駄です。サーバーで共有プラットフォームを取得する方がよい1つのサーバーに200以上のWebサイトがあると思われます。コストは月額5ドル程度になります。

これを行うもう1つの理由は、IPアドレスの不足です。 IPv4アドレスが十分に残っていないだけです。 NATをホーム/ビジネスネットワークに使用し、Vhostsを使用することによってのみ残ります。IPv6がメインストリームになっても、サーバーはおそらくVhosts(serverコスト)。

0
Joseph Williams

専用IPアドレスは高価ですが、サーバー上に新しいWebサイトを作成することは基本的に無料です。

ホスティング会社が物理サーバーを指す単一のIPアドレスをレンタルし、「仮想ホスト」機能を使用してそのIPアドレスで数千のWebサイトをホストすることが起こります

P.O.のように考えるボックス、郵便局の住所を書き留めただけでボックス番号がない場合、メールは配信されません。

0
Magnetic_dud