Веб-сайты, связанные с тем же IP-адресом - PullRequest
0 голосов
/ 14 марта 2012

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

Ответы [ 5 ]

1 голос
/ 23 марта 2012

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

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

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

Хост: www.example.com \ r \ n

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

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

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.

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

1 голос
/ 14 марта 2012

Это делается в apache с помощью 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 голос
/ 14 марта 2012

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

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

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

Также имеет значение файл / etc / hosts и команда apache a2ensite.

1 голос
/ 14 марта 2012

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

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

По сути, когда пользователь запрашивает ресурс, сервер проверяет поле хоста запроса и отвечает соответственно.

0 голосов
/ 14 марта 2012

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

...