Dlaczego wpisanie adresu IP zamiast odpowiedniej nazwy domeny nie wyświetla witryny? [Zamknięte]

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

Piszę 93.184.216.34zamiast http://example.comw Chrome. Nie ładuje strony internetowej. Czemu?

PerrierCitror
źródło
Z zasady ludzie nigdy nie powinni używać adresów IP, chyba że skonfigurują rzeczywisty serwer.
David Richerby,
Warto podkreślić, że nie otrzymasz odpowiedzi od serwera: 404 odpowiedzi HTTP. Oznacza to, że udało mu się znaleźć host (komputer po drugiej stronie) i jakiś serwer sieciowy (domyślam się, że coś open source działającego w systemie Linux, jak Nginx) działający na tym hoście odesłał dane.
jpmc26,

Odpowiedzi:

107

Ponieważ właściwy Hostnagłówek HTTP jest często wymagany, aby faktycznie uzyskać zamierzoną witrynę.

Bardzo często hostuje się wiele witryn internetowych pod tym samym adresem IP i rozróżnia się je na podstawie Hostnagłówka HTTP określonego przez klienta (a także wartości SNI TLS w przypadku HTTPS).

To znaczy, kiedy wszedłeś http://example.comdo przeglądarki, Hostnagłówek był example.com, ale nie jest tak w przypadku, gdy wszedłeś 93.184.216.34. W obu przypadkach osiągasz ten sam serwer WWW, ale otrzymujesz różne odpowiedzi (w tym konkretnym przypadku 200 vs. 404).

Håkan Lindqvist
źródło
4
Czy ktoś mógłby trochę rozwinąć to, do czego Hostsłuży i do jakich serwerów sieciowych z reguły go używa? Trudno jest wyszukiwać w Internecie, ponieważ to słowo jest tak przeciążone.
user1717828,
1
tools.ietf.org/html/rfc7230#section-5.4 Serwer HTTP przetwarza nagłówek Hosta tak, jak chce. Na przykład httpd ma dyrektywy konfiguracyjne VirtualHost.
John Mahowald
19
@SergiyKolodyazhnyy Sure. Możesz curl -H "Host: example.com" http://93.184.216.34/czy coś takiego.
Håkan Lindqvist,
13
Parafrazując - „nie ma relacji jeden-do-jednego między adresami URL stron internetowych a adresem IP”.
Pete,
1
W rzeczywistości ten konkretny serwer (93.184.216.34 2606: 2800: 220: 1: 248: 1893: 25c8: 1946) obsługuje przynajmniej example.com example.net example.org example.edu ten sam adres (adresy), dlatego tak naprawdę potrzebuje nazwy w nagłówku hosta.
dave_thompson_085,
14

Ponieważ zwykle serwery sieciowe używają technologii „serwera wirtualnego” i są w stanie odpowiedzieć na twoje żądanie HTTP dokładnie w żądanej nazwie domeny, ale nie na adresie IP serwerów internetowych. Dzięki ukryciu więcej niż jednej nazwy domeny na jednym adresie IP.

Na przykład serwer WWW Apache jest w stanie odpowiedzieć na twoje żądanie HTTP za pomocą adresu IP, używając sekcji:

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

lub jeśli w konfiguracji nie użyto VirtualHost.

Funkcja VirtualHost w Apache została wprowadzona w 1996 roku.

Алексей Лебедев
źródło
10

W Apache możesz hostować wiele stron internetowych używając tylko jednego adresu IP. To się nazywa wirtualny hosting. W ten sposób można tworzyć subdomeny, nawet samodzielne domeny. Odbywa się to poprzez skonfigurowanie pliku konfiguracyjnego Apache zawierającego dyrektywy VirtualHost dla każdej domeny / subdomeny.

