Warum zeigt die Eingabe einer IP-Adresse anstelle des entsprechenden Domainnamens die Website nicht an? [geschlossen]

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

Ich tippe 93.184.216.34statt http://example.comin Chrome. Die Website wird nicht geladen. Warum?

PerrierCitror
quelle
Als Faustregel gilt, dass Menschen niemals IP-Adressen verwenden sollten, es sei denn, sie konfigurieren einen tatsächlichen Server.
David Richerby
Zu betonen , dass Sie haben eine Antwort vom Server erhalten: eine 404 - HTTP - Antwort. Dies bedeutet, dass der Host (der Computer auf der anderen Seite) und ein Webserver (ich würde annehmen, dass Open Source unter Linux wie Nginx läuft), der auf diesem Host ausgeführt wird, erfolgreich Daten zurückgesendet haben.
jpmc26

Antworten:

107

Denn Hostoft wird der richtige HTTP- Header benötigt, um die beabsichtigte Site tatsächlich zu erhalten.

Häufig werden mehrere Websites unter derselben IP-Adresse gehostet und anhand des Hostvom Client angegebenen HTTP- Headers (sowie des TLS-SNI-Werts heutzutage bei HTTPS) voneinander unterschieden .

Das heißt, wenn Sie http://example.comin Ihren Browser eingegeben haben, war der HostHeader example.com, aber das ist nicht der Fall, wenn Sie eingegeben haben 93.184.216.34. Sie erreichen in beiden Fällen denselben Webserver, erhalten jedoch unterschiedliche Antworten (in diesem speziellen Fall 200 vs. 404).

Håkan Lindqvist
quelle
4
Könnte jemand ein bisschen näher auf die Aufgaben Hosteingehen und für welche Webserver wird sie im Allgemeinen verwendet? Es ist ziemlich schwer online zu suchen, weil dieses Wort so überladen ist.
user1717828
1
tools.ietf.org/html/rfc7230#section-5.4 Ein http-Server verarbeitet einen Host-Header nach Belieben . httpd verfügt beispielsweise über VirtualHost-Konfigurationsanweisungen.
John Mahowald
19
@SergiyKolodyazhnyy Sicher. Sie könnten curl -H "Host: example.com" http://93.184.216.34/oder so ähnlich.
Håkan Lindqvist
13
Um es zu paraphrasieren: "Es gibt keine Eins-zu-Eins-Beziehung zwischen URLs für Websites und IP-Adressen."
Pete
1
Tatsächlich verarbeitet dieser bestimmte Server (93.184.216.34 2606: 2800: 220: 1: 248: 1893: 25c8: 1946) mindestens example.com example.net example.org example.edu dieselben Adressen, weshalb er den Namen im Host-Header wirklich benötigt.
Dave_thompson_085
14

Da Webserver normalerweise die "Virtual Server" -Technologie verwenden und in der Lage sind, auf Ihre HTTP-Anfrage genau den von Ihnen angeforderten Domainnamen zu beantworten, jedoch nicht die IP-Adresse der Webserver. Dank dem Verstecken von mehr als einem Domainnamen auf einer IP-Adresse.

Beispielsweise kann der Apache -Webserver auf Ihre HTTP-Anfrage mit einer IP-Adresse antworten, die den folgenden Abschnitt enthält:

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

oder wenn in der Konfiguration überhaupt kein VirtualHost verwendet wird.

Die VirtualHost-Funktion in Apache wurde 1996 eingeführt.

Алексей Лебедев
quelle
10

In Apache können Sie viele Websites mit nur einer einzigen IP-Adresse hosten. Dies wird als virtuelles Hosting bezeichnet. Auf diese Weise können Unterdomänen erstellt werden, auch eigenständige Domänen. Dies erfolgt durch Einrichten einer Apache-Konfigurationsdatei, die VirtualHost-Anweisungen für jede Domain / Subdomain enthält.

Ein Beispiel-HTTP-Server mit zwei virtuellen Hosts, example1.com und example2.com, kann folgendermaßen aussehen (IP-Adressdefinition):

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

Es kann auch so aussehen (namensbasierte Definition):

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

In beiden Fällen werden zwei virtuelle Host-Datensätze intern im Speicher erstellt und von Apache verwendet, um einen Vergleich mit dem Zeitpunkt durchzuführen, zu dem eine URI-Anforderung eingeht.

