Wird auf den Servern nur eine Website gespeichert?

Wird auf den Servern nur eine Website gespeichert?

So wie ich es verstehe, verknüpft das DNS den Domänennamen mit der IP-Adresse des Servers, auf dem die Website gespeichert ist. Bedeutet das, dass jeder Server nur eine Website enthalten kann? Wenn das nicht der Fall ist, woher weiß ich dann durch Aufrufen der IP-Adresse des Servers, welche Website ich möchte, wenn sich auf demselben Server mehrere befinden?

Antwort1

Grundsätzlich gilt: Der Browser fügt den Domänennamen in die HTTP-Anfrage ein, sodass der Webserver weiß, welche Domäne angefordert wurde, und entsprechend antworten kann.


HTTP-Anfragen

So läuft eine typische HTTP-Anfrage ab:

  1. Der Benutzer gibt eine URL in der Form ein http://host:port/path.

  2. Der Browser extrahiert den Host-Teil (Domäne) der URL und übersetzt ihn bei Bedarf in eine IP-Adresse. Dieser Vorgang wird alsNamensauflösung. Diese Übersetzung kann über DNS erfolgen, muss es aber nicht (beispielsweise hostsumgeht die lokale Datei auf gängigen Betriebssystemen DNS).

  3. Der Browser öffnet eine TCP-Verbindung zum angegebenen Port oder verwendet standardmäßig Port 80 dieser IP-Adresse.

  4. Der Browser sendet eine HTTP-Anfrage. Für HTTP/1.1 sieht das so aus:

    GET /path HTTP/1.1
    Host: example.com
    

    (Der HostHeader ist Standard und in HTTP/1.1 erforderlich. Er wurde in der HTTP/1.0-Spezifikation nicht angegeben, aber einige Server unterstützen ihn trotzdem.)

Von hier aus verfügt der Webserver über mehrere Informationen, anhand derer er entscheiden kann, wie die Antwort lauten soll. Beachten Sie, dass ein einzelner Webserver an mehrere IP-Adressen gebunden sein kann.

  • Die angeforderte IP-Adresse vom TCP-Socket
    • Die IP-Adresse des Clients ist ebenfalls verfügbar, wird jedoch selten verwendet - manchmal zum Blockieren/Filtern
  • Der angeforderte Port vom TCP-Socket
  • Der angeforderte Hostname, wie er Hostvom Browser im Header der HTTP-Anforderung angegeben wurde.
  • Der angeforderte Pfad
  • Alle anderen Header (Cookies usw.)

Wie Sie anscheinend bemerkt haben, werden bei den heutzutage gängigsten Shared-Hosting-Konfigurationen mehrere Websites auf einer einzigen IP-Adress-Port-Kombination platziert, sodass nur noch Hostdie Unterscheidung zwischen den Websites nötig ist.

Dies nennt manNamensbasierter virtueller Hostim Apache-Land, während Nginx sie nenntServernamen in Serverblöckenund IIS bevorzugtVirtueller Server.


Was ist mit HTTPS?

Bei HTTPS ist es etwas 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 preiszugeben.

Um zu überprüfen, ob der Server tatsächlich Eigentümer dieser Domain ist, muss der Server ein von einer vertrauenswürdigen dritten Partei signiertes Zertifikat senden. Der Browser vergleicht dieses Zertifikat dann mit der angeforderten Domain.

Dies stellt ein Problem dar. Woher weiß der Server, welches Zertifikat des Hosts (der Website) gesendet werden soll, wenn dies vor dem Empfang der HTTP-Anforderung erfolgen muss?

Traditionell wurde dies dadurch gelöst, dass für jede Website, die HTTPS erfordert, eine dedizierte IP-Adresse (oder ein dedizierter Port) eingerichtet wurde. Dies wird offensichtlich problematisch, wenn die IPv4-Adressen knapp werden.

EingebenSNI(Server Name Indication). Der Browser übergibt nun den Hostnamen während der TLS-Verhandlungen, sodass der Server diese Informationen früh genug erhält, um das richtige Zertifikat zu senden. Auf der Serverseite ist die Konfiguration sehr ähnlich der Konfiguration virtueller HTTP-Hosts.

Der Nachteil besteht darin, dass der Hostname nun vor der Verschlüsselung als Klartext weitergegeben wird und es sich im Wesentlichen um durchgesickerte Informationen handelt. Dies wird normalerweise als akzeptabler Kompromiss angesehen, wenn man bedenkt, dass der Hostname normalerweise ohnehin in einer DNS-Abfrage offengelegt wird.


Was passiert, wenn Sie eine Site nur über die IP-Adresse anfordern?

Was der Server tut, wenn er nicht weiß, welchen konkreten Host Sie angefordert haben, hängt von der Serverimplementierung und -konfiguration ab. Normalerweise ist eine „Standard-“, „Catchall“- oder „Fallback“-Site angegeben, die Antworten auf alle Anfragen liefert, für die kein expliziter Host angegeben ist.

Diese Standardsite kann eine eigene, unabhängige Site sein (die häufig eine Fehlermeldung anzeigt) oder eine der anderen Sites auf dem Server, je nach Präferenz des Serveradministrators.

