Halten Webserver jeweils nur eine Website?
Wenn Sie zum ersten Mal erfahren, wie Domänennamen, IP-Adressen, Webserver und Websites zusammenpassen, funktioniert dies manchmal etwas verwirrend oder überwältigend. Wie kann alles so reibungslos funktionieren? Der heutige Q & A-Beitrag von SuperUser enthält Antworten auf die Fragen eines neugierigen Lesers.
Die heutige Question & Answer-Sitzung wird dank SuperUser zur Verfügung gestellt - einer Unterteilung von Stack Exchange, einer Community-basierten Gruppierung von Q & A-Websites.
Foto mit freundlicher Genehmigung von Rosmarie Voegtli (Flickr).
Die Frage
Der SuperUser-Leser user3407319 möchte wissen, ob Webserver jeweils nur eine Website enthalten:
Wenn ich davon verstehe, was ich unter DNS verstehe und einen Domänennamen mit der IP-Adresse des Webservers verlinke, auf dem eine Website gespeichert ist, bedeutet das, dass jeder Webserver nur eine Website enthalten kann? Wenn Webserver mehr als eine Website enthalten, wie wird dies gelöst, sodass ich auf die gewünschte Website ohne Probleme oder Verwechslungen zugreifen kann?
Haben Webserver jeweils nur eine Website oder mehr Websites??
Die Antwort
SuperUser-Mitwirkender Bob hat die Antwort für uns:
Grundsätzlich enthält der Browser den Domänennamen in der HTTP-Anforderung, sodass der Webserver weiß, welche Domäne angefordert wurde, und entsprechend reagieren kann.
HTTP-Anfragen
So läuft Ihre typische HTTP-Anfrage ab:
1. Der Benutzer gibt eine URL in der Form http: // host: port / path an.
2. Der Browser extrahiert den Host (Domain) -Teil der URL und übersetzt ihn (falls erforderlich) in eine IP-Adresse, die als Namensauflösung bezeichnet wird. Diese Übersetzung kann über DNS erfolgen, muss dies jedoch nicht (z. B. umgeht die Datei "local hosts" unter normalen Betriebssystemen das DNS)..
3. Der Browser stellt eine TCP-Verbindung zum angegebenen Port her oder standardmäßig Port 80 für diese IP-Adresse.
4. Der Browser sendet eine HTTP-Anfrage. Für HTTP / 1.1 sieht das so aus:
Der Hostheader ist Standard und in HTTP / 1.1 erforderlich. Es wurde nicht in der HTTP / 1.0-Spezifikation angegeben, aber einige Server unterstützen es trotzdem.
Von hier aus verfügt der Webserver über mehrere Informationen, über die er entscheiden kann, wie die Antwort aussehen soll. Beachten Sie, dass es möglich ist, dass ein einzelner Webserver an mehrere IP-Adressen gebunden ist.
- Die angeforderte IP-Adresse vom TCP-Socket (die IP-Adresse des Clients ist ebenfalls verfügbar, wird jedoch selten verwendet und manchmal für das Blockieren / Filtern verwendet)
- Der angeforderte Port vom TCP-Socket
- Der angeforderte Hostname, wie vom Browser in der HTTP-Anforderung im Hostheader angegeben
- Der angeforderte Pfad
- Andere Kopfzeilen (Cookies usw.)
Wie Sie anscheinend bemerkt haben, ordnet das heutzutage häufigste Shared-Hosting-Setup mehrere Websites unter einer einzigen IP-Adresse-Port-Kombination an, sodass nur der Host zwischen Websites unterscheiden kann.
Dieser Name wird in Apache-land als namenbasierter 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 ein verschlüsselter TLS-Tunnel eingerichtet werden. Das Ziel ist, keine Informationen über die Anforderung zu verlieren.
Um zu überprüfen, ob der Webserver tatsächlich über diese Domäne verfügt, muss der Webserver ein von einem vertrauenswürdigen Drittanbieter signiertes Zertifikat senden. Der Browser vergleicht dann dieses Zertifikat mit der angeforderten Domäne.
Das ist problematisch. Woher weiß der Webserver, welches Zertifikat der Host / Website gesendet werden muss, wenn dies vor dem Empfang der HTTP-Anforderung erforderlich ist?
Dies wurde traditionell dadurch gelöst, dass für jede Website, die HTTPS benötigt, eine dedizierte IP-Adresse (oder ein eigener Port) zur Verfügung steht. Offensichtlich ist dies problematisch geworden, da uns die IPv4-Adressen ausgehen.
Geben Sie SNI (Server Name Indication) ein. Der Browser übergibt nun den Hostnamen während der TLS-Verhandlungen, sodass der Webserver diese Informationen früh genug erhält, um das richtige Zertifikat zu senden. Auf der Webserver-Seite ist die Konfiguration der Konfiguration von virtuellen HTTP-Hosts sehr ähnlich.
Der Nachteil ist, dass der Hostname jetzt vor der Verschlüsselung als Klartext übergeben wird und im Wesentlichen Informationen durchgesickert ist. Dies wird normalerweise als akzeptabler Kompromiss betrachtet, obwohl der Hostname normalerweise in einer DNS-Abfrage angezeigt wird.
Was ist, wenn Sie eine Website nur über die IP-Adresse anfordern??
Was der Webserver tut, wenn er nicht weiß, welchen bestimmten Host Sie angefordert haben, hängt von der Implementierung und Konfiguration des Webservers ab. In der Regel wird eine "Standard" -, "Catch-All" - oder "Fall-Back" - Website angegeben, die Antworten auf alle Anforderungen bereitstellt, die keinen Host explizit angeben.
Diese Standardwebsite kann eine eigene unabhängige Website sein (häufig wird eine Fehlermeldung angezeigt), oder es kann sich auch um eine der anderen Websites auf dem Webserver handeln, abhängig von den Einstellungen des Webservers admin.
Haben Sie der Erklärung etwas hinzuzufügen? Sound off in den Kommentaren. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange-Benutzern lesen? Hier geht es zum vollständigen Diskussionsthread.