2012-03-14 3 views
0

Как веб-сервер распознает, какой URL-адрес будет отображаться, если существует несколько веб-сайтов (имен хостов), связанных с одним и тем же IP-адресом?Веб-сайты, связанные с одним и тем же IP-адресом

+0

[NAT] (http://en.wikipedia.org/wiki/Network_address_translation) - это, вероятно, то, что вы ищете. – Bhaskar

ответ

1

Использование виртуальных хостов.

Это пример конфигурации от 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; 
    } 
} 

По существу, когда пользователь запрашивает ресурс сервер проверяет host field запроса и реагирует соответствующим образом.

+1

Было бы более точным сказать, что сервер читает поле Host в заголовке HTTP, а не URL? – Neal

+0

Я думаю, что это, вероятно, правильно. – djlumley

1

С веб-сервером Apache определен набор виртуальных хостов, которые содержат параметры для соответствия запросу каталогу. Использование основной, стандартный набор для веб-сервера Ubuntu, вы бы файл в/и т.д./каталога apache2/сайты с поддержкой, как это:

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

Это говорит апач, что все запросы на example.com, что Прибытие на эту машину должно быть направлено в папку /var/www/example.com/httpdocs. Другая запись в example.org может указывать на другую папку.

Также актуальным является файл/etc/hosts и команда apache a2ensite.

0

В зависимости от типа сервера. Apache использует файл .htaccess, и вы также можете настроить виртуальные хосты. Если вы пытаетесь сделать что-то конкретное, вы можете отредактировать свой вопрос, чтобы включить именно то, что вы ищете, и какое программное обеспечение вы используете для размещения.

1

Это делается в апача с помощью NameVirtualHost

Вы сначала объявить, что IP и порт в httpd.conf использовать как:

NameVirtualHost 127.0.0.1:80 

Затем в блоке виртуального хоста, вы делаете:

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

Это позволит вам иметь несколько хостов на одном IP-адресе. Но будьте осторожны, если вы напрямую обратитесь к IP-адресу, он направит запрос на первый виртуальный хост.

1

HTTP 1.1 определяет заголовок, называемый заголовком «Host».

Перед тем как Apache или любой другой сервер увидит запрос, клиентский браузер создает заголовки запросов HTTP 1.1 и отправляет запрос на сервер, с которым вы просите связаться с вашим браузером.

Как только запрос попадает на apache, сервер просматривает часть заголовка узла заголовков HTTP-запроса. Вы можете наблюдать это, используя wirehark, liveHttpHeaders, HTTPfox или любой другой инструмент, который вам нравится. Заголовок узла в HTTP 1.1 (Хост: заголовок не определен для HTTP 1.0 или 0.9) имеет следующий формат:

хост: www.example.com \ г \ п

Когда апаш смотрит на этом заголовке так ли анализирует его и проходит через существующую таблицу VirtualHosts, которая используется для сопоставления соответствующих заголовков хостов с указанными каталогами или действиями.

То есть, если у вас есть имяVirtualHost для www.example.com, которое указывает на/some/path/example.ком/

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

ваш апач будет иметь следующий запрос:

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 

прочитать вики-страницу для получения дополнительной информации формата заголовка.

Apache увидит, что заголовок узла содержит www.example.com и обслуживает файл /some/path/example.com/index.html, поскольку этот каталог и имя файла соответствуют запрашиваемому ресурсу, и это каталог, который должен использоваться для обслуживания запросов с заголовком хоста, содержащим www.example.com.

Вот как это работает.

Смежные вопросы