Antwort2

Für Laien habe ich folgende Erklärung.

Jack, Jill und Joe leben in einem Wohnheim und haben keine Handys.

Im Telefonbuch sind sie alle mit der gleichen Nummer eingetragen. (A-Eintrag)

Sie wählen die Nummer und jemand nimmt den Hörer ab. Sie sagen: „Ich möchte mit Jill sprechen“, und schon ist sie an der Leitung.

Statt eines A-Records (A-Telefonnummer/IP-Adresse) steht im Telefonbuch beispielsweise nur "Wohnheim X", dann müssen Sie weiter nach der Nummer für Wohnheim X suchen. Dies ist ein CNAME-Record.

Wenn Jill nicht verfügbar ist, erhalten Sie möglicherweise

  • 404 Jill ist nicht hier
  • 410 Jill ist tot.
  • 301 Jill ist bei Peter eingezogen
  • 302 Jill besucht Peter, ruf ihn stattdessen an

  • 400 Ich kann dich nicht verstehen.

  • 401 Wer sind Sie? Wie lautet das Passwort? oder Wir erlauben nach 22 Uhr keine männlichen Anrufer
  • 402 Zahlung erforderlich (Sind Sie sicher, dass Jill ihr richtiger Name ist ;-))
  • 403 Nein, das ist nicht das richtige Passwort.
  • 418 Jill ist eine Teekanne :-)
  • 429 Jill kann keine weiteren Anrufe entgegennehmen.
  • 451 Sie verstoßen gegen Ihre einstweilige Verfügung.

  • 500 Unser Telefonsystem ist ausgefallen.

Antwort3

So wie ich es verstehe, verknüpft das DNS den Domänennamen mit der IP-Adresse des Servers, auf dem die Website gespeichert ist. Bedeutet das, dass jeder Server nur eine Website enthalten kann?

Zunächst müssen Sie verstehen, dass es hier eine Reihe unterschiedlicher Konzepte gibt.

  • Website, eine Gruppe von Webseiten, die ein zusammenhängendes Ganzes bilden.
  • IP-Adresse, eine numerische Adresse (32 Bit für IPv4, 128 Bit für IPv6), die vom Internetprotokoll als Quelle oder Ziel für den Datenverkehr verwendet wird.
  • Server, eine Maschine, deren Aufgabe es ist, Anfragen von Clients zu bearbeiten.
  • Hostname, ein Name, der zur Identifizierung einer Maschine im DNS verwendet wird (z. B. „www.example.com“ oder „en.wikipedia.org“)

Zwischen diesen Dingen besteht keine Eins-zu-eins-Beziehung. 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 denselben Hostnamen haben. Eine Website kann auf mehrere Hostnamen verteilt sein.

Wenn dies nicht der Fall ist, woher weiß der Aufruf der IP-Adresse des Servers, welche Website ich möchte, wenn sich auf demselben Server viele davon befinden?

Früher (HTTP 1.0 und früher) musste jeder Hostname, den der Server anders behandeln wollte, eine eigene IP-Adresse haben. Das war ziemlich verschwenderisch.

HTTP 1.1 fügte den Host„Header“ als Pflichtfeld in der HTTP-Anforderung hinzu (soweit ich mich erinnere, hatten einige Anbieter dies zuvor als Erweiterung unterstützt). Dadurch wurde dem Server mitgeteilt, welcher Hostname angefordert wurde, und er konnte daher für verschiedene Hostnamen unter derselben IP-Adresse unterschiedliche Inhalte bereitstellen. Die Unterstützung für HTTP 1.1 in Clients ist mittlerweile allgegenwärtig.

Leider hat SSL (später TLS) eine Schwierigkeit mit sich gebracht. Zum Aufbau einer SSL/TLS-Sitzung muss der Server dem Client ein Zertifikat vorlegen, das den angeforderten Hostnamen abdeckt, die HTTP-Anforderung kommt jedoch erst an, nachdem die SSL/TLS-Sitzung aufgebaut wurde.

Es ist möglich, mit einem Zertifikat mehrere Hostnamen abzudecken, indem das SubjectAltNameFeld oder Platzhalter im CommonNameFeld verwendet werden. Dies stellt jedoch eine administrative Herausforderung dar, insbesondere wenn die betreffenden Hostnamen zu Domänen mit unterschiedlichen Eigentümern gehören.

Daher führte TLS die Erweiterung „Server Name Indication“ (SNI) ein. Mit dieser Erweiterung sendet der Client während des TLS-Handshake-Verfahrens den angeforderten Hostnamen 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 außer Gebrauch gerieten.

Antwort4

Mit DNS können Sie einer einzelnen IP-Adresse beliebig viele Namen zuweisen (in IhremHosts-DateiSie können die einzelnen Namen einfach durch Leerzeichen trennen). Mithilfe eines DNS-Servers können Sie auchZuweisen mehrerer IP-Adressen zu einem einzigen NamenEs ist nicht auf eine Eins-zu-eins-Beziehung beschränkt.

Ein Webserver weiß, welche Site er bedienen muss, indem erPrüfungdie angeforderte URL. Dabei 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 gehandhabt.

verwandte Informationen