nginx
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
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¶
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
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¶
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¶
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¶
nginx verlangt eine für PHP eine FastCGI-Schnittstelle. Zuerst installiert man, falls noch nicht geschehen, PHP in der CGI-Version und ein Paket names spawn-fcgi:
sudo apt-get install 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¶
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.
Links¶
Quellen¶
Linode.com 🇬🇧