2012-03-14 6 views
0

同じIPアドレスに複数のWebサイト(ホスト名)が関連付けられている場合、WebサーバはどのURLをどのように認識するのですか?同じIPアドレスに関連付けられたWebサイト

+0

[NAT](http://en.wikipedia.org/wiki/Network_address_translation)はおそらくあなたが探しているものです。 – Bhaskar

答えて

1

仮想ホストを使用します。

これにより、ユーザは、サーバが要求のhost fieldをチェックし、それに応じて応答するリソースを要求nginx本質

http { 
    index index.html; 

    server { 
    server_name www.domain1.com; 
    access_log logs/domain1.access.log main; 

    root /var/www/domain1.com/htdocs; 
    } 

    server { 
    server_name www.domain2.com; 
    access_log logs/domain2.access.log main; 

    root /var/www/domain2.com/htdocs; 
    } 
} 

、から構成例です。

+1

サーバーがURLではなくHTTPヘッダーのHostフィールドを読み取ると言う方が正確でしょうか? – Neal

+0

これはおそらく正しいと思います。 – djlumley

1

Apache Webサーバーでは、要求をディレクトリに照合するパラメータを含む一連の仮想ホストが定義されています。 UbuntuのWebサーバーの設定の基本的な、デフォルトを使用して、あなたはこのように/ etc/apache2の/サイト対応のディレクトリ内のファイルを持っているでしょう:

<VirtualHost> 
    ServerName example.com 
    DocumentRoot /var/www/example.com/httpdocs 
</VirtualHost> 

これは、Apacheを伝えることexample.comへのすべての要求ことこのマシンに到着するときは/var/www/example.com/httpdocsフォルダーにルーティングする必要があります。 example.orgへの別のエントリは、別のフォルダを指すことができます。

関連するのは、/ etc/hostsファイルとapache a2ensiteコマンドです。

0

サーバーの種類によって異なります。 Apacheは.htaccessファイルを使用し、仮想ホストも設定できます。具体的なことをしようとしている場合は、探しているものとホストしているソフトウェアを正確に含めるように質問を編集することができます。これは、あなたが最初にIPとhttpd.confのポートは次のように使用するかを宣言しNameVirtualHostで

を使用してApacheの中で行われている

1

:あなたのバーチャルホストブロックに続いて

NameVirtualHost 127.0.0.1:80 

、あなたが実行します。

<VirtualHost 127.0.0.1:80> 
    ServerName your_domain 
    DocumentRoot path_to_your_app 
    .... 
</VirtualHost> 

これにより、1つのIP上に複数のホストを持つことができます。ただし、IPに直接アクセスすると、最初の仮想ホストに要求が送信されることに注意してください。

1

HTTP 1.1は「ホスト」ヘッダーと呼ばれるヘッダーを定義します。

Apacheまたは他のどのサーバーにも要求が表示される前に、クライアントブラウザはhttp 1.1要求ヘッダーを作成し、ブラウザに連絡するよう要求しているサーバーに要求を送信します。

リクエストがApacheにヒットすると、サーバーはHTTPリクエストヘッダーのHostヘッダー部分を調べます。あなたは、wireshark、liveHttpHeaders、HTTPfoxまたはあなたが好きなhttp解剖/パケットキャプチャツールを使ってこれを観察することができます。 HTTP 1.1のホストヘッダーは次のように(ホストヘッダがHTTP 1.0または0.9のために定義されていない)フォーマットされた:

ホスト:www.example.com \のR \ nは

Apacheは、このヘッダでそれを探しそれを解析し、一致するホストヘッダーを定義されたディレクトリーまたはアクションにマップするために使用される既存のVirtualHosts表を通過します。

つまり、/ some/path/exampleを指すwww.example.comのNameVirtualHostがある場合は、COM/

NameVirtualhost stuff here 
<VirtualHost 127.0.0.1:80> 
ServerName www.example.com 
DocumentRoot /some/path/example.com 
.... 
</VirtualHost> 

あなたのApacheは次のリクエスト取る:

GET /index.html HTTP/1.1\r\n <-- version is a key part 
Connection: close\r\n 
Host: www.example.com\r\n <-- key part 
Accept: blah\r\n 
Another: blah\r\n 

をヘッダー形式の詳細についてはWikiページをお読みください。

Apacheはホストヘッダーにwww.example.comが含まれていて、 /some/path/example.com/index.htmlファイルを提供します。そのディレクトリとファイル名は要求されたリソースと一致し、 www.example.comを含むホストヘッダーでリクエストを処理するために使用されます。

これはどのように動作するのですか。

関連する問題