Wie funktionieren ServerName und ServerAlias?

62

Es ist der folgende Teil einer virtuellen Host-Konfiguration, für den ich weitere Erläuterungen benötige:

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin [email protected]
  ServerName  141.29.495.999
  ServerAlias example.com
...

Dies ist eine Beispielkonfiguration, ähnlich der, die ich derzeit habe (ich habe derzeit keinen Domainnamen).

<VirtualHost *:80>- Erlauben Sie die folgenden Einstellungen für alle HTTP-Anforderungen, die an Port 80 an IPs gesendet werden, auf denen dieser Server erreichbar ist. Wenn beispielsweise auf den Server über mehr als eine IP zugegriffen werden kann, können Sie diese Anweisung auf nur eine statt auf beide beschränken.

ServerName- Wenn der Host-Teil der HTTP-Anfrage mit diesem Namen übereinstimmt, erlauben Sie die Anfrage. Normalerweise ist dies ein Domänenname, der einer IP zugeordnet ist. In diesem Fall muss der HTTP-Anforderungshost dieser IP entsprechen.

ServerAlias - Alternative Namen, die vom Server akzeptiert werden.

Der verwirrende Teil für mich ist, dass, wenn ich im obigen Szenario ServerAlias mytestname.comeine HTTP-Anfrage an setze und diese dann abfrage mytestname.com, es einen DNS-Eintrag geben muss, der auf die IP des Servers verweist, damit dies funktioniert. In welchem ​​Fall handelt es sich bei ServerAlias ​​nur um EXTRA ServerName-Einträge?

Angenommen, ich hatte einen solchen DNS-Eintrag, foobar.com = 141.29.495.999aber dann hatte ich ServerName = 141.29.495.999und ServerAliaswar leer, würde das bedeuten, dass foobar.com zwar in die richtige IP aufgelöst wird, weil es keinen Verweis gibt, um foobar.com in ServerNameoder zu akzeptieren ServerAlias?

Oder so. Mann, ich bin verwirrt.

njp
quelle
1
Sie haben im vorletzten Absatz einige Worte vergessen. :-)
ThatGraemeGuy

Antworten:

105

Stellen Sie es sich so vor:

DNS ist das Telefonverzeichnis / die Gelben Seiten. Wenn jemand Ihr Telefon anrufen möchte, kann er nach Ihrem Namen suchen, Ihre Telefonnummer abrufen und dieses Telefon anrufen. DNS macht dasselbe, aber für Computer - wenn jemand zu www.example.comDNS gehen möchte, fragt er nach der IP-Adresse und kann sich dann an den Computer wenden, der diese IP-Adresse hat. Das ist es, was Entschlossenheit bedeutet. Das Auflösen einer IP-Adresse hat überhaupt nichts mit Apache zu tun. Es ist streng genommen eine DNS-Frage.

Das ServerNameund ServerAliasist eher wie die interne Telefonliste eines Unternehmens. Ihr Webserver ist die Zentrale; Es werden alle eingehenden Verbindungen zum Server akzeptiert. Der Client / Anrufer teilt ihnen dann mit, nach welchem ​​Namen sie suchen, und in der Apache-Konfiguration wird gesucht, wie mit diesem Namen umgegangen werden soll.

Wenn der Name in der Apache-Konfiguration nicht als ServerName / ServerAlias ​​aufgeführt ist, gibt Apache ihnen immer den ersten aufgeführten VirtualHost. Wenn es überhaupt keinen VirtualHost gibt, wird derselbe Inhalt angezeigt, unabhängig davon, welcher Hostname in der Anforderung angegeben ist.

ETA: Also, Schritt für Schritt für eine normale Verbindung:

  1. Sie geben http://www.example.comin Ihren Browser ein.
  2. Ihr Computer fragt seinen DNS-Resolver, welche IP-Adresse er verwenden soll, wenn er mit ihm sprechen möchte www.example.com.
  3. Ihr Computer stellt eine Verbindung zu dieser IP-Adresse her und meldet, dass er mit dieser IP-Adresse kommunizieren möchte www.example.com(das ist der Host:Header in HTTP).
  4. Der Webserver überprüft seine Konfiguration, um herauszufinden, was mit einer Anforderung von Inhalten zu tun ist www.example.com. Folgendes kann passieren:
    • www.example.comwird als ServerNameoder ServerAliasfür a aufgeführt. VirtualHostWenn dies der Fall ist, wird die Konfiguration für diesen VirtualHost verwendet, um den Inhalt bereitzustellen.
    • Der Server hat überhaupt keine VirtualHosts - in diesem Fall verwendet er die Konfiguration in seiner httpd.conf, um den Inhalt bereitzustellen.
    • Der Server verfügt über VirtualHosts, www.example.comist jedoch in keinem der Server aufgeführt. In diesem Fall wird der erste VirtualHost in der Liste zur Bereitstellung des Inhalts verwendet.
Jenny D sagt Reinstate Monica
quelle
Wenn also der Host-Teil einer HTTP-Anfrage ist www.example.com, wird die IP-Adresse für diesen Namen vom DNS aufgelöst, und der Host-Teil der HTTP-Anfrage ist tatsächlich eine IP. www.example.comWenn der Apache den Server erreicht, wird er auch wissen, dass die angeforderte Anfrage und wenn es eine ServerNameoder ServerAliasDirektive für diesen Domainnamen gibt, kann sie dem Dokumentenstamm dienen.
NJP
Nein - der HTTP-Anforderungsteil ist immer noch der Hostname. Ich werde ein wenig mehr klären.
Jenny D sagt Reinstate Monica
The server has VirtualHosts but www.example.com isn't listed in any of them - if so, the first Virtualhost in the list will be used to deliver the content.. Ich habe das getestet. Es ist richtig, aber ich bin nicht sicher, ob es der erste Virtualhost ist. Danke für Informationen. +1
SMMousavi
19

Wenn Sie keinen Servernamen definieren, versucht apache2, diesen von / etc / hosts zu erraten. ServerAlias ​​ist optional. Der üblichste Anwendungsfall ist wo

ServerName example.com
ServerAlias www.example.com

Es liegt an Ihnen (nicht an apache2), sicherzustellen, dass Anforderungen die Webserver-IP erreichen, z. B. das Registrieren einer Domain und das Einrichten von DNS-Einträgen. Eine sehr gebräuchliche Methode (für Test und Entwicklung) ohne Domain- und DNS-Einträge besteht darin, die Datei / etc / hosts Ihres lokalen Computers so einzustellen, dass example.com auf die IP-Adresse Ihres Servers verweist.

192.168.0.12 example.com
192.168.0.12 www.example.com
blau
quelle
0

Ich würde dringend empfehlen, die offizielle Dokumentation zum Thema zu lesen: https://httpd.apache.org/docs/2.4/vhosts/name-based.html

es sagt : „Wenn kein passender Server oder Serveralias in dem Satz von virtuellen Hosts zu finden ist die spezifischste passende IP - Adresse und Port - Kombination enthält, dann die erste virtuelle Host aufgelistet, die verwendet werden übereinstimmt.“ . Wenn Sie also auf "foobar.com" zugreifen, wird der erste VirtualHost-Eintrag, der irgendwie der IP 141.29.495.999 entspricht, von httpd verwendet

Im selben Dokument heißt es: "Viele Server möchten unter mehreren Namen erreichbar sein. Dies ist mit der ServerAlias-Direktive möglich." Sie können ServerAlias ​​also einfach als zusätzliche ServerName-Einträge betrachten.

Pierluigi Vernetto
quelle