В дополнение к уже превосходному ответу @ grawity, вы должны помнить, что DNS (или в этом случае ваш hosts
файл, который служит той же цели) только отображает имя на IP-адрес - но в этих именах нет никакого ограничения IP-адресов. сопоставления to-ip. Пример @ grawity о том, что телефонный номер (IP) может быть доступен для разных людей (имена / программы), является хорошим примером.
Если бы существовало правило сопоставления, в котором один IP-адрес мог использоваться только один раз, вы не могли бы запускать несколько служб (даже разных видов) с одного и того же IP-адреса, что было бы серьезным техническим ограничением. Вам понадобятся отдельные IP-адреса (и, вероятно, серверы) для HTTP, DNS, электронной почты и т. Д. И всех поддоменов (например, www.example.com является поддоменом example.com и для него потребуется отдельный IP-адрес от example.com ) ,
Поскольку в этих сопоставлениях такого ограничения нет, программы обычно связываются с сервером на разных портах для разделения трафика. Обратите внимание, что порты не включены в записи DNS (или ваш hosts
файл) - это зависит от отдельных частей программного обеспечения, чтобы решить, какие порты они должны использовать для связи. Если на один получено несколько запросов на разные имена (порт 80 или 443 для обычного веб-трафика), то сервер (который в вашем случае находится на 127.0.0.1) должен решить, что делать, например, если он получает запрос на php.localhost
или py.localhost
.
Именно здесь вступает в действие виртуальный хостинг на основе имен (технически индикация имени сервера [SNI] для HTTPS). Ваш файл виртуальных хостов содержит инструкции для Apache, в которых говорится: «Если мы получим запрос на это имя хоста, сделайте X». Если имя не совпадает, сервер обычно возвращает код состояния HTTP 404 (не найден). Если есть, запись виртуального хоста сообщает серверу, как действовать (обслуживать страницы из этого каталога и т. Д.).
Обратите внимание, что ваша ServerName localhost
запись в httpd.conf
является хостом по умолчанию. Этот хост иногда обслуживается вместо возврата 404, если в вашем файле виртуальных хостов не найдено подходящего имени хоста.