Как веб-сервер распознает, какой URL-адрес будет отображаться, если существует несколько веб-сайтов (имен хостов), связанных с одним и тем же IP-адресом?Веб-сайты, связанные с одним и тем же IP-адресом
ответ
Использование виртуальных хостов.
Это пример конфигурации от 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 запроса и реагирует соответствующим образом.
С веб-сервером 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.
В зависимости от типа сервера. Apache использует файл .htaccess, и вы также можете настроить виртуальные хосты. Если вы пытаетесь сделать что-то конкретное, вы можете отредактировать свой вопрос, чтобы включить именно то, что вы ищете, и какое программное обеспечение вы используете для размещения.
Это делается в апача с помощью 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-адресу, он направит запрос на первый виртуальный хост.
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.
Вот как это работает.
- 1. Связанные с Rails модели с одним и тем же именем
- 2. Темы, связанные с тем же процессом
- 3. Отображение сообщений одним и тем же рычанием
- 4. Вызов метода одним и тем же методом
- 5. Найти все вершины с одним и тем же атрибутом края
- 6. Как редактировать динамически созданные элементы, связанные с одним и тем же конечным номером?
- 7. Запросить две таблицы, связанные с одним и тем же первичным ключом
- 8. Ошибки с плавающей точкой с одним и тем же входом
- 9. Отношения с одним и тем же лицом - ER Диаграммы
- 10. Связать несколько ионных вкладок с одним и тем же видом?
- 11. Несколько проектов Android с одним и тем же подмодулем GIT
- 12. Сопоставление 2 разных результатов с одним и тем же ключом
- 13. Ловить намерения с тем же URL-адресом и одним приложением
- 14. Несколько шрифтов, связанных с одним и тем же TextView
- 15. Множество отношений Core Data с одним и тем же объектом
- 16. Изменение текста с одним и тем же классом в jQuery
- 17. контроль с одним и тем же ручкой между формами нагрузки
- 18. Как удалить строки с одним и тем же средним блоком?
- 19. Несколько классов с одним и тем же именем в Ruby
- 20. 2 Различные службы с одним и тем же базовым объектом
- 21. Несколько селекторов с одним и тем же классом детей?
- 22. Функции с одним и тем же именем, другое происхождение
- 23. Компоненты с одним и тем же идентификатором внутри ui: repeat
- 24. XSLT: объединить узлы с одним и тем же именем рекурсивно
- 25. Python - Float не совпадает с одним и тем же поплавком?
- 26. Синхронизировать с одним и тем же строковым значением
- 27. Элемент класса с одним и тем же именем
- 28. обнаружить слова с одним и тем же корнем
- 29. Javascript, переключаемые изображения с одним и тем же именем
- 30. Название бина неоднозначно совпадает с одним и тем же бобом
[NAT] (http://en.wikipedia.org/wiki/Network_address_translation) - это, вероятно, то, что вы ищете. – Bhaskar