Wie haben Sie eine IP-Adresse und viele Websites?


27

Wie kann ich es haben, wo ich eine IP-Adresse habe, die sich im Internet befindet, aber viele Web-Namen? Zum Beispiel, wenn ein Hosting-Unternehmen eine gemeinsame IP-Adresse hat, ich aber unbegrenzt viele Domain-Namen erhalte (zusammen mit allen anderen auf dieser Box).

Ich habe eine Box im Internet, möchte aber auf eine andere Maschine verweisen, auf der sich eine andere Website befindet, wenn jemand das andere www eingibt ... (es steht direkt daneben in einer anderen Box). Ist das alles Unterdomäne? Vielen Dank.

Ich bin die Hosting-Firma

Antworten:


36

Es ist Teil des HTTP 1.1-Protokolls.

Insbesondere enthält das HTTP 1.1-Protokoll einen Header namens "host:", der angibt, auf welche Website auf einem bestimmten Server der Client zugreifen möchte.

Wenn snoopy.net und woodstock.org 192.0.32.10 gemeinsam nutzen und Ihr Browser versucht, Inhalte von http://snoopy.net/doghouse der spezifischen http-Anfrage abzurufen, würde dies folgendermaßen aussehen:

GET /doghouse HTTP/1.1
Host: snoopy.net

Wenn die gewünschte URL http://woodstock.org/seedsdie Anfrage ist, würde sie so aussehen

GET /seeds HTTP/1.1
Host: woodstock.org

In beiden Fällen würde sich zwischen Ihrem Computer und Port 80 des Servers ein TCP-Socket befinden. Der Server würde basierend auf dem Host-Header wissen, ob Inhalte von /var/www/snoopy.net oder /var/www/woodstock.org/ abgerufen werden.

Es gäbe andere Header für Cookies und andere Dinge wie Browsertyp und zulässigen Inhalt, aber der "Host" -Header ist speziell das, was dem Webserver ermöglicht, zu wissen, welche virtuelle Website gewünscht wird.

Im RFC2616 steckt noch mehr .

Dies ist auch der Grund, warum https-Sites * eine eigene IP-Adresse haben müssen - der Austausch des SSL-Schlüssels und die Überprüfung des Zertifikats erfolgen vor der http-Transaktion, sodass der http-Server das Zertifikat für "woodstock" nicht herausgeben kann. org "oder" snoopy.net ", wenn eine https-Verbindung auf Port 443 von 192.0.32.10 empfangen wird.


bearbeiten

** in den Kommentaren Grawity weist darauf hin , dass es Erweiterungen SSL in der TLS - Spezifikation sind , dass der Server ermöglichen , die Web - Site der Benutzer als Versuch , den Zugriff, und dass die meisten modernen Web - Browser haben diese Erweiterungen wissen, so muss ein bisschen zu ist stark.


Damit der Webserver diesen Header sieht und ihn auf die richtige Website verschiebt? Können Sie so mehrere Websites auf demselben Port haben?
Johnny

1
Genau dafür ist es da. Ein "Server" wie Apache hat den Port 80 von 192.0.32.10 mit vielen DNS-Einträgen, von denen jeder eine "Site" ist. Der Server weiß anhand des "Host" -Headers, was die gewünschte Site ist.
Chris

3
Das DNS ist so konfiguriert, dass beide Namen auf dieselbe IP-Adresse verweisen, auf der der Server empfangsbereit ist. Der Server empfängt Verbindungen über dieselbe IP und denselben Port. Wenn der Browser jedoch die Meldung "Ich möchte SiteA.com" ausgibt, muss er einen anderen Inhalt ausgeben, als wenn er nach SiteB.com gefragt wird.
Massimo

2
Um es noch klarer zu machen: Die beiden Standorte unterscheiden sich auf der Ebene des HTTP-Protokolls und nicht auf der TCP / IP-Ebene. Es ist wie wenn jemand in Ihrem Büro anruft und fragt, ob er mit John oder Susan sprechen möchte: Die Telefonnummer ist dieselbe, kann aber von mehreren Personen verwendet werden.
Massimo

1
Die meisten Webbrowser und Server unterstützen jetzt die TLS-Servername-Angabe, wodurch die Anforderung einer IP-Adresse pro Website entfällt.
Grawity

12

Es gibt etwas, das alle modernen Browser zusammen mit der Anfrage senden, den "Host:" - Header.

Die tatsächliche Anfrage, die Firefox für diese Seite sendet, lautet:

Host: superuser.com
User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 6.0; en-US; rv: 1.9.1.7) Gecko / 20091221 Firefox / 3.5.7 (.NET CLR 3.5.30729)
Akzeptieren Sie: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8
Accept-Language: en-us, en; q = 0,5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
Keep-Alive: 300
Verbindung: Keep-Alive

