> host example.com
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
Я печатаю 93.184.216.34
вместо http://example.com
Chrome. Он не загружает сайт. Зачем?
> host example.com
example.com has address 93.184.216.34
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
Я печатаю 93.184.216.34
вместо http://example.com
Chrome. Он не загружает сайт. Зачем?
Ответы:
Поскольку правильный HTTP- Host
заголовок часто требуется для того, чтобы получить намеченный сайт.
Очень часто можно размещать несколько веб-сайтов на одном IP-адресе и различать их на основе Host
заголовка HTTP, указанного клиентом (а также значения SNI TLS в настоящее время в случае HTTPS).
То есть, когда вы вводили http://example.com
в свой браузер Host
заголовок был example.com
, но это не тот случай, когда вы вводили 93.184.216.34
. Вы получаете доступ к одному и тому же веб-серверу в обоих случаях, но получаете разные ответы (в данном конкретном случае 200 против 404).
Host
что и для чего обычно используют веб-серверы? Трудно искать в Интернете, потому что это слово слишком перегружено.
curl -H "Host: example.com" http://93.184.216.34/
или что-то в этом роде.
example.com example.net example.org example.edu
тот же адрес (адреса), поэтому ему действительно нужно имя в заголовке узла.
Потому что обычно веб-серверы используют технологию «виртуального сервера» и могут отвечать на ваш HTTP-запрос в пределах именно того доменного имени, которое вы запрашиваете, но не IP-адреса веб-серверов. Благодаря сокрытию более одного доменного имени на одном IP-адресе.
Например, веб-сервер Apache может ответить на ваш HTTP-запрос с помощью IP-адреса, используя раздел:
<VirtualHost *:80>
ServerName Default
...
</VirtualHost>
или если VirtualHost не используется в конфигурации вообще.
Функция VirtualHost в Apache была представлена в 1996 году.
В Apache вы можете разместить множество сайтов, используя только один IP-адрес. Это называется виртуальным хостингом. Это то, как могут создаваться субдомены, даже автономные домены. Это делается путем настройки файла конфигурации Apache, содержащего директивы VirtualHost для каждого домена / субдомена.
Пример HTTP-сервера с двумя виртуальными хостами example1.com и example2.com может выглядеть следующим образом (определение IP-адреса):
<VirtualHost 93.184.216.34:80>
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot /var/www/example1.com
</VirtualHost>
<VirtualHost 93.184.216.34:80>
ServerName example2.com
ServerAlias www.example2.com
DocumentRoot /var/www/example2.com
</VirtualHost>
Это также может выглядеть следующим образом (определение на основе имени):
<VirtualHost *:80>
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot /var/www/example1.com
</VirtualHost>
<VirtualHost *:80>
ServerName example2.com
ServerAlias www.example2.com
DocumentRoot /var/www/example2.com
</VirtualHost>
В обоих случаях две записи виртуального хоста создаются внутри памяти и используются Apache для сравнения при получении запроса URI.
Когда пользователь вводит IP-адрес через пользовательский агент, первый виртуальный хост, указанный в файле конфигурации, используется в качестве основного домена (т.е. в данном случае example1.com).
Когда пользователь вводит имя домена, запрос отправляется в общедоступную сеть DNS Интернета (ICANN), которая предоставляет связанный с ним IP-адрес. Вы оба зарегистрировались через регистратора ICANN (например, GoDaddy). Вы должны правильно их использовать и дать некоторое время, прежде чем распространение охватит все DNS-серверы в сети ICANN. В эти дни это может занять до 24 часов.
Когда запрос направляется на ваш HTTP-сервер Apache, IP-адрес и имя домена сопоставляются со списком внутренних записей VirtualHost. Когда он найден, корень документа используется для формирования полного пути файловой системы к ресурсу объекта для возврата обратно агенту пользователя. Если нет, то HTTP 404 отправляется вместе с любым документом об ошибке, связанным с ним.
Мне нравится использовать терминологию "дом".
Вы можете довольно легко отправить письмо в дом без имени, и оно придет в дом.
Если вы указали имя этого человека, вы отправляете его получателю.
Пункт назначения тот же, но как он обрабатывается, когда добирается до дома, другой.
Когда вы указываете сайт, т.е. www.example.com, сервер знает, как обрабатывать запрос и для какого хоста он предназначен и какой сайт обслуживать обратно.
Ключевым термином для поиска является «виртуальный хостинг на основе имени».
Люди хотят назначить несколько имен хостов одному и тому же веб-серверу и предоставлять разное содержимое для каждого имени хоста. Это известно как виртуальный хостинг (не путать с более поздней концепцией виртуальных машин).
Первоначально виртуальный хостинг осуществлялся путем выделения нескольких IP-адресов серверу, после чего сервер мог отправлять различное содержимое в зависимости от используемого IP-адреса, но это было сочтено расточительным.
Поэтому заголовок «host» был введен сначала как расширение, но затем в 1997 году стал обязательной частью спецификации http 1.1. Этот заголовок указывает имя хоста, которое запрашивал клиент. Сервер может затем обслуживать другой контент в зависимости от значения заголовка.
Чтобы снизить затраты на веб-серверы, многие веб-серверы содержат несколько веб-сайтов. Они делают это с помощью виртуальных хостов, или Vhosts, в apache2 / nginx / etc. Поэтому, если вы перейдете непосредственно к IP-адресу веб-сайта, вы, скорее всего, получите экран «Apache is works», или, возможно, даже будете перенаправлены на основной веб-сайт веб-сервера.
Vhost просматривает входящий адрес веб-сайта и сравнивает его с именами ServerName или ServerAlias в включенных файлах Vhosts. Если один из них совпадает, загружается определенный веб-сайт.
Если веб-сайт не имеет большой нагрузки (большое количество уникальных посетителей / просмотров страниц) или не загружает приложения с высокой нагрузкой (например, youtube.com, facebook и т. Д.), Вероятно, будет более рентабельно работать на общем сервере. Было бы бесполезной тратой денег, чтобы получить себе выделенный сервер (начиная с $ 60 / мес.) Только для запуска блога на сайте Wordpress. Вам лучше получить общую платформу на сервере с более чем 200 веб-сайтами на одном сервере. Затраты будут больше в районе $ 5 / мес.
Еще одна причина для этого является отсутствие IP-адресов. Просто не хватает IPv4-адресов. Только благодаря использованию NAT для домашних / деловых сетей и использованию Vhosts у нас есть что-то еще. Даже когда IPv6 становится основным потоком, серверы, вероятно, будут придерживаться Vhosts (стоимость сервера).
Выделенный IP-адрес стоит дорого, а создание нового веб-сайта на сервере в основном бесплатное.
В результате хостинговая компания арендует один IP-адрес, который указывает на физический сервер, а затем размещает тысячи веб-сайтов на этом IP-адресе, используя функцию «виртуальный хост».
Думайте как почтовый ящик, если вы просто запишите адрес почтового отделения, но без номера ящика, почта не будет доставлена.
Здесь много ответов с техническими подробностями, но я думаю, что самое простое высокоуровневое объяснение состоит в том, что даже если веб-сервер правильно прослушивает http-трафик на своем IP-адресе, сервер обычно также должен быть настроен для ответа для определенного домена имя, и это имя должно быть в запросе, отправленном клиентом (то есть веб-браузер)
Я говорю «обычно», потому что это почти всегда делается так, но на самом деле есть способы, с помощью которых вы можете настроить http-сервер для ответа, если используется только IP-адрес.
Нам необходимо понимать разницу между виртуальными IP-адресами и выделенными IP-адресами.
Если веб-сайт имеет выделенный (не общий) IP-адрес, то (например) http://123.456.789.012 запустит веб-сайт.
Попробуйте это, это выделенный мне IP-адрес сайта, которым я владею, www.negativeiongenerators.com: http://75.126.128.174 Но, как уже говорили другие, это обычно не очень хорошая идея.