Wie lege ich einen Standardhost für Nginx fest?

11

Ich versuche herauszufinden, wie ich einen Standardhost für meine Nginx-Installation festlegen kann. Ich habe diesen Artikel im Nginx-Wiki gefunden:

http://wiki.nginx.org/NginxVirtualHostExample#A_Default_Catchall_Virtual_Host

Das funktioniert leider nicht. Nach dem Neustart erhalte ich Folgendes:

Restarting nginx: nginx: [emerg] unknown directive "http" in /etc/nginx/sites-enabled/catchall:1
nginx: configuration file /etc/nginx/nginx.conf test failed

Nach dem Entfernen der http-Direktive erhalte ich Folgendes:

Restarting nginx: nginx: [emerg] unknown log format "main" in /etc/nginx/sites-enabled/catchall:7
nginx: configuration file /etc/nginx/nginx.conf test failed

Ich bin auf Ubuntu 10.04.3, wo ich die offizielle Nginx PPA verwende. Version 1.0.9 von nginx läuft.

Ulf Klose
quelle

Antworten:

16

Nginx-Konfigurationen basieren auf einer Reihe verschachtelter Blöcke. Es sollte nur einen http-Block geben. Dies wird normalerweise in /etc/nginx/nginx.conf definiert. Alle enthaltenen Dateien (z. B. von verfügbaren Websites) sind in diesem http-Block enthalten. Um einen Standard- / Catch-All-Host einzurichten, benötigen Sie nur den Serverblockabschnitt für Ihren Standardhost. Dies wird erreicht, indem der Listen-Direktive 'default' hinzugefügt wird. Darüber hinaus wird häufig ein Servername verwendet, der keinem echten Namen entspricht - normalerweise ein Unterstrich ("_"), aber auch andere Zeichen sind zulässig. Wenn Sie den Standardparameter weglassen, wird der erste Serverblock als Standard behandelt. ( Weitere Informationen finden Sie im Nginx- Handbuch zu Servernamen. )

Die Standardkonfiguration von nginx (in diesem Zusammenhang 'original') kann einen Standardserverblock (catch-all) in der Datei nginx.conf enthalten, den Sie konfigurieren können.

Stellen Sie für den zweiten Fehler sicher, dass 'main' in nginx.conf definiert ist (eine Zeile sollte mit 'log_format main ...' beginnen (und überprüfen Sie natürlich Ihre Klammern). Sie können die Zeile 'access_log' vollständig weglassen Wenn Sie nicht möchten, dass Anforderungen an Ihren Standardserver protokolliert werden (oder das Format durch Definieren eines neuen Formats ändern können).

cyberx86
quelle
Das war schnell. Vielen Dank. Ich werde das morgen ausprobieren, nachdem ich ein bisschen geschlafen habe ;-).
Ulf Klose
Die Verwendung von _, da der Servername nicht zur "Standardität" des Servers {} beiträgt, wird nur häufig verwendet, um zu verhindern, dass der Catchall mit anderen Serverblöcken in Konflikt gerät, sodass das Standardflag in der Listen-Direktive nicht überschrieben wird. Dies ist das einzige, was den Server explizit als Standard markiert. Noch +1
Kolbyjack
@kolbyjack - Danke für die Korrektur - ich werde es in meiner Antwort beheben.
Cyberx86
-1

Versuche dies. Ersetzen Sie return 404durch eine beliebige Standardaktion.

/server//a/946083/453080

ThilinaB
quelle