Почему при вводе IP-адреса вместо соответствующего доменного имени сайт не отображается? [закрыто]

> 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. Сайт не загружается. Почему?

38
задан 3 December 2018 в 08:22
9 ответов

Потому что правильный заголовок HTTP Host часто требуется для фактического получения намеченного сайта.

Очень часто размещать несколько веб-сайтов на одном IP-адресе и различать их на основе заголовка HTTP Host , указанного клиентом (а также значения SNI TLS в настоящее время в случае HTTPS ).

То есть, когда вы ввели http://example.com в свой браузер, заголовок Host был example.com , но это не тот случай, когда вы ввели 93.184.216.34 . В обоих случаях вы обращаетесь к одному и тому же веб-серверу, но получаете разные ответы (в данном конкретном случае 200 против 404).

107
ответ дан 28 November 2019 в 19:46

Потому что обычно веб-серверы используют технологию «виртуального сервера» и могут отвечать на ваш HTTP-запрос в пределах точно запрашиваемого вами доменного имени, но не IP-адреса веб-серверов. Благодаря скрытию более одного доменного имени на одном IP-адресе.

Например,веб-сервер Apache может ответить на ваш HTTP-запрос с помощью IP-адреса, используя раздел:

<VirtualHost *:80>
ServerName Default
...
</VirtualHost>

или если VirtualHost не используется в конфигурации вообще.

Функция VirtualHost в Apache была представлена ​​в 1996.

14
ответ дан 28 November 2019 в 19:46

Мне нравится использовать "домашнюю" терминологию.

Вы можете легко отправить письмо в дом без имени, и оно будет доставлено в дом.

Если вы укажете на нем имя человека, вы отправите его предполагаемому получателю.

Пункт назначения тот же, но то, как он обрабатывается, когда он достигает дома, отличается.

Когда вы указываете сайт, то есть www.example.com, тогда сервер знает, как обрабатывать запрос и для какого хоста он предназначен, и какой сайт обслуживать.

8
ответ дан 28 November 2019 в 19:46

В 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 вместе с любым связанным с ним документом об ошибке.

10
ответ дан 28 November 2019 в 19:46

Ключевой термин для поиска - «виртуальный хостинг на основе имени».

Люди хотят выделить несколько имен хостов одному и тому же веб-серверу и обслуживать разный контент для каждого имени хоста. Это известно как виртуальный хостинг (не путать с более поздней концепцией виртуальных машин).

Первоначально виртуальный хостинг осуществлялся путем выделения серверу нескольких IP-адресов, после чего сервер мог отправлять различный контент на основе IP-адреса. использовались, но это было сочтено расточительным.

Поэтому заголовок «host» был введен, первоначально как расширение, но затем стал обязательной частью спецификации http 1.1 в 1997 году. Этот заголовок определяет имя хоста, которое запрашивает клиент. Затем сервер может обслуживать различный контент в зависимости от значения заголовка.

0
ответ дан 28 November 2019 в 19:46

Выделенный IP-адрес стоит дорого, в то время как создание нового веб-сайта на сервере в основном бесплатное.

Случается, что хостинговая компания арендует один IP-адрес, указывающий на физический сервер. , затем размещает тысячи веб-сайтов на этом IP-адресе с помощью функции «виртуального хоста»

Думайте как заказчик Box, если вы просто напишете адрес почтового отделения, но без номера ящика, почта не будет доставлена.

0
ответ дан 28 November 2019 в 19:46

Здесь много ответов с техническими деталями, но я думаю, что самое простое объяснение высокого уровня состоит в том, что даже если веб-сервер правильно прослушивает HTTP-трафик на своем IP-адресе, сервер должен обычно также настраивается для ответа на конкретное доменное имя, и это имя должно быть в запросе, отправленном клиентом (то есть веб-браузером)

Я говорю «обычно», потому что это почти всегда делается способ, но на самом деле существуют методы, с помощью которых вы можете настроить HTTP-сервер для ответа, если используется только IP-адрес.

0
ответ дан 28 November 2019 в 19:46

Нам необходимо понимать разницу между виртуальными IP-адресами и выделенными IP-адресами.

Если веб-сайт имеет выделенный (не общий) IP-адрес, то (например) http://123.456.789.012 откроет веб-сайт.

Попробуйте это - выделенный IP-адрес принадлежащего мне сайта www.negativeiongenerators.com: http://75.126.128.174 Но, как говорили другие, обычно это не очень хорошая идея.

-1
ответ дан 28 November 2019 в 19:46

Чтобы снизить затраты на веб-серверы, на многих веб-серверах размещается несколько веб-сайтов. Они делают это с помощью виртуальных хостов или Vhosts в apache2 / nginx / etc. Поэтому, если вы перейдете непосредственно на IP-адрес веб-сайта, вы, скорее всего, получите экран «Apache работает» или, возможно, даже будете перенаправлены на основной веб-сайт веб-сервера.

Vhost просматривает входящий адрес веб-сайта и сравнивает его с именами ServerName или ServerAlias ​​в включенных файлах Vhosts. Если один из них совпадает, загружается этот конкретный веб-сайт.

Если веб-сайт не имеет большой нагрузки (большое количество уникальных посетителей / просмотров страниц) или не поддерживает приложения с высокой нагрузкой (например, youtube.com, facebook и т. Д.), Это вероятно, более рентабельно работать на общем сервере. Было бы пустой тратой денег получить себе выделенный сервер (от 60 долларов в месяц) только для того, чтобы запустить сайт блога Wordpress. Вам лучше получить общую платформу на сервере с, вероятно, 200+ веб-сайтами на одном сервере. Стоимость будет выше в районе 5 долларов в месяц.

Другой причиной для этого является отсутствие IP-адресов. Просто осталось недостаточно адресов IPv4. Только за счет использования NAT для домашних / деловых сетей и использования Vhosts у нас вообще остается что-то. Даже когда IPv6 станет основным потоком, серверы, вероятно, будут придерживаться Vhosts (затраты на сервер).

0
ответ дан 28 November 2019 в 19:46

Теги

Похожие вопросы