Wie Sie sehen können, die

Host: superuser.com
Bit identifiziert die betreffende Website.

In IIS und Apache können Sie virtuelle Websites konfigurieren, die nur Anforderungen von einer bestimmten IP / Host-Kombination akzeptieren.

In Bezug auf Ihr spezielles Problem müssen Sie nachlesen, wie Ihr spezielles Hosting-Unternehmen die Konfiguration anfordern soll.


Dies sollte auch erwähnen, dass Sie mehrere DNS-Einträge für Ihre IP-Adresse festlegen müssen.
Tadeusz A. Kadłubowski

@Tadeusz: Es ist möglich, Platzhalter-DNS-Einträge einzurichten, dies ist also nicht unbedingt erforderlich.
John Gietzen

6

Die Technik zum Hosten von mehr als einer Domain / Subdomain auf einer einzelnen IP-Adresse / einem Host wird als virtuelle Hosts bezeichnet . Die http get-Anforderung enthält den Domänennamen, für den die Anforderungen bestimmt sind, sodass der Webserver die Anforderung mit einer bestimmten virtuellen Domäne abgleichen kann.

Wenn Sie intern mehrere physische Hosts mit nur einer externen IP haben, sollten Sie Reverse Proxy einrichten , um die Anforderungen an die richtige Maschine / interne IP-Adresse weiterzuleiten.


oder du könntest natürlich auch andere http server an verschiedenen ports betreiben.
Chopper3

Ja, das ist auch eine Option. Die Leute sind es jedoch nicht gewohnt, einen Port anzugeben, wenn sie eine URL eingeben, daher würde ich diese Lösung auf einige Situationen beschränken, z. B. auf eine Administrationsoberfläche.
3dinfluence

3

Die Funktion auf Ihrem Webserver wird normalerweise als "virtuelle Hosts" bezeichnet. Sobald Sie die DNS-Einträge auf diese eine IP-Adresse verweisen (wie in den anderen Antworten erwähnt), werden die verschiedenen Sites vom Server abhängig vom angeforderten Host verwaltet.

Soweit der Hinweis auf eine andere Box geht. Sie können Umleitungen auf den meisten Webservern konfigurieren, wenn Sie die Abfrage zuerst abrufen möchten. Wenn Sie über Subdomains sprechen, müssen Sie lediglich jede der Subdomains auf eine andere IP-Adresse verweisen.

dh host.com -> IP 1 dann www.host.com -> IP 2 und mail.host.com -> IP 3

Wenn Sie spezifischere Antworten wünschen, müssen Sie angeben, welche Webserver-Software auf welchem ​​Betriebssystem Sie ausführen.

Möglicherweise ist ServeFault ein besserer Ort für diese Frage.


1

Zusamenfassend...

Eins - Legen Sie die DNS-Einträge für Ihre verschiedenen Domänen so fest, dass sie alle auf Ihre Box verweisen.

Zwei - Richten Sie, wie von anderen beschrieben, Ihren Webserver so ein (Sie sagen nicht, welcher), dass er mit dem angeforderten Hostnamen übereinstimmt.

Auf diese Weise werden alle Anforderungen für alle Ihre Domänen an denselben Computer gesendet, und die Konfiguration übernimmt die angeforderte Domäne und leitet sie an den richtigen Ordner weiter, der den Inhalt dieser Site enthält.


0

Aus Ihrer Frage ergibt sich für mich, dass Sie einen separaten physischen Server für die zweite Website haben. In diesem Fall können Sie keine einzige IP-Adresse für die beiden Server verwenden. Sie können entweder a) eine zweite öffentliche IP-Adresse für Ihren zweiten Host erhalten oder b) einen Smart Proxy einrichten, der Anforderungen basierend auf den Host-Headern an verschiedene Server in Ihrem internen Netzwerk weiterleitet. Ich bin mir ziemlich sicher, dass b) möglich ist, aber ich habe keine wirkliche Vorstellung davon, wie es funktioniert. Sie müssen also jemanden fragen, ob Sie dies versuchen.


0

Wenn ich Ihre Frage richtig lese, haben Sie zwei verschiedene Computer, die sich eine IP-Adresse über NAT (Network Address Translation) teilen? In diesem Fall muss eine Site an einem anderen Port empfangsbereit sein (nicht 80). Ich kenne keinen guten Weg, wie der Router basierend auf den HTTP-Metadaten "Host" Anforderungen an verschiedene Computer senden kann. Sie sollten nur eine zweite IP-Adresse für Ihren zweiten Server erhalten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.