Ich habe eine Instanz von Nginx, die mehrere Websites bedient. Die erste ist eine Statusmeldung zur IP-Adresse des Servers. Die zweite ist eine Administratorkonsole admin.domain.com
. Diese funktionieren großartig. Jetzt möchte ich, dass alle anderen Domain-Anfragen an eine einzelne gehen index.php
- ich habe viele Domains und Subdomains und es ist unpraktisch, sie alle in einer Nginx-Konfiguration aufzulisten.
Bisher habe ich versucht Einstellung server_name
zu , *
aber das als eine ungültige Platzhalter fehlgeschlagen. *.*
funktioniert, bis ich die anderen Serverblöcke hinzufüge, dann denke ich, dass es Konflikte mit ihnen gibt.
Gibt es eine Möglichkeit, einen Catch-All-Serverblock in Nginx auszuführen, nachdem andere Sites definiert wurden?
NB Ich bin kein Spammer, dies sind echte Websites mit nützlichen Inhalten, sie werden nur von demselben CMS aus einer Datenbank betrieben!
Antworten:
Ändern Sie die Listen-Option in Ihrem Catch-All-Serverblock. (Hinzufügen
default_server
) Hiermit werden alle nicht definierten Verbindungen (am angegebenen Port) ausgeführt.Wenn Sie alles in die Datei index.php verschieben möchten, wenn die Datei oder der Ordner nicht vorhanden ist.
quelle
server_name _;
für die Statusseite die IP-Adresse verwenden, ich musste angeben,server_name x.x.x.x
aber das ist okay!default_server
scheint unter nginx 1.4.6, der derzeit neuesten Version unter Ubuntu 14.04configtest
, nicht zu funktionieren. Wenn ich es hinzufüge, gibt der Befehl einen Fehler zurück, und ein Neustart des Servers funktioniert auch nicht. Ich habe genau die gleiche Konfiguration auf meinem Server mit Debian Jessie versucht, die Nginx 1.6.2 hat, und es funktioniert perfekt. Also versuchen Sie eine andere Version, wenn Sie auf 1.4.6 sind ...default_server
Direktive legt auch den Server fest, der den SSL-Handshake für Anforderungen an diesem Port verarbeitet. Wenn Sie also möchten, dass Serverblock A SSL verarbeitet, Server B jedoch als Catchall für HTTPS fungiert, müssen Sie die Lösungserver_name ~^(.+)$
auf Server B festlegen .Ein einfacher Unterstrich funktioniert auch:
Quelle: http://nginx.org/en/docs/http/server_names.html
quelle
listen 80 default_server
in Ihrer Konfiguration haben._
also nur ein ungültiger Name?Das wird funktionieren:
quelle
server_name ~.
scheint effizienter zu seinFür mich hat default_server irgendwie nicht funktioniert. Ich habe es gelöst durch
mit regulären Ausdruck von allen.
quelle
Nur 1
server
RichtlinieAus Nginx
listen
DocsWenn Sie nur eine
server
Direktive haben, die alle Anforderungen verarbeitet, müssen Sie nichts festlegen.mehrere
server
RichtlinieWenn Sie alle Anforderungen mit der angegebenen
server
Direktive abgleichen möchten , fügen Sie einfachdefault_server
Parameter hinzulisten
. Nginx verwendet dieseserver
Direktive als Standard.Über
server_name _;
Aus Nginx Docs
Es spielt keine Rolle, was
server_name
Sie festlegen, es ist nur ein ungültiger Domainname .quelle
Jetzt können Sie Maske verwenden:
Weitere Informationen finden Sie hier: http://nginx.org/en/docs/http/server_names.html
quelle
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 als auch leeren Regex verwendenserver_name
:quelle