ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

nginx

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

http://wiki.nginx.org/local/nginx-logo.png nginx 🇬🇧 (gesprochen engine x) ist ein Webserver, welcher gegenüber Apache sehr schnell und schmal ist. Er ist dafür ausgelegt, selbst unter hoher Last nur wenig Ressourcen zu verbrauchen. nginx wurde von Igor Sysoev entwickelt und wird laut netcraft 🇬🇧 von 7.53% (Stand: Januar 2010) aller Websites genutzt.

Installation

Aus den Paketquellen

http://media.ubuntuusers.de/wiki/attachments/34/42/Software2_64.png nginx kann ab Ubuntu Hardy 8.04 als fertiges Paket installiert werden[1]:

  • nginx (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install nginx 

Oder mit apturl installieren, Link: apt://nginx

Mithilfe des Quellcodes

Zuerst muss der Quellcode von nginx hier ⮷ heruntergeladen werden. Doch bevor der Quellcode kompiliert werden kann, ist es notwendig, folgende Pakete zu installieren, falls noch nicht geschehen:

  • gcc

  • libevent

Befehl zum Installieren der Pakete:

sudo apt-get install gcc libevent 

Oder mit apturl installieren, Link: apt://gcc,libevent

Nun entpackt[3] man das Paket und kompiliert[4] nginx.

Achtung!

Die Konfigurationsdatei ist bei der Installation mithilfe des Quellcodes abweichend. Sie befindet sich unter /usr/local/nginx/nginx.conf.

Konfiguration

http://media.ubuntuusers.de/wiki/thumbnails/a/aa/aafd2cea8b27c3505026e4941791d1ec3ce7ffb8i75x.png nginx liest die Konfiguration aus der Datei /etc/nginx/nginx.conf. Die Datei besteht im Wesentlichen aus zwei Teilen: Dem kleinen events-Teil und dem wichtigen http-Teil.

Hinweis:

Kommentiert wird mit einer Raute (#). Kommentierte Zeilen werden von nginx nicht beachtet.

Ändern der Umgebung

Ändern des Nutzers

nginx kann - wie viele andere Webserver - auch einen anderen Nutzer als root benutzen. Um dies auszulösen ändert man in Zeile 2 folgende Zeile:

#user  nobody;

ab zu folgender Zeile (in diesem Beispiel wird der Nutzer www-data verwendet):

user  www-data;

Dies ändert - unabhängig davon, mit welchem Nutzer nginx gestartet wurde - das Konto, mit dem der Daemon arbeitet.

Aktivierung einer Logdatei

Um eine komplette Logdatei nach /etc/nginx/logs/error.log zu schreiben, ändert man Zeile 5 ab zu:

error_log  /etc/nginx/logs/error.log;

Hinweis:

Falls der Nutzer geändert wurde (s.o.), muss dieser Schreibzugriff auf den Ordner bzw. die Datei besitzen.

Durch das Hinzufügen von info oder notice nach dem Dateinamen kann das Protokoll gefiltert werden.

Konfigurieren des Webservers

http://media.ubuntuusers.de/wiki/thumbnails/1/14/1458a1cada5733067103f97814bab4a9edd96d4di75x.png

Grundkonfiguration

Damit nginx an eine Domain oder IP gebunden wird, muss folgender Grundblock in den http-Teil eingefügt werden:

server {

}

Hinweis:

Die Datei ist nach der Installation schon vorkonfiguriert. Es ist empfehlenswert, jegliche server { [...] }-Bereiche zu entfernen, um Komplikationen zu vermeiden.

Nun wird angegeben, an welchen Port sich nginx binden soll (80) und an welche Domain bzw. IP (localhost):

server {
     listen       80;
     server_name  localhost;
}

Nun würde nginx zwar am Port 80 horchen, allerdings könnte er keine Daten überbringen, da er kein Verzeichnis mit Dateien zur Verarbeitung bekommen hat. Dies ändert man mit "root" (im Beispiel liegen die Dateien in /srv/localhost):

root         /srv/localhost;

Zuletzt wird noch festgelegt, welche Datei aufgerufen werden soll, wenn der Nutzer nur localhost eintippt:

location / {
        index     index.html  index.htm;
}

Domains einbinden

Domains lassen sich folgendermaßen einbinden:

server_name  www.example.com example.com;

Damit hört nginx sowohl an www.example.com als auch example.com.

Sub- und Wildcarddomains einbinden

Sub- und Wildcarddomains bindet man mit

server_name  *.example.com subdomain.example.com;

ein.

Achtung!

Jeder server { [...] }-Block löst aus, dass alle Domains, die hinter server_name stehen, mit dem Inhalt von root versorgt werden.

Beispiel

server {
     listen       80;
     server_name  localhost example.com www.example.com;
     root         /srv/daten;

     location / {
        index     index.html  index.htm;
     }
}

server {
     listen       80;
     server_name  subdomain.example.com;
     root         /srv/subdomain/daten;

     location / {
        index     index.html  index.htm;
     }

}

PHP mit nginx

http://media.ubuntuusers.de/wiki/attachments/55/28/php-logo.png nginx verlangt für PHP eine FastCGI-Schnittstelle. Zuerst installiert man, falls noch nicht geschehen:

  • php5-cgi

  • spawn-fcgi (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install php5-cgi spawn-fcgi 

Oder mit apturl installieren, Link: apt://php5-cgi,spawn-fcgi

Da PHP nicht im Passiv-Modus agiert, müssen - wie für FastCGI üblich - PHP-Instanzen gestartet werden, die im Arbeitsspeicher auf ihren Einsatz warten. Diese müssen aber erst einmal gestartet werden. Dies geht mit folgendem Skript (Quelle: Linode.com - Nginx and PHP-FastCGI on Ubuntu):

1
2
#!/bin/sh
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -f /usr/bin/php5-cgi

Das Skript speichern wir unter /usr/bin/php-fastcgi ab und setzen mit

chmod a+x /usr/bin/php-fastcgi

die richtigen Rechte.

Starten tut man nun die Instanzen ganz einfach mit dem Befehl sudo php-fastcgi. Zu guter letzt muss jetzt nur noch nginx wissen, wie man sich an die Schnittstelle bindet. Dazu fügt man in den server { [...] }-Block folgendes ein:

location ~ \.php$ {
        fastcgi_pass   localhost:9000;
        fastcgi_param  SCRIPT_FILENAME
                       $document_root$fastcgi_script_name;
        include        fastcgi_params;
}

nginx steuern

nginx bildet sich aus einem Master-Prozess und vielen Slave- bzw. Client-Prozessen. Steuern tut man nginx mit dem Master-Prozess, den man mit dem Befehl nginx anspricht. Dies geht nach folgendem Prinzip (Ausgabe von nginx -h):

nginx [-s signal] [-c filename] [-p prefix] [-g directives]

Starten, stoppen und restarten

Für den Start führt man folgenden Befehl aus:

sudo nginx

Experten-Info:

Es sind Rootrechte erforderlich, da eine Bindung an einen Haupt-Port stattfindet, die von Ubuntu/dem Root genehmigt werden muss.

Für das Stoppen von nginx:

sudo nginx -s stop

Für das erneute Starten von nginx:

sudo nginx -s quit
sudo nginx

Hinweis:

Falls /etc/init.d/nginx vorhanden ist, kann man nginx auch mit diesen Optionen steuern:

/etc/init.d/nginx (start|stop|restart|reload|force-reload)

Auf andere Konfigurationsdatei verweisen

Hinweis:

Dies ist nicht bei einer Installation mithilfe vom Quellcode und einer Installation aus den Paketquellen nötig.

Falls eine andere Konfigurationsdatei als /etc/nginx/nginx.conf z.B. zu Testzwecken verwendet werden soll, startet man nginx folgendermaßen:

sudo nginx -c /pfad/der/konfigurationsdatei

Erste Hilfe bei Problemen

http://media.ubuntuusers.de/wiki/attachments/56/50/ErsteSchritte.png

nginx zeigt bei Dateien, die existieren, im Browser "403" an.

Überprüfe die Schreibrechte! Diese Meldung kommt meistens, wenn nginx bzw. der Benutzer, mit dem nginx läuft, keinen Zugriff auf die Dateien hat.

nginx startet bei mir nicht automatisch.

Eventuell fehlt dir das /etc/init.d-Startskript. Hier 🇬🇧 findest du Hilfe.

nginx startet nicht, da die Konfigurationsdatei angeblich falsch ist.

Überprüfe die Konfigurationsdatei, ob überall am Ende jedes Befehls/jeder Zeile ein Semikolon ist, und ob du den server { [...] }-Block auch mit dem Zeichen "}" geschlossen hast!

Obwohl nginx richtig konfiguriert ist, passiert beim Aufrufen von Subdomains nichts.

Das kann passieren, wenn du dich vertippt hast, oder der Namensserver falsch eingestellt ist.

Wieso bliebt nginx an der Meldung "[...]:80 failed (98: Address already in use)" hängen?

Vielleicht läuft nginx schon. Falls nicht, überprüfe ob andere Webserver schon diesen Port nutzen!

Wieso kann Plesk nginx nicht konfigurieren?

Das liegt daran, dass Plesk Apache nutzt und nicht auf nginx zugeschnitten ist.

Wiki von nginx 🇬🇧

Apache vs Nginx : Web Server Performance Deathmatch 🇬🇧

Linode.com - Weiterführende Konfiguration von nginx 🇬🇧

Quellen

Website von nginx 🇬🇧

Wiki von nginx 🇬🇧

Linode.com 🇬🇧

Diese Revision wurde am 27. März 2010 17:22 von DerDenker erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, Server, Internet