Tun Web-Servern, Die Nur Eine Webseite Jeden?

0
284

Wenn Sie zuerst beginnen, zu lernen, wie domain-Namen, IP-Adressen, web-Servern und websites, die alle passen und arbeiten zusammen, es kann ein wenig verwirrend oder überwältigend manchmal. Wie ist es eingerichtet, um die Arbeit so reibungslos? Heute ist die SuperUser-Q&A post hat die Antworten auf neugierige Leser Fragen.

Die heutige Frage & Antwort-Sitzung kommt zu uns mit freundlicher Genehmigung von SuperUser—eine Unterteilung von Stack Exchange, eine von der community getriebene Gruppierung der Q&A-Websites.

Foto mit freundlicher Genehmigung von Rosmarie Voegtli (Flickr).

Die Frage

SuperUser-reader user3407319 will wissen, ob web-Servern, die nur eine Webseite jedes:

Basierend auf dem, was ich verstehe, über DNS und die Verknüpfung eines domain-namens mit der IP-Adresse des web-server-eine website gespeichert ist, bedeutet das, dass jeder web-server kann jeweils nur eine website? Wenn der Webserver mehr als eine website, wie kann dann alles aufgelöst, so dass ich den Zugriff auf die website, die ich möchte, ohne irgendwelche Probleme oder Verwechslungen?

Tun web-Server nur halten, eine website, oder halten Sie mehr?

Die Antwort

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

Im Grunde genommen, den browser schließt die domain-Namen in der HTTP-Anfrage, damit der Webserver weiß, welche domain angefragt wurde und kann entsprechend reagieren.

HTTP-Requests

Hier ist, wie Ihr typischer HTTP-request passiert:

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

2. Der browser extrahiert den host (domain -) Teil der URL und übersetzt es in eine IP-Adresse (wenn nötig) in einem Prozess, bekannt als der Namensauflösung. Diese übersetzung erfolgt über DNS, aber nicht müssen (z.B. die lokale hosts-Datei auf gängigen Betriebssystemen umgeht, DNS).

3. Der browser öffnet eine TCP-Verbindung zum angegebenen port oder standardmäßig der port 80 auf die IP-Adresse.

4. Der browser sendet eine HTTP-Anfrage. Für HTTP/1.1, es sieht wie folgt aus:

Der host-header ist standard und Bedarf in HTTP/1.1. Es wurde nicht angegeben in der HTTP/1.0-Spezifikation, aber einige Server unterstützen es trotzdem.

Von hier aus, der Webserver hat mehrere Stücke von Informationen, die Sie verwenden können, um zu entscheiden, was die Antwort sein sollte. Beachten Sie, dass es möglich ist, für eine einzelne web-server gebunden werden mehrere IP-Adressen.

  • Die angeforderte IP-Adresse aus dem TCP-socket (IP-Adresse des client ist auch verfügbar, aber dies wird selten verwendet, und manchmal für die Sperrung/Filterung)
  • Die angeforderte port vom TCP-socket
  • Der angefragte host-Namen, wie angegeben, in die der host-header durch den browser im HTTP-request
  • Der angeforderte Pfad
  • Alle anderen Header (cookies, etc.)

Wie Sie bemerkt haben scheint, der am meisten common shared-hosting-setup in diesen Tagen stellt mehrere websites über eine einzige IP-Adresse:port-Kombination, so dass nur der host zu unterscheiden zwischen websites.

Dies ist bekannt als ein Name-Based Virtual Host in der Apache-land, während Nginx nennt Sie den Server-Namen im Server-Blöcke, und IIS bevorzugt Virtuellen Server.

Was ist mit HTTPS?

HTTPS ist ein bisschen anders. Alles ist identisch bis auf die Einrichtung der TCP-Verbindung, aber nach, dass eine verschlüsselte TLS-tunnel eingerichtet werden muss. Das Ziel ist nicht undicht, keine Informationen über die Anfrage.

Um zu überprüfen, dass die web-server tatsächlich der Besitzer dieser domain, die web-server schicken müssen, ein Zertifikat, signiert von einer vertrauenswürdigen Dritten Partei. Der browser wird dann vergleichen Sie dieses Zertifikat mit der domain verlangt.

Dies stellt ein problem. Wie funktioniert die web-server wissen, welche host – /website-Zertifikat zu senden, wenn es braucht, um dies zu tun, bevor die HTTP-Anfrage empfangen wird?

Traditionell wurde gelöst durch eine dedizierte IP-Adresse (oder port) für jede website erfordert HTTPS. Dies hat natürlich problematisch werden, da wir nur mit IPv4-Adressen.

Geben Sie SNI (Server Name Indication). Der browser übergibt nun den host-Namen während der TLS-Verhandlungen, so dass der Webserver diese information frühzeitig genug, um senden Sie das richtige Zertifikat. Auf dem web-server-Seite-Konfiguration ist sehr ähnlich wie der virtuelle HTTP-hosts konfiguriert sind.

Der Nachteil ist der host-name ist nun vergangen, als Klartext vor der Verschlüsselung, und ist im wesentlichen durchgesickerten Informationen. Dies ist in der Regel als ein akzeptabler Kompromiss, aber in Anbetracht der host-name ist normalerweise ausgesetzt in einer DNS-Abfrage sowieso.

Was ist, Wenn Sie das Anfordern einer Website durch die IP-Adresse Nur?

Was der web-server tut, wenn Sie nicht wissen, welche spezifischen host, den Sie ersuchte, hängt von der Webserver-Implementierung und-Konfiguration. In der Regel gibt es eine “default”, “catch-all”, oder “fall-back” – website angegeben, dass Antworten auf Anfragen, die nicht explizit angeben, einen host.

Diese Standard-website kann über eine eigene unabhängige website (oft zeigt eine Fehlermeldung), oder es könnte einer der anderen websites, die auf dem web-server, abhängig von den Einstellungen des web-server-admin.

Etwas hinzufügen zu der Erklärung? Sound off in den Kommentaren. Wollen Sie mehr Lesen Sie Antworten von anderen tech-savvy-Stack Exchange-Benutzer? Schauen Sie sich die vollständige Diskussion thread hier.