17Aug

Haben Webserver nur jeweils eine Website?

Wenn Sie zum ersten Mal lernen, wie Domainnamen, IP-Adressen, Webserver und Websites zusammenpassen und zusammenarbeiten, kann es manchmal etwas verwirrend oder überwältigend sein. Wie ist alles eingerichtet, um so reibungslos zu arbeiten? Der heutige SuperUser Q & A Beitrag hat die Antworten auf die Fragen eines neugierigen Lesers.

Die heutige Frage &Die Antwortsitzung kommt dank SuperUser, einer Unterteilung von Stack Exchange, einer Community-gesteuerten Gruppierung von Q & A-Websites, zu uns.

Foto mit freundlicher Genehmigung von Rosmarie Voegtli( Flickr).

Die Frage

SuperUser reader user3407319 möchte wissen, ob Webserver nur jeweils eine Website haben:

Basierend auf dem, was ich über DNS verstehe und einen Domainnamen mit der IP-Adresse des Webservers verbinde, auf dem eine Website gespeichert ist, heißt das jeweilsWebserver kann nur eine Website halten? Wenn Webserver mehr als eine Website haben, wie wird dann alles gelöst, damit ich ohne Probleme oder Verwechslungen auf die gewünschte Website zugreifen kann?

Haben Web-Server nur jeweils eine Website oder halten sie mehr?

Der Antwort-

-SuperUser-Mitwirkender Bob hat die Antwort für uns:

Grundsätzlich enthält der Browser den Domänennamen in der HTTP-Anforderung, so dass der Webserver weiß, welche Domäne angefordert wurde und entsprechend reagieren kann.

HTTP-Anfragen

So geschieht Ihre typische HTTP-Anfrage:

1. Der Benutzer stellt eine URL in der Form http: // host: port / path zur Verfügung.

2. Der Browser extrahiert den Host-( Domänen-) 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 jedoch nicht( z. B. die lokale Hostdatei auf gängigen Betriebssystemen umgeht DNS).

3. Der Browser öffnet eine TCP-Verbindung zum angegebenen Port oder standardmäßig Port 80 für diese IP-Adresse.

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

Der Host-Header ist Standard und wird in HTTP / 1.1 benötigt. Es wurde nicht in der HTTP / 1.0-Spezifikation angegeben, aber einige Server unterstützen es trotzdem.

Von hier aus hat der Webserver mehrere Informationen, anhand derer er entscheiden kann, wie die Antwort lauten 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 aber selten verwendet und manchmal zum Blockieren / Filtern)
  • Der angeforderte Port vom TCP-Socket
  • Der angeforderte Hostname, wieangegeben in der Host-Header durch den Browser in der HTTP-Anfrage
  • Der angeforderte Pfad
  • Alle anderen Header( Cookies, etc.)

Wie Sie bemerkt haben, setzt die häufigste gemeinsame Hosting-Setup in diesen Tagen mehrere Websites auf einer einzigen IP-Adresse: Port-Kombination, so dass nur der Host zwischen den Websites unterscheiden kann.

Dies ist in Apache-Land als Name-basierter virtueller Host bekannt, während Nginx sie Servernamen in Serverblöcken nennt, und IIS bevorzugt Virtual Server.

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 Webserver tatsächlich diese Domäne besitzt, muss der Webserver ein Zertifikat senden, das von einer vertrauenswürdigen dritten Partei signiert wurde. Der Browser vergleicht dann dieses Zertifikat mit der angeforderten Domäne.

Dies ist ein Problem. Wie weiß der Webserver, welches Zertifikat des Hosts / der Website gesendet werden muss, wenn dies erforderlich ist, bevor die HTTP-Anforderung empfangen wird?

Traditionell wurde dies durch eine dedizierte IP-Adresse( oder einen dedizierten Port) für jede Website, die HTTPS benötigt, gelöst. Offensichtlich ist dies problematisch geworden, da uns die IPv4-Adressen ausgehen.

Geben Sie SNI( Server Name Indication) ein. Der Browser übergibt den Hostnamen nun 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 sehr ähnlich der Konfiguration der virtuellen HTTP-Hosts.

Der Nachteil ist, dass der Host-Name jetzt als Klartext vor der Verschlüsselung übergeben wird und im Wesentlichen Informationen verloren geht. Dies wird normalerweise als akzeptabler Kompromiss betrachtet, obwohl der Host-Name normalerweise in einer DNS-Abfrage angezeigt wird.

Was ist, wenn Sie eine Website nur nach IP-Adresse anfordern?

Was der Webserver tut, wenn er nicht weiß, welcher bestimmte Host angefordert wurde, hängt von der Implementierung und Konfiguration des Webservers ab. In der Regel ist eine "Standard" -, "Catch-all" - oder "Fallback" -Website angegeben, die Antworten auf alle Anfragen bereitstellt, die keinen Host explizit angeben.

Diese Standard-Website kann eine eigene unabhängige Website sein( oft mit einer Fehlermeldung), oder sie kann eine der anderen Websites auf dem Webserver sein, abhängig von den Einstellungen des Web-Server-Administrators.

Haben Sie etwas zur Erklärung hinzuzufügen? Ton in den Kommentaren ab. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange Benutzern lesen? Sehen Sie sich den vollständigen Diskussionsfaden hier an.