Wenn ich 3 Domänen habe, domain1.com, domain2.com und domain3.com, ist es möglich, einen virtuellen Standardhost für nicht aufgelistete Domänen einzurichten? Zum Beispiel, wenn ich hätte:
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain1
ServerName domain1
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain2
ServerName domain2
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/everythingelse
ServerName *
ServerAlias host
</VirtualHost>
Wenn Sie eine Domain registrieren und auf meinen Server verweisen, wird standardmäßig alles andere als domain3 angezeigt. Ist das möglich?
apache-2.2
virtualhost
SJaguar13
quelle
quelle
Wenn Sie namensbasierte virtuelle Hosts verwenden, wird standardmäßig die erste virtuelle Host-Konfiguration geladen (Quelle: Apache Wiki ). In der folgenden Konfiguration stimmen beispielsweise nicht übereinstimmende Domänen überein mit
domain-one.com
:Viele Server haben keine monolithische Konfigurationsdatei, sondern mehrere hostspezifische Konfigurationsdateien, die wie folgt organisiert sind:
Um in diesem Fall eine bestimmte Konfiguration des virtuellen Hosts zuerst zu laden, benennen Sie den Symlink in etwas um, das beim Sortieren zuerst angezeigt wird, z
00-default
.Einige der anderen Antworten sind nicht ganz richtig. Laut dem Apache-Wiki ist es falsch, in einem virtuellen Host kein
ServerName
einzurichten. Wenn der Host ohne aServerName
nicht zuerst geladen wird, wird er möglicherweise von Apache nicht einmal verwendet, da der zuerst geladene Host der Standard ist.Darüber hinaus
ServerAlias *
werden zwar alle Übereinstimmungen berücksichtigt, es können jedoch auch andere später definierte virtuelle Hosts außer Kraft gesetzt werden. Möglicherweise funktioniert dieser Ansatz, wenn immer der letzte virtuelle Host definiert wird (wie in der in der Frage angegebenen Konfiguration). Dies bedeutet jedoch, dass eine neue Direktive hinzugefügt und die Sortierreihenfolge geändert wird, anstatt nur die Reihenfolge wie oben zu ändern.quelle
httpd-vhosts.conf
Geben Sie keinen Servernamen an, und das wird Ihr vhost-Standard.
Stellen Sie außerdem sicher, dass Sie in der httpd.conf-Hauptdatei kein DocumentRoot angegeben haben, da dies Vorrang vor den vhosts hat.
quelle
Reihenfolge ist wichtig - Verschieben Sie Ihre vhost-Definition für alles andere an den Anfang der Liste.
quelle
Verwenden Sie den virtuellen Host _default_ und platzieren Sie ihn zuerst in httpd-vhosts.conf, wie in http://httpd.apache.org/docs/2.2/vhosts/examples.html angegeben
"Abfangen jeder Anforderung an eine nicht spezifizierte IP - Adresse und einen Port, dh eine Adresse / Port - Kombination, die für keinen anderen virtuellen Host verwendet wird. [...] Ein Standard - vhost dient niemals einer Anforderung, die an eine Adresse / einen Port gesendet wurde Wird für namensbasierte vhosts verwendet. Wenn die Anforderung einen unbekannten oder keinen Host: -Header enthielt, wird sie immer vom primären namensbasierten vhost (dem vhost für diese Adresse / diesen Port, der in der Konfigurationsdatei zuerst angezeigt wird) bereitgestellt. "
Snippet aus einer lebenden, aber verschleierten httpd-vhosts.conf, die zufällig alle vhosts auf Port 80 sperrt:
Eine ausführliche Erläuterung des vhost-Abgleichs finden Sie hier: http://httpd.apache.org/docs/2.2/vhosts/details.html
quelle
_default_
wird nur für nicht übereinstimmende IPs verwendet . Wenn Sie also einen vhost-Platzhalter (*: 80) haben, wird dieser niemals verwendet.Platzhalter enthalten Ihre Site-Konfigurationsdateien:
Organisieren Sie die Conf-Dateien Ihrer Site so, dass sie in der erwarteten Reihenfolge geladen werden. Beispiel...
01-httpd.conf
02-site1-httpd.conf
03-site2-httpd.conf
usw...
Apache liest diese der Reihe nach. Erstellen Sie dann einen, der immer zuletzt geladen wird, um nicht angepasste virtuelle Hosts abzufangen und einen 404-Wert zurückzugeben, anstatt eine Standardwebsite zu laden.
99-catchall-httpd.conf
Stellen Sie sicher, dass Sie die Ports durch die Ports ersetzen, an denen Ihr httpd empfangsbereit ist. Wenn Sie bestimmte Schnittstellen mit httpd überwachen, müssen Sie stattdessen für jede Schnittstelle einen Catchall hinzufügen, wie folgt:
Hoffe das hilft. Ich verwende diese Methode, um Websites in der angegebenen Reihenfolge zu laden und zu verhindern, dass nicht angepasste virtuelle Hosts eine unerwartete Website unbeabsichtigt laden.
quelle
Die beste Lösung ist, die Site-Konfigurationsdatei mit einer "1" umzubenennen, damit sie zuerst geladen wird und dies Ihre Standard-Site ist.
Apache2 legt die erste geladene vhost-Datei als Standardseite fest.
quelle
000-default
aus diesem Grund auch einen virtuellen Host.Wenn Sie
<VirtualHost *:port>
ServerName / ServerAlias für die Hosts verwenden und angeben, die Ihnen am Herzen liegen, musste ich dies tun.Ein bisschen Hintergrund in meiner Situation:
Ich habe eine dynamische IP-Adresse von meinem ISP, sodass meine IP-Adresse bei einem Unternehmen registriert ist, das dynamische IP-Adressen registriert (in meinem Fall noip.org). Einer meiner "Hosts" musste bei meiner DNS-Registrierung als myabc.example.com als CNAME registriert sein, der auf host1.ddns.net verweist. Aber host2.ddns.net wurde so belassen wie es ist. Ich wollte, dass myabc.example.com und host1.ddns.net zu site1 und host2.ddns.net zu site 2 und alles andere, einschließlich meiner IP-Adresse, zu default gehen.
Die erste conf - Datei gelesen wird der Standard sein, das heißt
000_def.conf
,001_site1.conf
,002_site2.conf
wird in dieser Reihenfolge gelesen werden000_def.conf
als Standard - Website. (Anmerkung: in meinem Fall habe ich diese "Dateien", in/etc/apache2/sites-enabled
denen sich tatsächlich dynamische Links zur eigentlichen conf-Datei befinden/etc/apache2/sites-available
)Da der Servername in 001_site1.conf und 002_site2.conf verwendet wird, muss er auch in 000_def.conf auf einen Wert gesetzt werden.
quelle