Wenn ein Benutzer die IP-Adresse über einen Benutzeragenten eingibt, wird der erste in der Konfigurationsdatei aufgeführte virtuelle Host als primäre Domäne verwendet (dh in diesem Fall example1.com).

Wenn ein Benutzer einen Domänennamen eingibt, wird die Anforderung an ein öffentliches Internet-DNS-Netzwerk (ICANN) gesendet, das die damit verbundene IP-Adresse bereitstellt. Sie haben beide über einen ICANN-Registrar (wie GoDaddy) registriert. Beides muss korrekt sein und einige Zeit in Anspruch genommen werden, bevor die Weitergabe an alle DNS-Server im ICANN-Netzwerk erfolgt. In diesen Tagen kann es bis zu 24 Stunden dauern.

Wenn die Anforderung an Ihren Apache-HTTP-Server weitergeleitet wird, werden die IP-Adresse und der Domänenname mit der Liste der internen VirtualHost-Einträge abgeglichen. Wenn eines gefunden wird, wird der Dokumentstamm verwendet, um den vollständigen Dateisystempfad zur Objektressource zu bilden und zum Benutzeragenten zurückzukehren. Wenn nicht, wird ein HTTP 404 zusammen mit einem zugehörigen Fehlerdokument gesendet.

Kerry Kobashi
quelle
8

Ich verwende gerne die "Haus" -Terminologie.

Sie können ganz einfach einen Brief an ein Haus senden, auf dem sich kein Name befindet, und der Brief kommt im Haus an.

Wenn Sie den Namen der Person darauf setzen, senden Sie ihn an den vorgesehenen Empfänger.

Das Ziel ist das gleiche, aber wie es gehandhabt wird, wenn es das Haus erreicht, ist unterschiedlich.

Wenn Sie die Site, dh www.example.com, angeben, weiß der Server, wie die Anfrage zu behandeln ist, für welchen Host er bestimmt ist und welche Site zurückgeschickt werden soll.

Chris Lomax
quelle
Dies ist eine hilfreiche Metapher!
Redwolf Programme
+1 Ich mag die Idee des Empfängernamens. Ich dachte an eine ähnliche Analogie, bei der jedoch die IP-Adresse das physische Gebäude (Computer) und die Wohnungsnummer (Domänenname) den tatsächlichen Empfänger in Gebäuden mit mehreren Mietern identifizierte. Dies ist natürlich eine zu starke Vereinfachung, und bei Computern mit mehreren Mandanten könnte der IP-Adressenserver eine Standardwebsite sein, aber ich halte dies für eine gute Analogie.
Jmbertucci
0

Der Schlüsselbegriff für die Suche ist "name based virtual hosting".

Die Benutzer möchten demselben Webserver mehrere Hostnamen zuweisen und für jeden Hostnamen unterschiedliche Inhalte bereitstellen. Dies wird als virtuelles Hosting bezeichnet (nicht zu verwechseln mit dem neueren Konzept virtueller Maschinen).

Anfänglich wurde virtuelles Hosting durchgeführt, indem dem Server mehrere IP-Adressen zugewiesen wurden. Der Server konnte dann je nach verwendeter IP-Adresse unterschiedliche Inhalte senden, was jedoch als verschwenderisch angesehen wurde.

Aus diesem Grund wurde der "Host" -Header eingeführt, zunächst als Erweiterung, später jedoch als obligatorischer Bestandteil der http 1.1-Spezifikation von 1997. Dieser Header gibt den Hostnamen an, nach dem der Client gefragt hat. Der Server kann dann verschiedene Inhalte basierend auf dem Wert des Headers bereitstellen.

Peter Green
quelle
"Dies wurde jedoch als verschwenderisch angesehen." Nur für ältere v4-Verbindungen. Es ist jetzt durchaus möglich, jeden virtuellen Host auf einer anderen v6-Adresse einzurichten.
Qwertie
1
Wir sind noch weit von dem Punkt entfernt, an dem es sinnvoll ist, Ihre öffentlich zugänglichen Dienste nur auf IPv6 umzustellen.
Peter Green
0

