web-dev-qa-db-ja.com

1つのIPアドレスと多くのWebサイトをどのように持っていますか?

インターネット上に1つのIPアドレスがあり、多くのWeb名がある場合、どうすればよいですか?たとえば、ホスティング会社が共有IPを持っているが、無制限のドメイン名を(そのボックスの他のすべてのユーザーと共に)取得した場合です。

私はインターネット上のボックスを持っていますが、誰かが別のwwwを入力したときに別のWebサイトを保持する別のマシンをポイントしたいと思います...それはすべてサブドメインですか?ありがとうございました。

私はホスティング会社です

27
johnny

これは、HTTP 1.1プロトコルの一部です。

具体的には、HTTP 1.1プロトコルには、「Host:」と呼ばれるヘッダーが含まれています。これは、クライアントがアクセスしようとしている特定のサーバー上のWebサイトを指定します。

したがって、snoopy.netとwoodstock.orgの両方が192.0.32.10を共有していて、ブラウザがhttp://snoopy.net/doghouseからコンテンツを取得しようとしている場合、特定のhttpリクエストは次のようになります。

GET /doghouse HTTP/1.1
Host: snoopy.net

目的のURLがhttp://woodstock.org/seedsの場合、リクエストは次のようになります。

GET /seeds HTTP/1.1
Host: woodstock.org

どちらの場合も、コンピューターとサーバーのポート80の間にTCPソケットがあります。サーバーは、Hostヘッダーに基づいて、/ var/www/snoopy.netまたは/var/www/woodstock.org/からコンテンツを取得することを認識します。

Cookieや、ブラウザの種類や許可されたコンテンツなどの他のヘッダーには他のヘッダーがありますが、「ホスト」ヘッダーは特に、Webサーバーがどの仮想Webサイトが必要かを認識できるようにするものです。

RFC2616 にはさらに多くの機能があります。

これは、httpsサイトが独自のIPアドレスを持っている必要がある理由でもあります。SSL鍵の交換と証明書の検証は、httpトランザクションの前に行われるため、httpサーバーは「woodstock」の証明書を提供することを認識しません。 192.0.32.10のポート443でhttps接続を受信すると、org "または" snoopy.net "。


編集する

**コメント内 Grawity は、ユーザーがアクセスしようとしているWebサイトをサーバーが認識できるようにするTLS仕様のSSLの拡張機能があり、ほとんどの最新のWebブラウザーにこれらの拡張機能があることを示していますなので、mustは少し強すぎます。

36
chris

最近のすべてのブラウザは、「Host:」ヘッダーと呼ばれる、リクエストとともに送信するものがあります。

このページに対してFirefoxが送信する実際のリクエストは次のとおりです。

ホスト:superuser.com 
ユーザーエージェント:Mozilla/5.0(Windows; U; Windows NT 6.0; en-US; rv:1.9.1.7)Gecko/20091221 Firefox/3.5.7(.NET CLR 3.5。 30729)
承諾:text/html、application/xhtml + xml、application/xml; q = 0.9、*/*; q = 0.8 
承諾言語:en-us、en; q = 0.5 
 Accept-Encoding:gzip、deflate 
 Accept-Charset:ISO-8859-1、utf-8; q = 0.7、*; q = 0.7 
 Keep-Alive :300 
接続:キープアライブ

ご覧のとおり、

ホスト:superuser.com


特定の問題については、特定のホスティング会社が構成を要求する方法を確認する必要があります。

12
John Gietzen

単一のIPアドレス/ホストで複数のドメイン/サブドメインをホストする手法は、 仮想ホスト と呼ばれます。 http getリクエストには、リクエストの対象となるドメイン名が含まれています。これにより、Webサーバーはリクエストを特定の仮想ドメインと照合できます。

内部に複数の物理ホストがあり、外部IPが1つしかない場合は、 リバースプロキシ の設定を調べて、リクエストを正しいマシン/内部IPアドレスに転送する必要があります。

6
3dinfluence

ウェブサーバーの機能は通常「仮想ホスト」と呼ばれます。 (他の回答で述べたように)dnsエントリがその1つのIPアドレスを指すように指定すると、サーバーは要求されたホストが何であるかに応じて、さまざまなサイトを処理します。

別のボックスを指す限りです。最初にクエリを取得する場合は、ほとんどのWebサーバーでリダイレクトを設定できます。サブドメインについて話している場合は、サブドメインのそれぞれに異なるIPアドレスを指定するだけです。

つまり、Host.com-> IP 1、次にwww.Host.com-> IP 2およびmail.Host.com-> IP 3

より具体的な回答が必要な場合は、実行しているオペレーティングシステム上のWebサーバーソフトウェアを指定する必要があります。

この質問にはServeFaultの方が適しているかもしれません。

3
Colin Newell

要するに...

1つ-さまざまなドメインのDNSエントリをすべてボックスにポイントするように設定します。

2-他の人が説明しているように、要求されたホスト名に一致するようにWebサーバーを設定します(どちらかは言いません)。

これにより、すべてのドメインに対するすべての要求が同じマシンに送られ、その構成により、要求されたドメインが取得され、そのサイトのコンテンツを含む適切なフォルダーにルーティングされます。

1
Garry

私があなたの質問を正しく読んでいる場合、2つの異なるコンピューターがNAT(ネットワークアドレス変換)を介してIPアドレスを共有していますか?その場合、1つのサイトが異なるポートでリッスンする必要があります。 (80ではない)-HTTP "ホスト"メタデータに基づいてルーターが別のコンピューターにリクエストを送信するようにするための適切な方法はありません。2台目のサーバーの2つ目のIPアドレスを取得するほうがよいでしょう。

0
CarlF

2つ目のウェブサイト用に別の物理サーバーがあるようにあなたの質問から聞こえます。その場合、2つのサーバーに単一のIPアドレスを使用することはできません。 a)2番目のホストの2番目のパブリックIPアドレスを取得するか、b)ホストヘッダーに基づいて要求を内部ネットワーク上のさまざまなサーバーに転送するスマートプロキシを設定できます。私はb)が可能であると確信していますが、それがどのように機能するのか私にはまったくわかりません。

0