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

38
> 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.comChrome. Он не загружает сайт. Зачем?

PerrierCitror
источник
Как правило, люди никогда не должны использовать IP-адреса, если не настроен реальный сервер.
Дэвид Ричерби
Стоит подчеркнуть , что вы сделали получить ответ от сервера: ответ на 404 HTTP. Это означает, что он успешно обнаружил, что хост (компьютер на другой стороне) и некоторый веб-сервер (я предполагаю, что что-то с открытым исходным кодом, работающее в Linux, например, Nginx), работающее на этом хосте, отправили обратно данные.
jpmc26

Ответы:

107

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

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

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

Хокан Линдквист
источник
4
Может ли кто-нибудь немного рассказать о том, Hostчто и для чего обычно используют веб-серверы? Трудно искать в Интернете, потому что это слово слишком перегружено.
user1717828
1
tools.ietf.org/html/rfc7230#section-5.4 http-сервер обрабатывает заголовок узла так, как хочет. httpd, например, имеет директивы конфигурации VirtualHost.
Джон Маховальд
19
@SergiyKolodyazhnyy Конечно. Вы могли curl -H "Host: example.com" http://93.184.216.34/или что-то в этом роде.
Хокан Линдквист
13
Перефразируя - «между URL-адресами веб-сайтов и IP-адресом нет однозначного отношения».
Пит
1
Фактически этот конкретный сервер (93.184.216.34 2606: 2800: 220: 1: 248: 1893: 25c8: 1946) обрабатывает по крайней мере один и example.com example.net example.org example.edu тот же адрес (адреса), поэтому ему действительно нужно имя в заголовке узла.
dave_thompson_085
14

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

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

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

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

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

Алексей Лебедев
источник
10

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

Керри Кобаши
источник
8

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

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

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

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

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

Крис Ломакс
источник
Это полезная метафора!
Программы
+1 Мне нравится идея имени получателя. Я думал о подобной аналогии, но с IP-адресом, идентифицирующим физическое здание (компьютер), но номером квартиры (доменное имя), идентифицирующим фактического получателя в многоквартирных зданиях. Конечно, это чрезмерное упрощение, и на многопользовательских компьютерах сервер IP-адресов может иметь сайт по умолчанию, но я думаю, что это хорошая аналогия.
Jmbertucci
0

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

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

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

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

Питер Грин
источник
«но это было расценено как расточительное.» Только для устаревших соединений v4. Теперь вполне возможно настроить каждый виртуальный хост на другой адрес v6.
Qwertie
1
Мы все еще далеки от того, чтобы сделать ваши общедоступные сервисы только IPv6 разумным.
Питер Грин
0

Чтобы снизить затраты на веб-серверы, многие веб-серверы содержат несколько веб-сайтов. Они делают это с помощью виртуальных хостов, или 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 (стоимость сервера).

Джозеф Уильямс
источник
0

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

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

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

Magnetic_dud
источник
0

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

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

Кристофер Хантер
источник
-1

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

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

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

Майк Уотерс
источник
1
Это не универсально верно. Это зависит от конфигурации веб-сервера. У вас может быть выделенный IP-адрес, но вы не можете отвечать на IP-адрес без хоста, а также вы можете иметь общий IP-адрес и указывать IP-адрес одного из веб-сайтов на сервере. Также нет ничего плохого в том, чтобы разрешить доступ к веб-сайту только по его IP-адресу, хотя это тоже не особенно полезно.
Qwertie