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.com
eine 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.999
aber dann hatte ich ServerName = 141.29.495.999
und ServerAlias
war 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 ServerName
oder zu akzeptieren ServerAlias
?
Oder so. Mann, ich bin verwirrt.
Antworten:
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.com
DNS 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
ServerName
undServerAlias
ist 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:
http://www.example.com
in Ihren Browser ein.www.example.com
.www.example.com
(das ist derHost:
Header in HTTP).www.example.com
. Folgendes kann passieren:www.example.com
wird alsServerName
oderServerAlias
für a aufgeführt.VirtualHost
Wenn dies der Fall ist, wird die Konfiguration für diesen VirtualHost verwendet, um den Inhalt bereitzustellen.www.example.com
ist jedoch in keinem der Server aufgeführt. In diesem Fall wird der erste VirtualHost in der Liste zur Bereitstellung des Inhalts verwendet.quelle
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.com
Wenn der Apache den Server erreicht, wird er auch wissen, dass die angeforderte Anfrage und wenn es eineServerName
oderServerAlias
Direktive für diesen Domainnamen gibt, kann sie dem Dokumentenstamm dienen.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. +1Wenn Sie keinen Servernamen definieren, versucht apache2, diesen von / etc / hosts zu erraten. ServerAlias ist optional. Der üblichste Anwendungsfall ist wo
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.
quelle
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.
quelle