Standardbehandlung für nicht übereinstimmende Domains / Subdomains in Apache

12

Ich habe eine Apache2-Konfiguration mit mehreren VirtualHosts. Mein DNS ist so eingestellt, dass es *.<domain>.<tld>auf mehreren Domains akzeptiert wird . Alles funktioniert einwandfrei, aber wenn ich zu gehe, wird something-random-here.example.comanscheinend ein ungültiger VirtualHost ausgewählt (ich vermute, der erste oder letzte wird gefunden). Gibt es eine Möglichkeit, Apache anzuweisen, bestimmte Regeln zu verwenden, wenn keiner der VirtualHost-Einträge mit der Domain oder Subdomain übereinstimmt? Am liebsten würde ich einen 404 zurückgeben.

Ryall
quelle

Antworten:

12

Apache verwendet den ersten virtuellen Host, wenn kein Name übereinstimmt. Konfigurieren Sie einfach einen neuen virtuellen Host als ersten mit einem zufälligen Namen und zeigen Sie an, was Sie möchten - oder geben Sie eine 404-Seite zurück.

Moritz Beide
quelle
Danke, aber könnten Sie bitte näher darauf eingehen? Ich kann das nicht zum Laufen bringen.
Ryall
2
Wie sind Ihre Apache2-Konfigurationsdateien aufgebaut? Oder welches Betriebssystem benutzt du? Apache liest die Konfiguration in einer bestimmten Reihenfolge und der erste angezeigte VirtualHost ist der Standard. Es empfängt den gesamten Datenverkehr von unbekannten Hostnamen. Wenn Sie also eine einzelne Konfigurationsdatei haben, ist dies der erste VirtualHost. Wenn Sie mehrere haben, wie es bei den meisten Linux-Betriebssystemen der Fall ist, kann es sich um 0default oder so handeln ...
Moritz Both
Ich habe einige Standardkonfigurationen in die ports.conf. Es hat nicht funktioniert, weil ich versucht habe, mit *: 80 übereinzustimmen, als ich auf meinen virtuellen Hosts <ip>: 80 verwendet habe. Stattdessen musste ich für jede IP einen eigenen Standardeintrag erstellen und es funktioniert jetzt.
Ryall
Weder meine erste noch meine letzte V-Host-Datei wird verwendet. Ich denke, Apache hat sich verändert.
Cobolt
4

Platzhalter enthalten Ihre Site-Konfigurationsdateien:

Include path/to/site/confs/*httpd.conf

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

etc...

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

<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, an denen Ihr httpd empfangsbereit ist. Wenn Sie bestimmte Schnittstellen über httpd abhören, müssen Sie stattdessen für jede Schnittstelle einen Catchall 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 Websites in der angegebenen Reihenfolge zu laden und zu verhindern, dass nicht angepasste virtuelle Hosts eine unerwartete Website unbeabsichtigt laden.

Jason Slobotski
quelle
sollte "ServerAlias ​​*" nicht aus den Catch-All-Regeln entfernt werden?
Ahm3d Said
Ich nehme an, es würde keine Rolle spielen. Wenn keiner der virtuellen Hosts vor dem catchall die Anforderung bearbeitet, geben diese eine 404-Antwort zurück. Ich sehe keinen Grund, warum ServerAlias ​​* entfernt werden müsste, aber sie sind möglicherweise unnötig spezifisch.
Jason Slobotski
0

Wie Moritz Both erwähnt, verwendet Apache2 den ersten virtuellen Host, den es findet, wenn er nicht mit dem von Ihnen angeforderten übereinstimmt.

Wenn Sie Apache2 zum ersten Mal installieren, gibt es eine Standardwebsite conf, die Sie als Vorlage verwenden, ändern oder löschen können, und ich habe mich immer gefragt, wofür die 000-default.conf eigentlich gedacht ist, weil sie auch eine default.conf hat. Nachdem ich was gelesen habeMoritz Both Gesagte habe, macht es 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 und zu kopieren a2ensite 000-default .

Jedes Mal, wenn eine nicht übereinstimmende Domain-Anfrage auf meiner Website eingeht, wird die 000-Standardseite bereitgestellt, bei der es sich nur um eine Kopie meiner tatsächlichen Standardseite handelt.

Newteq Entwickler
quelle
1
Ich mache dasselbe, aber mein nicht übereinstimmender / standardmäßiger Host sendet eine Weiterleitung an die richtige Website der obersten Ebene, wodurch die angezeigte URL ebenfalls in die richtige geändert wird.
Ivanivan
Das ist eine wirklich gute Idee! Daran habe ich nicht gedacht. Ich werde meine Site auf jeden Fall so implementieren :)
Newteq Developer
Aus irgendeinem Grund kann ich meine ssl (Standardseite) nicht zum Umleiten bringen. Ich habe <VirtualHost *:443> ... Redirect / https://baseurl/ ... </VirtualHost> aber die URL bleibt gleich. Ich habe dasselbe für die nicht-ssl-Version gemacht und es leitet richtig um. Irgendwelche Ideen?
Newteq Developer