Um die Kosten für Webserver niedrig zu halten, hosten viele Webserver mehrere Websites. Sie tun dies, indem sie virtuelle Hosts oder Vhosts in apache2 / nginx / etc verwenden. Wenn Sie also direkt zur IP-Adresse der Website gehen, wird höchstwahrscheinlich ein "Apache funktioniert" -Bildschirm angezeigt, oder Sie werden möglicherweise sogar zur Hauptwebsite des Webservers weitergeleitet.

Ein Vhost überprüft die eingehende Website-Adresse und vergleicht sie mit den Namen ServerName oder ServerAlias ​​in den aktivierten Vhosts-Dateien. Wenn einer von ihnen übereinstimmt, wird diese bestimmte Website geladen.

Sofern die Website nicht über eine massive Auslastung (hohe Anzahl eindeutiger Besucher / Seitenaufrufe) verfügt oder Anwendungen mit hoher Auslastung (z. B. youtube.com, Facebook usw.) ausführt, ist der Betrieb auf einem gemeinsam genutzten Server wahrscheinlich kostengünstiger. Es wäre eine Geldverschwendung, sich einen dedizierten Server (ab 60 USD / Monat) zu besorgen, um eine Wordpress-Blog-Website zu betreiben. Sie sollten eine gemeinsame Plattform auf einem Server mit mehr als 200 Websites auf einem Server einrichten. Die Kosten werden mehr im Bereich von 5 $ / Monat liegen.

Ein weiterer Grund dafür ist das Fehlen von IP-Adressen. Es sind einfach nicht genug IPv4-Adressen übrig. Es ist nur durch die Verwendung von NAT für Heim- / Geschäftsnetzwerke und die Verwendung von Vhosts möglich, dass wir überhaupt noch etwas übrig haben. Auch wenn IPv6 zum Mainstream wird, bleiben Server wahrscheinlich bei Vhosts (Serverkosten).

Joseph Williams
quelle
0

Eine dedizierte IP-Adresse ist teuer, während das Erstellen einer neuen Website auf einem Server grundsätzlich kostenlos ist.

Das Hosting-Unternehmen mietet eine einzelne IP-Adresse, die auf einen physischen Server verweist, und hostet dann mithilfe der Funktion "Virtueller Host" Tausende von Websites auf dieser IP-Adresse

Denken Sie wie ein Postfach, wenn Sie nur die Postanschrift aufschreiben, aber ohne die Postfachnummer, wird die Post nicht zugestellt.

Magnetic_dud
quelle
0

Hier gibt es viele Antworten mit technischen Details, aber ich denke, die einfachste Erklärung auf hoher Ebene ist, dass selbst wenn ein Webserver den HTTP-Verkehr auf seiner IP-Adresse richtig überwacht, der Server normalerweise auch so konfiguriert werden muss, dass er für eine bestimmte Domain antwortet Name, und dieser Name muss in der vom Client (dh dem Webbrowser) gesendeten Anfrage enthalten sein

Ich sage "normalerweise", weil es fast immer so gemacht wird, aber es gibt tatsächlich Methoden, bei denen Sie den http-Server so einrichten können, dass er antwortet, wenn nur die IP-Adresse verwendet wird.

Christopher Hunter
quelle
-1

Wir müssen die Unterschiede zwischen virtuellen und dedizierten IPs verstehen.

Wenn eine Website über eine dedizierte (nicht freigegebene) IP verfügt, wird die Website (zum Beispiel) unter http://123.456.789.012 aufgerufen .

Versuchen Sie Folgendes: Dies ist die dedizierte IP-Adresse einer Website, die ich besitze ( www.negativeiongenerators.com) : http://75.126.128.174. Wie andere bereits gesagt haben, ist dies normalerweise keine gute Idee.

Mike Waters
quelle
1
Dies ist nicht allgemein gültig. Dies hängt von der Webserverkonfiguration ab. Sie können eine dedizierte IP-Adresse haben und ohne den Host immer noch nicht auf die IP antworten. Sie können auch eine freigegebene IP-Adresse haben und die IP-Adresse auf eine der Websites auf dem Server verweisen. Es ist auch nichts Falsches daran, den Zugriff auf eine Website nur über ihre IP-Adresse zuzulassen, obwohl dies auch nicht besonders nützlich ist.
Qwertie