Чому введення 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. Він не завантажує веб-сайт. Чому?


Як правило, люди ніколи не повинні використовувати IP-адреси, якщо не конфігурувати фактичний сервер.
Девід Річербі

Варто підкреслити , що ви зробили отримати відповідь від сервера: відповідь на 404 HTTP. Це означає, що він успішно знайшов хост (комп'ютер з іншого боку) та якийсь веб-сервер (я б здогадався, що з відкритим кодом працює Linux, як Nginx), що працює на цьому хості, що надсилає назад дані.
jpmc26

Відповіді:


107

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

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

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


4
Чи може хтось трохи розширити, що Hostробить і для чого веб-сервери зазвичай використовують це? Пошук в Інтернеті важко, тому що це слово настільки перевантажено.
користувач1717828

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, сервер знає, як обробляти запит та для якого хоста він призначений та який сайт повертати.


Це корисна метафора!
Програми Redwolf

+1 Мені подобається ідея імені одержувача. Я думав про подібну аналогію, але з IP-адресою, що ідентифікує фізичну будівлю (комп'ютер), але номер квартири (доменне ім’я), що ідентифікує фактичного одержувача у багатоквартирних будинках. Звичайно, це надмірне спрощення, і на комп’ютерах з багатьма орендами міг би бути сервер адрес адреси лише IP-адресою за замовчуванням, але я думаю, що це хороша аналогія.
jmbertucci

0

Ключовим терміном для пошуку є "віртуальний хостинг на основі імен".

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

Спочатку віртуальний хостинг здійснювався шляхом розподілу декількох IP-адрес на сервер, а потім сервер може надсилати різний контент на основі використовуваної IP-адреси, але це вважалося марним.

Тому заголовок "хост" був введений, спочатку як розширення, але згодом став обов'язковою частиною специфікації http 1.1 у 1997 році. Цей заголовок визначає ім'я хоста, про яке вимагав клієнт. Потім сервер може подавати різний вміст на основі значення заголовка.


", але це вважалося марним." Тільки для застарілих v4-з'єднань. Зараз цілком можливо встановити кожен віртуальний хост за іншою v6-адресою.
Qwertie

1
Ми ще дуже далекі від того, щоб зробити ваші загальнодоступні послуги IPv6 лише розумною справою.
Пітер Грін

0

Щоб зменшити витрати на веб-сервери, багато веб-серверів розміщують кілька веб-сайтів. Вони роблять це за допомогою віртуальних хостів або Vhosts, в apache2 / nginx / тощо. Тож якщо ви перейдете безпосередньо до IP-адреси веб-сайту, ви, швидше за все, отримаєте екран "Apache працює" або, можливо, навіть перейдете на головний веб-сайт веб-сервера.

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

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

Ще одна причина цього - відсутність IP-адрес. Просто не вистачає IPv4-адрес. Лише завдяки використанню NAT для домашніх / ділових мереж і використання Vhosts у нас взагалі залишилось. Навіть коли IPv6 стає основним потоком, сервери, ймовірно, будуть дотримуватися Vhosts (серверні витрати).


0

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

Що відбувається, що хостинг-компанія орендує єдину IP-адресу, яка вказує на фізичний сервер, а потім розміщує тисячі веб-сайтів на цій IP-адресі за допомогою функції "віртуального хоста"

Подумайте як поштова скринька, якщо ви просто записуєте адресу поштового відділення, але без номера коробки, пошта не буде доставлена.


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.