
Ich habe eine Apache2-Konfiguration mit mehreren VirtualHosts. Mein DNS ist so eingestellt, dass es mehrere Domänen akzeptiert *.<domain>.<tld>
. Alles funktioniert richtig, aber wenn ich gehe, something-random-here.example.com
wird anscheinend ein ungültiger VirtualHost ausgewählt (ich vermute, der erste oder letzte, den er findet). Gibt es eine Möglichkeit, Apache anzuweisen, bestimmte Regeln zu verwenden, wenn keiner der VirtualHost-Einträge mit der Domäne oder Subdomäne übereinstimmt? Ich würde am liebsten eine 404-Fehlermeldung zurückgeben.
Antwort1
Apache verwendet den ersten virtuellen Host, wenn kein Name übereinstimmt. Konfigurieren Sie einfach einen neuen virtuellen Host als ersten mit einem zufälligen Namen, der anzeigt, was Sie möchten – oder eine 404-Seite zurückgibt.
Antwort2
Platzhalter für die Einbeziehung Ihrer Site-Konfigurationsdateien:
Include path/to/site/confs/*httpd.conf
Organisieren Sie Ihre Site-Conf-Dateien 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 eine, die immer zuletzt geladen wird, um alle nicht übereinstimmenden virtuellen Hosts abzufangen und eine 404-Fehlermeldung zurückzugeben, anstatt eine Standardsite zu laden.
99-catchall-httpd.conf
<VirtualHost *:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost *:8443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
Stellen Sie sicher, dass Sie die Ports durch die Ports ersetzen, die Ihr httpd abhört. Oder wenn Sie httpd auf bestimmten Schnittstellen abhören lassen, müssen Sie stattdessen einen Catchall für jede Schnittstelle hinzufügen, wie folgt:
<VirtualHost 192.168.1.101:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.102:8080>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.102:8443>
ServerName null
ServerAlias *
Redirect 404 /
</VirtualHost>
Hoffe, das hilft. Ich verwende diese Methode, um Sites in der von mir angegebenen Reihenfolge zu laden und zu verhindern, dass nicht übereinstimmende virtuelle Hosts unbeabsichtigt eine unerwartete Site laden.
Antwort3
Wie Moritz Both
erwähnt verwendet Apache2 den ersten virtuellen Host, den es findet, wenn dieser mit keinem Ihrer angeforderten Hosts übereinstimmt.
Wenn Sie Apache2 zum ersten Mal installieren, gibt es eine Standard-Website-Konfiguration, die Sie als Vorlage verwenden, ändern oder löschen können, und ich habe mich immer gefragt, wozu die 000-default.conf eigentlich dient, denn sie hatten auch eine default.conf. Nachdem ich das Moritz Both
Gesagte gelesen habe, ergibt das alles jetzt mehr Sinn.
Was ich für meinen Server getan habe, war, die Konfiguration für den Standard-Hostnamen (Website) in die Datei 000-default.conf zu kopieren und a2ensite 000-default
.
Wenn jetzt eine nicht übereinstimmende Domänenanforderung an meine Website eingeht, wird die Seite 000-default angezeigt, die lediglich eine Kopie meiner tatsächlichen Standardseite ist.