> 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-адресе и различать их на основе HTTP. Host
заголовок, указанный клиентом (а также значение SNI TLS в настоящее время в случае HTTPS).
То есть, когда вы вошли http://example.com
в ваш браузер Host
заголовок был example.com
, но это не тот случай, когда вы ввели 93.184.216.34
. В обоих случаях вы обращаетесь к одному и тому же веб-серверу, но получаете разные ответы (в данном конкретном случае 200 против 404).
Потому что обычно веб-серверы используют технологию «виртуального сервера» и могут отвечать на ваш 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» был введен сначала как расширение, но позже стал обязательной частью спецификации http 1.1 в 1997 году. Этот заголовок определяет имя хоста, которое запрашивает клиент. Затем сервер может обслуживать различный контент в зависимости от значения заголовка.
Чтобы снизить затраты на веб-серверы, на многих веб-серверах размещается несколько веб-сайтов. Они делают это с помощью виртуальных хостов или Vhosts в apache2 / nginx / etc. Поэтому, если вы перейдете прямо на IP-адрес веб-сайта, вы, скорее всего, получите экран «Apache работает» или, возможно, даже будете перенаправлены на основной веб-сайт веб-сервера.
Vhost смотрит на входящий адрес веб-сайта и сравнивает его с именами ServerName или ServerAlias в включенных файлах Vhosts. Если один из них совпадает, загружается этот конкретный веб-сайт.
Если веб-сайт не имеет большой нагрузки (большое количество уникальных посетителей / просмотров страниц) или не управляет приложениями с высокой нагрузкой (например, youtube.com, facebook и т. Д.), Вероятно, более экономически выгодно работать на общем сервере. Было бы пустой тратой денег получить себе выделенный сервер (от 60 долларов в месяц) только для того, чтобы запустить сайт блога Wordpress. Вам лучше получить общую платформу на сервере с, вероятно, 200+ веб-сайтами на одном сервере. Затраты будут выше в районе 5 долларов в месяц.
Еще одна причина для этого - отсутствие IP-адресов. Просто осталось недостаточно адресов IPv4. Только за счет использования NAT для домашних / деловых сетей и использования Vhosts у нас вообще остается что-то. Даже когда IPv6 станет основным потоком, серверы, вероятно, будут придерживаться Vhosts (затраты на сервер).
Выделенный IP-адрес стоит дорого, а создание нового веб-сайта на сервере в основном бесплатное.
Что происходит, так это то, что хостинговая компания арендует один IP-адрес, который указывает на физический сервер, а затем размещает тысячи веб-сайтов на этом IP-адресе с помощью функции «виртуального хоста».
Думайте как P.O. Box, если вы просто напишете адрес почтового отделения, но без номера ящика, почта не будет доставлена.
Здесь много ответов с техническими деталями, но я думаю, что самое простое объяснение высокого уровня состоит в том, что даже если веб-сервер правильно прослушивает http-трафик на своем IP-адресе, сервер должен обычно также быть настроенным для ответа на конкретное доменное имя, и это имя должно быть в запросе, отправленном клиентом (то есть веб-браузером)
Я говорю «обычно», потому что это почти всегда делается таким образом, но на самом деле существуют методы, с помощью которых вы можете настроить HTTP-сервер на ответ, если используется только IP-адрес.
Нам нужно понимать разницу между виртуальными IP-адресами и выделенными IP-адресами.
Если на сайте есть преданный (не общий) IP, тогда (например) http://123.456.789.012 откроет веб-сайт.
Попробуйте это, это выделенный IP-адрес принадлежащего мне сайта www.negativeiongenerators.com: http://75.126.128.174 Но, как говорили другие, обычно это не очень хорошая идея.