Ich habe eine Instanz von nginx, die mehrere Websites bedient. Die erste ist eine Statusmeldung auf der IP-Adresse des Servers. Die zweite ist eine Administrationskonsole auf admin.domain.com
. Diese arbeiten großartig. Nun möchte ich, dass alle anderen Domain-Anfragen zu einem einzigen index.php
gehen - ich habe jede Menge Domains und Subdomains und es ist unpraktisch, sie alle in einer Nginx-Konfiguration aufzulisten.
Bisher habe ich versucht, server_name
auf *
zu setzen, was jedoch als ungültiger Platzhalter fehlgeschlagen ist. *.*
funktioniert, bis ich die anderen Serverblöcke hinzufüge, und ich denke, es steht im Konflikt mit ihnen.
Gibt es eine Möglichkeit, einen catch-all-Serverblock in nginx auszuführen, nachdem andere Sites definiert wurden?
N.B. Ich bin kein Spammer, dies sind echte Websites mit nützlichen Inhalten, sie werden nur mit demselben CMS aus einer Datenbank betrieben!
Ändern Sie die Höroption in Ihrem catch-all-Serverblock. (Hinzufügen default_server
) Dies nimmt alle Ihre nicht definierten Verbindungen (am angegebenen Port) auf.
listen 80 default_server;
wenn Sie alles auf index.php verschieben möchten, falls die Datei oder der Ordner nicht vorhanden ist;
try_files $uri /$uri /index.php;
Ein einfacher Unterstrich funktioniert auch:
server_name _;
Das wird funktionieren:
server_name ~^(.+)$
Bei mir war irgendwie der default_server defekt. Ich habe es durch gelöst
server_name ~^.*$
mit regulären Ausdruck von allen.
server
-DirektiveWenn der Parameter default_server vorhanden ist, führt dies dazu, dass der Server Standardserver für das angegebene Adresse: Port-Paar werden. Wenn keine der Direktiven haben den Parameter default_server und dann den ersten Server mit dem Adresse: Port-Paar ist der Standardserver für diese Paar.
Wenn Sie nur eine server
-Direktive haben, die alle Anforderungen behandelt, müssen Sie nichts einstellen.
server
-DirektiveWenn Sie alle Anforderungen mit der angegebenen server
-Direktive abgleichen möchten, fügen Sie einfach listen
default_server
-Parameter hinzu. Nginx verwendet diese server
-Direktive als Standard.
server {
listen 80 default_server;
}
server_name _;
Von Nginx-Dokumenten
In catch-all Serverbeispielen ist der seltsame Name "_" zu sehen:
server { listen 80 default_server; server_name _; return 444; }
Dieser Name hat nichts Besonderes, er ist nur einer von unzähligen von ungültigen Domain-Namen, die sich niemals mit einem echten Namen überschneiden . Andere ungültige Namen wie "-" und "! @ #" Können ebenfalls verwendet werden.
Es spielt keine Rolle, welchen server_name
Sie festlegen, es handelt sich lediglich um einen ungültigen Domänennamen.
Jetzt kannst du mask benutzen:
server {
listen 80;
server_name *.example.org;
...
}
server {
listen 80;
server_name mail.*;
...
}
Weitere Informationen finden Sie hier: http://nginx.org/de/docs/http/server_names.html
Wenn Sie auch Anforderungen mit leerem Host
-Header abfangen möchten (was in HTTP/1.0 zulässig ist), können Sie sowohl regulären Ausdruck als auch leeren server_name
verwenden:
server {
listen 80;
server_name ~. "";
}