[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Paketquellen_freischalten: Bearbeiten von Paketquellen] [:Packprogramme: Archive entpacken] [:Programme kompilieren: Pakete aus dem Quellcode erstellen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis(3)]] [[Bild(http://wiki.nginx.org/local/nginx-logo.png, 100, left)]] [http://www.nginx.org nginx] {en} (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 [http://news.netcraft.com/archives/2010/01/07/january_2010_web_server_survey.html laut netcraft] {en} von 7.53% (Stand: Januar 2010) aller Websites genutzt. = Installation = == Aus den Paketquellen == [[Bild(http://media.ubuntuusers.de/wiki/attachments/34/42/Software2_64.png, align=right)]] nginx kann ab Ubuntu Hardy 8.04 als fertiges Paket installiert werden[1]: {{{#!vorlage Paketinstallation nginx, universe }}} == Mithilfe des Quellcodes == Zuerst muss der Quellcode von nginx [http://nginx.org/en/download.html hier] {dl} 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. {{{#!vorlage Warnung Die Konfigurationsdatei ist nun abweichend. Sie befindet sich unter ''/usr/local/nginx/nginx.conf'' }}} = Konfiguration = [[Bild(http://media.ubuntuusers.de/wiki/thumbnails/a/aa/aafd2cea8b27c3505026e4941791d1ec3ce7ffb8i75x.png, align=right)]] 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. {{{#!vorlage 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 [wikipedia:Daemon:] arbeitet. === Aktivierung einer [wikipedia: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; }}} {{{#!vorlage 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 == [[Bild(http://media.ubuntuusers.de/wiki/thumbnails/1/14/1458a1cada5733067103f97814bab4a9edd96d4di75x.png,align=right)]] === Grundkonfiguration === Damit nginx an eine Domain oder IP gebunden wird, muss folgender Grundblock in den http-Teil eingefügt werden: {{{ server { } }}} {{{#!vorlage 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. {{{#!vorlage Warnung 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 == [[Bild(http://media.ubuntuusers.de/wiki/attachments/55/28/php-logo.png, align=right)]] 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: [http://library.linode.com/web-servers/nginx/php-fastcgi/ubuntu-9.10-karmic Linode.com - Nginx and PHP-FastCGI on Ubuntu]): {{{#!code bash #!/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 }}} {{{#!vorlage Experten 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 }}} {{{#!vorlage 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 == {{{#!vorlage 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 = [[Bild(http://media.ubuntuusers.de/wiki/attachments/56/50/ErsteSchritte.png, align=right)]] ==== 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. [http://library.linode.com/web-servers/nginx/installation/ubuntu-9.10-karmic#create_an_init_script_to_manage_nginx Hier] {en} 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 [wikipedia:Plesk:] nginx nicht konfigurieren? ==== Das liegt daran, dass Plesk [:Apache:] nutzt und nicht auf nginx zugeschnitten ist. = Links = [http://wiki.nginx.org/ Wiki von nginx] {en} [http://www.joeandmotorboat.com/2008/02/28/apache-vs-nginx-web-server-performance-deathmatch/ Apache vs Nginx : Web Server Performance Deathmatch] {en} [http://library.linode.com/web-servers/nginx/ Linode.com - Weiterführende Konfiguration von nginx] {en} = Quellen = [http://www.nginx.org/ Website von nginx] {en} [http://wiki.nginx.org/ Wiki von nginx] {en} [http://library.linode.com/web-servers/nginx/ Linode.com] {en} #tag: Netzwerk, Internet, Server