Przykładowy serwer HTTP, który ma dwa wirtualne hosty, example1.com i example2.com może wyglądać tak (definicja adresu 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>

Może również wyglądać tak (definicja oparta na nazwie):

<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>

W obu przypadkach dwa rekordy hosta wirtualnego są tworzone wewnętrznie w pamięci i używane przez Apache do porównania z nadejściem żądania URI.

Gdy użytkownik wpisuje adres IP za pośrednictwem agenta użytkownika, pierwszy wirtualny host wymieniony w pliku konfiguracyjnym jest używany jako domena podstawowa (tj. W tym przypadku przyklad.com).

Gdy użytkownik wpisuje nazwę domeny, żądanie jest wysyłane do publicznej internetowej sieci DNS (ICANN), która udostępnia powiązany z nim adres IP. Zarówno zarejestrowałeś się za pośrednictwem rejestratora ICANN (jak GoDaddy). Musisz mieć oba te poprawne i dać trochę czasu, zanim propagacja obejmie wszystkie serwery DNS w sieci ICANN. Obecnie może to potrwać do 24 godzin.

Gdy żądanie jest kierowane do serwera HTTP Apache, adres IP i nazwa domeny są porównywane z listą wewnętrznych rekordów VirtualHost. Gdy zostanie znaleziony, katalog główny dokumentu jest używany do utworzenia pełnej ścieżki systemu plików do zasobu obiektowego w celu powrotu do agenta użytkownika. Jeśli nie, wysyłany jest HTTP 404 wraz z powiązanym z nim dokumentem błędu.

Kerry Kobashi
źródło
8

Lubię używać terminologii „house”.

Możesz dość łatwo wysłać list do domu bez nazwiska, a on dotrze do domu.

Jeśli umieścisz na niej imię i nazwisko osoby, wysyłasz ją do adresata.

Cel jest taki sam, ale sposób, w jaki jest obsługiwany, gdy dotrze do domu, jest inny.

Gdy określisz witrynę, np. Www.example.com, serwer będzie wiedział, jak obsłużyć żądanie i dla którego hosta jest przeznaczony, i dla której witryny ma zostać udostępniony.

Chris Lomax
źródło
To pomocna metafora!
Programy Redwolf,
+1 Podoba mi się pomysł nazwy odbiorcy. Myślałem o podobnej analogii, ale z adresem IP identyfikującym budynek fizyczny (komputer), ale numerem mieszkania (nazwa domeny) identyfikującym faktycznego odbiorcę w budynkach wielorodzinnych. Oczywiście jest to nadmierne uproszczenie i komputery z wieloma dzierżawcami mogą mieć domyślną witrynę tylko z adresem IP, ale myślę, że to dobra analogia.
jmbertucci,
0

Kluczowym terminem do wyszukania jest „wirtualny hosting oparty na nazwie”.

Ludzie chcą przydzielić wiele nazw hostów do tego samego serwera WWW i podawać różne treści dla każdej nazwy hosta. Jest to znane jako wirtualny hosting (nie mylić z nowszą koncepcją maszyn wirtualnych).

Początkowo wirtualny hosting został dokonany przez przydzielenie wielu adresów IP do serwera, serwer mógł następnie wysyłać inną treść na podstawie użytego adresu IP, ale było to postrzegane jako marnotrawstwo.

Dlatego nagłówek „host” został wprowadzony, początkowo jako rozszerzenie, ale później stał się obowiązkową częścią specyfikacji http 1.1 w 1997 roku. Nagłówek ten określa nazwę hosta, o którą prosił klient. Serwer może następnie podawać inną zawartość na podstawie wartości nagłówka.

Peter Green
źródło
„ale było to postrzegane jako marnotrawstwo.” Tylko w przypadku starszych wersji v4. Teraz jest całkiem możliwe skonfigurowanie każdego wirtualnego hosta pod innym adresem v6.
Qwertie,
1
Nadal jesteśmy daleko od punktu, w którym udostępnianie publicznych usług IPv6 jest rozsądnym rozwiązaniem.
Peter Green,
0

Aby obniżyć koszty serwerów WWW, wiele serwerów hostuje wiele stron internetowych. Robią to za pomocą wirtualnych hostów lub Vhostów w apache2 / nginx / etc. Jeśli więc przejdziesz bezpośrednio do adresu IP witryny, najprawdopodobniej pojawi się ekran „Apache działa”, a może nawet nastąpi przekierowanie do głównej strony internetowej serwera.

Vhost sprawdza przychodzący adres strony internetowej i porównuje go z nazwami ServerName lub ServerAlias ​​w włączonych plikach Vhosts. Jeśli jeden z nich pasuje, ta konkretna strona internetowa jest ładowana.

O ile witryna nie ma dużego obciążenia (duża liczba unikalnych użytkowników / wyświetleń strony) lub nie obsługuje aplikacji o wysokim obciążeniu (np. Youtube.com, facebook itp.), Prawdopodobnie bardziej opłacalne jest działanie na wspólnym serwerze. Byłoby marnotrawstwem pieniędzy, aby uzyskać dedykowany serwer (od 60 USD / mc), aby prowadzić witrynę blogową Wordpress. Lepiej jest mieć udostępnioną platformę na serwerze z prawdopodobnie ponad 200 witrynami na jednym serwerze. Koszty będą wyższe w okolicach 5 USD / mc.

Innym powodem tego jest brak adresów IP. Po prostu nie ma wystarczającej liczby adresów IPv4. Jedynie dzięki wykorzystaniu NAT do sieci domowych / biznesowych i wykorzystaniu hostów Vhosts w ogóle mamy. Nawet gdy IPv6 stanie się głównym strumieniem, serwery prawdopodobnie będą trzymać się Vhostów (koszty serwera).

Joseph Williams
źródło
0

Dedykowany adres IP jest drogi, a utworzenie nowej strony internetowej na serwerze jest zasadniczo bezpłatne.

To, co się dzieje, polega na tym, że firma hostingowa wynajmuje pojedynczy adres IP wskazujący na fizyczny serwer, a następnie hostuje tysiące stron internetowych pod tym adresem IP za pomocą funkcji „wirtualnego hosta”

Myśl jak skrytka pocztowa, jeśli po prostu zapiszesz adres pocztowy, ale bez numeru skrytki, poczta nie zostanie dostarczona.

Magnetic_dud
źródło
0

Jest tu wiele odpowiedzi ze szczegółami technicznymi, ale myślę, że najprostszym wyjaśnieniem na wysokim poziomie jest to, że nawet jeśli serwer sieciowy odpowiednio nasłuchuje ruchu http na swoim adresie IP, serwer musi zwykle być skonfigurowany tak, aby odpowiadał dla określonej domeny imię i nazwisko musi znajdować się w żądaniu przesłanym przez klienta (tj. przeglądarkę internetową)

Mówię „zwykle”, ponieważ prawie zawsze robi się to w ten sposób, ale w rzeczywistości istnieją metody, w których można skonfigurować serwer HTTP tak, aby odpowiadał, jeśli używany jest tylko adres IP.

Christopher Hunter
źródło
-1

Musimy zrozumieć różnice między wirtualnymi adresami IP a dedykowanymi adresami IP.

Jeśli witryna ma dedykowany (niepodzielony) adres IP, wówczas (na przykład) http://123.456.789.012 otworzy witrynę.

Spróbuj tego, czyli dedykowanego adresu IP witryny, którą jestem właścicielem, www.negativeiongenerators.com: http://75.126.128.174 Ale, jak powiedzieli inni, zazwyczaj nie jest to dobry pomysł.

Mike Waters
źródło
1
To nie jest uniwersalna prawda. To zależy od konfiguracji serwera WWW. Możesz mieć dedykowany adres IP i nadal nie odpowiadać na adres IP bez hosta, możesz także mieć wspólny adres IP i adres IP wskazujący jedną ze stron internetowych na serwerze. Nie ma również nic złego w zezwoleniu na dostęp do strony internetowej za pośrednictwem samego adresu IP, choć nie jest to również szczególnie przydatne.
Qwertie,