Nginx-Servername-Wildcard oder Catch-All
-
13-11-2019 - |
Frage
Ich habe eine Instanz von Nginx, die mehrere Websites bedient.Die erste ist eine Statusmeldung zur IP-Adresse des Servers.Die zweite ist eine Admin-Konsole admin.domain.com
.Diese funktionieren großartig.Jetzt möchte ich, dass alle anderen Domain-Anfragen an eine einzige gehen index.php
– Ich habe viele Domänen und Subdomänen und es ist unpraktisch, sie alle in einer Nginx-Konfiguration aufzulisten.
Bisher habe ich es mit der Einstellung versucht server_name
Zu *
aber das schlug als ungültiger Platzhalter fehl. *.*
funktioniert, bis ich die anderen Serverblöcke hinzufüge, dann vermute ich, dass es zu Konflikten mit ihnen kommt.
Gibt es eine Möglichkeit, einen Catch-All-Serverblock in Nginx auszuführen, nachdem andere Sites definiert wurden?
Hinweis:Ich bin kein Spammer, das sind echte Seiten mit nützlichen Inhalten, sie werden nur von demselben CMS aus einer Datenbank betrieben!
Lösung
Ändern Sie die Abhöroption in Ihrem Catch-All-Serverblock in diese Option.(Hinzufügen default_server
) Dies nimmt alle Ihre nicht definierten Verbindungen (auf dem angegebenen Port) entgegen.
listen 80 default_server;
wenn Sie alles nach index.php verschieben möchten, wenn die Datei oder der Ordner nicht existiert;
try_files $uri /$uri /index.php;
Andere Tipps
Ein einfacher Unterstrich funktioniert auch: generasacodicetagpre.
Das wird funktionieren: generasacodicetagpre.
für mich irgendwie definieren defeind_server funktionierte nicht.Ich habe es gelöst von generasacodicetagpre.
Verwenden des regulären Ausdrucks von allen.
Jetzt können Sie Maske verwenden: generasacodicetagpre.
Look mehr hierher: http://ginx.org/de/docs/http/Server_names.html
Nur 1 server
Richtlinie
Der Parameter von Default_Server veranlasst, falls vorhanden, der Server zum Standardserver für die angegebene Adresse: Portpaar.Wenn keiner der Anweisungen den Parameter default_server hat, ist der erste Server mit der Adresse: Portpaar der Standardserver für dieses Paar.
Wenn Sie nur 1 haben server
Direktive, die alle Anfragen bearbeitet, Sie müssen nichts festlegen.
Mehrere server
Richtlinie
Wenn Sie alle Anfragen mit den angegebenen übereinstimmen möchten server
Direktive, einfach hinzufügen default_server
Parameter zu listen
, Nginx wird dies verwenden server
Direktive als Standard.
server {
listen 80 default_server;
}
Um server_name _;
Aus Nginx-Dokumente
In Catch-All-Server-Beispielen ist der seltsame Name „_“ zu sehen:
server { listen 80 default_server; server_name _; return 444; }
Dieser Name hat nichts Besonderes, es ist nur eine von unzähligen ungültigen Domain -Namen, die sich niemals mit einem richtigen Namen überschneiden.Andere ungültige Namen wie „--“ und „!@#“ können ebenfalls verwendet werden.
Es spielt keine Rolle, was server_name
Sie legen fest, es ist nur ein Ungültiger Domainname.
Wenn Sie Anfragen auch mit leer abfangen möchten Host
Header (der erlaubt ist HTTP/1.0) können Sie sowohl Regex als auch Empty verwenden server_name
:
server {
listen 80;
server_name ~. "";
}