Nach meinem Verständnis des DNS-Links ist der Domainname mit der IP-Adresse des Servers verknüpft, auf dem die Website gespeichert ist. Bedeutet das, dass jeder Server nur eine Website enthalten kann? Wenn nicht, woher weiß der Aufruf der IP-Adresse des Servers, welche Website ich haben möchte, wenn sich viele auf demselben Server befinden?
80
Host:
Header. Im Falle von Shared Hosting kann der Webserver vom Anbieter so konfiguriert werden, dass dies auf unterschiedliche Weise behandelt wird (z. B. Standard, Weiterleitung an den Anbieter usw.).Antworten:
Grundsätzlich gilt: Der Browser bezieht den Domainnamen in die HTTP-Anfrage ein, sodass der Webserver weiß, welche Domain angefordert wurde und entsprechend reagieren kann.
HTTP-Anfragen
So passiert Ihre typische HTTP-Anfrage:
Der Benutzer gibt im Formular eine URL an
http://host:port/path
.Der Browser extrahiert den Host- (Domain-) Teil der URL und übersetzt ihn bei Bedarf in eine IP-Adresse. Dies wird als Namensauflösung bezeichnet . Diese Übersetzung kann über DNS erfolgen, muss jedoch nicht (z. B.
hosts
umgeht die lokale Datei auf gängigen Betriebssystemen DNS).Der Browser öffnet eine TCP-Verbindung zu dem angegebenen Port oder verwendet standardmäßig Port 80 für diese IP-Adresse.
Der Browser sendet eine HTTP-Anfrage. Für HTTP / 1.1 sieht das so aus:
(Der
Host
Header ist Standard und in HTTP / 1.1 erforderlich. Er wurde in der HTTP / 1.0-Spezifikation nicht angegeben, wird jedoch von einigen Servern trotzdem unterstützt.)Von hier aus kann der Webserver anhand mehrerer Informationen entscheiden, wie die Antwort lauten soll. Beachten Sie, dass ein einzelner Webserver an mehrere IP-Adressen gebunden sein kann.
Host
Header des Browsers in der HTTP-Anforderung angegeben.Wie Sie anscheinend bemerkt haben, werden beim derzeit am häufigsten verwendeten Shared-Hosting-Setup mehrere Websites auf eine einzige Kombination aus IP-Adresse und Port gelegt, sodass nur
Host
zwischen Websites unterschieden werden muss.Dies wird in Apache-land als namensbasierter virtueller Host bezeichnet , während Nginx sie Servernamen in Serverblöcken nennt und IIS den virtuellen Server bevorzugt .
Was ist mit HTTPS?
HTTPS ist ein bisschen anders. Bis zum Aufbau der TCP-Verbindung ist alles identisch, danach muss jedoch ein verschlüsselter TLS-Tunnel aufgebaut werden. Ziel ist es, keine Informationen über die Anfrage zu verlieren.
Um zu überprüfen, ob der Server tatsächlich Eigentümer dieser Domäne ist, muss der Server ein von einem vertrauenswürdigen Dritten signiertes Zertifikat senden. Der Browser vergleicht dieses Zertifikat dann mit der von ihm angeforderten Domain.
Dies ist ein Problem. Woher weiß der Server, welches Zertifikat des Hosts (der Website) gesendet werden soll, wenn dies erforderlich ist, bevor die HTTP-Anforderung empfangen wird?
Traditionell wurde dies dadurch gelöst, dass für jede Website, die HTTPS benötigt, eine eigene IP-Adresse (oder ein eigener Port) eingerichtet wurde. Offensichtlich wird dies problematisch, wenn uns die IPv4-Adressen ausgehen.
Geben Sie SNI (Server Name Indication) ein. Der Browser übergibt jetzt den Hostnamen während der TLS-Verhandlungen, sodass der Server diese Informationen früh genug hat, um das richtige Zertifikat zu senden. Auf der Serverseite ist die Konfiguration der Konfiguration der virtuellen HTTP-Hosts sehr ähnlich.
Der Nachteil ist, dass der Hostname jetzt vor der Verschlüsselung als Klartext übergeben wird und im Wesentlichen Informationen verloren gehen. Dies wird normalerweise als akzeptabler Kompromiss angesehen, da der Hostname normalerweise ohnehin in einer DNS-Abfrage offengelegt wird.
Was ist, wenn Sie eine Site nur über die IP-Adresse anfordern?
Was der Server tut, wenn er nicht weiß, welchen bestimmten Host Sie angefordert haben, hängt von der Serverimplementierung und -konfiguration ab. In der Regel ist eine "Standard" -, "Catchall" - oder "Fallback" -Site angegeben, die Antworten auf alle Anforderungen liefert, die keinen Host explizit angeben.
Bei dieser Standardwebsite kann es sich um eine eigene unabhängige Site handeln (die häufig eine Fehlermeldung anzeigt), oder es kann sich um eine beliebige andere Site auf dem Server handeln, je nach den Vorlieben des Serveradministrators.
quelle
Ich habe diese Erklärung für Nicht-Tech-Leute.
Jack, Jill und Joe leben in einem Schlafsaal und haben keine Handys.
Im Telefonbuch werden sie alle mit derselben Nummer aufgelistet. (Ein Rekord)
Sie wählen die Nummer und jemand nimmt den Hörer ab. Sie sagen "Ich würde gerne mit Jill sprechen" und bringen sie in die Leitung.
Anstelle eines A-Eintrags (A-Telefonnummer / IP-Adresse) im Telefonbuch wird möglicherweise nur "Schlafsaal X" angezeigt. Sie müssen dann weiter nach der Nummer für Schlafsaal X suchen. Dies ist ein CNAME-Eintrag.
Wenn Jill nicht verfügbar ist, erhalten Sie möglicherweise
302 Jill besucht Peter, ruft ihn stattdessen an
400 Ich kann dich nicht verstehen.
451 Sie verletzen Ihre einstweilige Verfügung.
500 Unsere Telefonanlage ist ausgefallen.
quelle
Zunächst müssen Sie verstehen, dass es hier eine Reihe von unterschiedlichen Konzepten gibt.
Es gibt keine Eins-zu-Eins-Beziehung zwischen diesen Dingen. Ein Server kann mehrere IP-Adressen haben. Mehrere Hostnamen können auf eine IP-Adresse verweisen. Ein Hostname kann auf mehrere IP-Adressen verweisen. Mehrere Websites können unter demselben Hostnamen sein. Eine Website kann auf mehrere Hostnamen verteilt sein.
Früher (HTTP 1.0 und früher) musste jeder Hostname, mit dem der Server anders umgehen wollte, eine eigene IP-Adresse haben. Das war ziemlich verschwenderisch.
HTTP 1.1 fügte den
Host
"Header" als obligatorisches Feld in die HTTP-Anfrage ein (IIRC, das einige Anbieter zuvor als Erweiterung unterstützt hatten). Dadurch wurde dem Server mitgeteilt, welcher Hostname angefordert wurde, und er durfte daher unterschiedliche Inhalte für unterschiedliche Hostnamen auf demselben Server bereitstellen IP-Adresse: Die Unterstützung von HTTP 1.1 in Clients ist jetzt allgegenwärtig.Leider hat SSL (später TLS) eine Falte hinzugefügt. Das Einrichten einer SSL / TLS-Sitzung erfordert, dass der Server dem Client ein Zertifikat vorlegt, das den angeforderten Hostnamen abdeckt, die HTTP-Anforderung jedoch erst nach dem Einrichten der SSL / TLS-Sitzung eingeht.
Es ist möglich, dass ein Zertifikat mehrere Hostnamen über das
SubjectAltName
Feld oder die Verwendung von Platzhaltern imCommonName
Feld abdeckt . Dies ist jedoch mit administrativen Herausforderungen verbunden, insbesondere wenn sich die beteiligten Hostnamen unter Domänen mit unterschiedlichen Eigentümern befinden.Aus diesem Grund führte TLS die Erweiterung "Server Name Indication" (SNI) ein. Mit dieser Erweiterung sendet der Client den angeforderten Hostnamen während des TLS-Handshake-Vorgangs an den Server. Der Server kann dann das entsprechende Zertifikat vorlegen. Obwohl aktuelle Versionen aller wichtigen SSL / TLS-Implementierungen SNI unterstützen, hat es leider lange gedauert, bis ältere Versionen nicht mehr verwendet wurden.
quelle
Die Antwort ist etwas komplizierter als einige der Antworten es sich vorgestellt haben. Wenn Sie eine DNS-Suche durchführen, MÜSSEN Sie eine IP-Adresse erhalten (
A
Aufzeichnung für IPv4,AAAA
für IPv6). Sie müssen in der Lage sein, einen Socket über TCP / IP zu öffnen, um zu kommunizieren, oder das Ganze schlägt fehl. Diese Adresse kann einen Server oder einen Lastenausgleich darstellen. Es könnte sogar einen Proxy darstellen. Befindet sich der Host beispielsweise hinter CloudFlare, handelt es sich bei der erhaltenen Adresse um einen CloudFlare-Server. Der reale Server ist woanders. Auf diese Weise kann der Host Probleme wie Denial-of-Service-Angriffe vermeiden.Virtuelles Hosting ist das, wonach Sie fragen (einige der anderen Fragen haben dies angesprochen, aber nicht im Detail). Virtuelles Hosting nimmt die Webanforderung entgegen und ermittelt anhand des Hostnamens (dh domain.com), welche Website bereitgestellt werden soll. Auf dem Apache HTTP-Webserver hätten Sie also eine solche Konfiguration
Dies ist zum Beispiel vereinfacht. Wir fordern Apache daher auf, Port 80 einer IP-Adresse abzuhören (in modernen virtuellen Maschinen, auf denen die IP-Adresse Ihrer Maschine gehostet wird, kann sich diese von der Live-IP-Adresse unterscheiden). Wir sagen dann, dass dies die
domain.com
Website ist und in welchem Verzeichnis sich diese Website befindet. Wir können diesen Block dann immer wieder wiederholen, um Apache anzuweisen, mit verschiedenen Websites umzugehen. Jeder Webserver unterstützt diesen Systemtyp.Eine andere Möglichkeit, dies zu handhaben, besteht darin, den Webserver anzuweisen, den gesamten Webdatenverkehr an ein einziges Programmierskript (z. B. PHP, ASP.NET usw.) weiterzuleiten, und dann mit diesem einzigen Skript zu bestimmen, welche Website und Seite angezeigt werden soll.
quelle
Mithilfe von DNS können Sie einer einzelnen IP-Adresse beliebig viele Namen zuweisen (in Ihrer Hosts-Datei können Sie beispielsweise jeden Namen einfach durch Leerzeichen trennen). Mit einem DNS-Server können Sie auch einem Namen mehrere IP-Adressen zuweisen . Es ist nicht auf eine Eins-zu-Eins-Beziehung beschränkt.
Ein Web - Server weiß , welche Seite durch dienen die Prüfung der angeforderten URL. Es wird geprüft, welche Domain angefordert wurde, welcher Port angefordert wurde und welches Protokoll verwendet wurde. Dies hat nichts mit DNS zu tun und wird vom HTTP-Protokoll behandelt.
quelle
Der Webserver hat das Konzept des Host-Containers ( hier ist zum Beispiel die Dokumentation für Tomcat). Für dieselbe Box / IP-Adresse können mehrere Host-Container konfiguriert werden, die mehrere Domänen bedienen. Container verfügen über unabhängige Arbeitsverzeichnisse, Authentifizierungsbereiche, Protokollverzeichnisse und dergleichen.
Der Server findet den relevanten Container für den neuen Anforderungskauf. Der Name der Domäne ist Teil dieser HTTP-Anforderung.
Völlig verschiedene Webserver-Instanzen können dieselbe IP-Adresse verwenden, wenn sie an verschiedenen Ports ausgeführt werden. Dies wird hauptsächlich in verschiedenen Entwicklungs- und Testumgebungen verwendet, in denen Domänennamen möglicherweise nicht verfügbar sind, da der Produktionsserver nicht auf einem beliebigen Port ausgeführt werden kann.
Selbst wenn die streng eindeutige IP-Adresse für eine Website erforderlich ist, verfügt eine Server-Box häufig über mehrere Netzwerkadapter und ist daher für die Verwendung mehrerer IP-Adressen konfiguriert.
quelle
Die IP-Adresse Ihres Servers kann gleichzeitig viele verschiedene Domänennamen enthalten.
Wenn Sie auf die Website zugreifen, sendet Ihr Browser die HTTP-Anfrage mit dem darin enthaltenen Domainnamen, und der Server kann feststellen, welche Website-Daten er Ihnen damals senden soll.
Es heißt die virtuellen Hosts, so einfach ist das :)
Schauen Sie hier für weitere Informationen über DNS und virtuelle Hosts.
quelle