|   |     | 
| (74 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | 
| Zeile 1: | Zeile 1: | 
|  | [https://nginx.org nginx] {en} (gesprochen „engine x”) ist ein Webserver, der im Vergleich zu [:Apache:] (oder auch [wikipedia:Microsoft_Internet_Information_Services:IIS]) weniger Resourcen verbraucht und schnell ist
 |  | '''NGINX''' - Russischer Webserver | 
|  | * Aufgrund seiner eingebauten [wikipedia:Reverse_Proxy:Reverse-Proxy Funktionalität] wird nginx auch gerne als vorgeschalteter Webserverfür dahinter liegende Applikationsserver genutzt
 |  | 
|  | 
 |  | 
 | 
|  | nginx wird laut [https://w3techs.com/technologies/overview/web_server/all w3techs.com Statistik]{en} von ca. 40% aller Websites genutzt (Stand: September 2017) |  | == Beschreibung == | 
|  | * Damit istnginx der am zweithäufigsten eingesetzte Webserver |  | ; nginx | 
|  |  | * Ausgesprochen wie englisches „engine-ex“ | 
|  |  | * [[Webserver]]-Software | 
|  |  | * [[BSD-Lizenz]] | 
|  |  | * Von Igor Sysoev entwickelt | 
|  |  | * Oft als vorgeschalteter Webserver für dahinterliegende Applikationsserver verwendet | 
|  |  | * Nginx ist modular aufgebaut  | 
|  | 
 |  | 
 | 
|  | Neben der freien Version von nginx, welche auch unter eine [https://opensource.org/licenses/BSD-2-Clause freien Lizenz]{en} steht, gibt es auch eine kostenpflichtige Variante namens [https://www.nginx.com/products/nginx/ nginx Plus]{en}, für den die Firma nginx Inc. zusätzlichen Support und Module anbietet
 |  | ; Gründe für NGINX | 
|  |  | * Geschwindigkeit | 
|  |  | * Ressourcenverbrauch | 
|  |  | * Eingebauter [[Reverse Proxy]] | 
|  |  | * [[E-Mail]]-Proxy ([[POP3]]/[[IMAP]]) | 
|  | 
 |  | 
 | 
|  | == Installation == |  | === Funktionsumfang === | 
|  |  sudo apt instll nginx
 |  | ; Module | 
|  |  | * [[Lastverteilung (Informatik)|Lastverteilung]] | 
|  |  | * [[Reverse Proxy]]ing | 
|  |  | * namens- und IP-basierte ''Virtual Hosts'' | 
|  |  | * [[FastCGI]] | 
|  |  | * direkten Zugriff auf den [[Memcached]] Cache | 
|  |  | * [[Transport Layer Security|SSL]] | 
|  |  | * [[Flash Video|Flash-Video]]-Streaming | 
|  |  | * [[WebSocket]]-Protokoll | 
|  |  | * Mit dem Naxsi-Modul kann nginx auch als [[Web Application Firewall]] fungieren | 
|  |  | * ... | 
|  | 
 |  | 
 | 
|  | == Konfiguration == |  | === Verbreitung === | 
|  | Alle Konfigurationsdateien von nginx liegen im Verzeichnis '''/etc/nginx/''', dieGrundkonfigurationsdatei ist '''nginx.conf'''
 |  | Nginx wurde die Bedürfnisse der russischen Suchmaschine [[Rambler (Suchmaschine)|Rambler]] zugeschnitten und wird dort heute noch verwendet | 
|  | * Diese besteht aus den Sektionen `events { [...]}` und`http { [...] }`
 |  | 
|  | * Kommentiert wirdmit einer Raute (`#`)
 |  | 
|  | * Jede Konfigurationszeile muss mit einem Semikolon `;` abgeschlossen werden
 |  | 
|  | 
 |  | 
 | 
|  | In dieser Datei kann z. B. fest gelegt werden, mit welchen Rechten nginx läuft, in welche Dateien geloggt wird und auch die Verwendung von SSL kann hier konfiguriert werden
 |  | Aufgrund | 
|  |  | * der Vielfalt | 
|  |  | * der hohen [[Rechenleistung|Leistung]] | 
|  |  | * der guten [[Konfiguration (Computer)|Konfigurierbarkeit]] | 
|  | 
 |  | 
 | 
|  | Innerhalb der `http`-Sektionen können auch ein oder mehrere Sektionen `server { [...]}` angelegt werden, was im Kontext von nginx einem "virtuellen Server" entspricht (was das äquivalent zu "virtual hosts" beim Apache Server ist)
 |  | wird nginx bei vielen anderen großen Services wie | 
|  | * In den `server` Sektionen erfolgt die Konfiguration von z. B. DocumentRoot, auf welcher IP-Adresse und auf welchem Port nginx lauscht, die Namensauflösung etc |  | * [[WordPress|WordPress.com]] | 
|  |  | * [[GitHub]] | 
|  |  | * [[SourceForge]] | 
|  |  | * [[ComputerBase]] | 
|  |  | * [[Golem.de]] | 
|  |  | * FastMail | 
|  |  | * [[Wikimedia]] | 
|  |  | * [[ImageShack]] | 
|  |  | * [[Hulu (Streaminganbieter)|Hulu]] | 
|  |  | * [[Doodle (Dienst)|Doodle]] | 
|  |  | * [[Netflix]] | 
|  | 
 |  | 
 | 
|  | Es muss mindestens eine `server` Sektion vorhanden sein
 |  | eingesetzt.  | 
|  | * Es können aber auch ohne weiteres mehrere Sektion aufgeführt werden
 |  | 
|  | * nginx arbeitet die `server` Sektionen von oben nach unten ab
 |  | 
|  | * Treffen die Bedingungen in der Sektion auf die Anfrage zu, werden die entsprechenden Daten ausgeliefert
 |  | 
|  | * Bei komplexen Konfigurationen sollte man deshalb auf die Reihenfolge der verschiedenen `server` Sektionen achten
 |  | 
|  | 
 |  | 
 | 
|  | Standardmäßig werden diese Daten in einer oder mehreren Dateien im Verzeichnis '''/etc/nginx/sites-available''' abgelegt und aktiviert
 |  | Aufgrund der geringen Größe und der [[Reverse Proxy|reverse-proxy-Funktionalität]] ist nginx zudem beliebt, um die wahre Adresse der Kontrollserver von [[Botnet]]zen zu verschleiern | 
|  | * Das Aktivieren geschieht dadurch,dass man einen [:ln:symbolische Link]der Datei '''/etc/nginx/sites-available/NAME_DER_DATEI''' nach '''/etc/nginx/sites-enabled/''' anlegt
 |  | 
|  | 
 |  | 
 | 
|  | In derStandardinstallation ist bereits die Datei '''default''' vorhanden und aktiviert
 |  | Gemäß Erhebungen des Unternehmens [[Netcraft]] betrug die Anzahl der von nginx bedienten Server im Mai 2019 387,5 Millionen, was einem Marktanteil vom 29,2 Prozent entspräche | 
|  | * Diese Datei kann man um eigene `server` Sektionen erweitern,wie im folgenden Beispiel gezeigt wird
 |  | 
|  | 
 |  | 
 | 
|  | Zum Deaktivieren reicht es,den entsprechenden symbolischen Link aus dem Verzeichnis '''/etc/nginx/sites-enabled''' zu löschen
 |  | Laut [[Netcraft]]-Statistik wurden im Februar 2025 19,6 % aller Webserver mit nginx betrieben; rund 227 Millionen Webserver, die Tendenz ist leicht fallend. Nginx verliert unter anderem Marktanteil an [[Cloudflare]], [[OpenResty]] und an sonstige Anbieter | 
|  | 
 |  | 
 | 
|  | === Konfiguration ===
 |  | ; Verbreitung | 
|  | ; Minimalbeispiel
 |  | Nginx wird (Stand Februar 2024) | 
|  | Im folgenden Beispiel wird die vorhandene Konfigurationsdatei '''default''' um eine eigene Route erweitert,die eine einfache HTML-Seite ausgeben soll |  | *  bei rund 32 % der 10.000 Webseiten mit dem höchsten Traffic verwendet | 
|  |  | * Im Februar 2017 betrug der Marktanteil des Nginx-[[Hypertext Transfer Protocol|HTTP]]-Servers in Deutschland 8,6 %, | 
|  |  | * in Österreich 9,6 % | 
|  |  | * in der Schweiz 10,8 % | 
|  | 
 |  | 
 | 
|  | Dazu öffnet man die Datei '''default''' mit einem Editor mit Root-Rechten[4][5] undfügt nach der Zeile `server_name: _;`
 |  | === Lizenzen === | 
|  |  | * Freie Version ([https://opensource.org/licenses/BSD-2-Clause BSD-2-Clause]) | 
|  |  | * Kostenpflichtige Version ([https://www.nginx.com/products/nginx/ nginx Plus]) mit zusätzlichem Support und weiteren Modulen | 
|  | 
 |  | 
 | 
|  | die folgenden Zeilen ein: |  | ; Kommerzielle Version „NGINX Plus“ | 
|  |  | Der Grundstein für die kostenpflichtige Premium-Version mit Support- und Sonderfunktionen wurde im Juli 2011 gelegt, indem das kommerzielle Unternehmen „Nginx, Inc.“ gegründet wurde, auf dessen Basis kostenpflichtiger Support und Module vertrieben werden | 
|  | 
 |  | 
 | 
|  | {{{
 |  | Die kommerzielle Version wird Unternehmen unter dem Namen „NGINX Plus“ angeboten | 
|  |         location /test {
 |  | * Gleich zu Beginn erhielt die neu gegründete Firma 3 Millionen Dollar [[Wagniskapital|Risikokapital]] von [[Michael Dell]] und anderen Kapitalgebern | 
|  |                 root /var/www/html/test;
 |  | * 2018 erhielt nginx von verschiedenen Investoren, darunter [[Goldman Sachs]], 43 Millionen US-Dollar | 
|  | 		try_files $uri $uri/ =404;
 |  | * Am 11. März 2019 wurde der Kauf der Firma durch [[F5 Networks]] für 670 Millionen US-Dollar bekannt gegeben | 
|  |         }
 |  | * Am 11. Dezember 2019 wurden die Geschäftsräume von nginx Inc. wegen einer angeblichen Copyrightverletzung gegenüber [[Rambler (Suchmaschine)|Rambler Internet Holding]] durchsucht | 
|  | }}}
 |  | 
|  | 
 |  | 
 | 
|  | Erklärung:
 |  | == Installation == | 
|  |  * Die erste Zeile legt fest, dass der folgenden Block an Direktiven für die Route `/test` gilt
 |  | <syntaxhighlight lang="bash" highlight="1" line copy> | 
|  |  * Die zweite Zeile legt das `root`-Verzeichnis, in dem nach (HTML-) Dateien gesucht wird, auf '''/var/www/html/test''' fest
 |  | sudo apt install nginx | 
|  |  * Die dritte Zeile besagt, dass ein "404 - not found" zurückgeliefert werden soll, wenn keine passende (HTML) Datei gefunden wurde
 |  | </syntaxhighlight> | 
|  |   |  | 
|  |   |  | 
|  | Die Datei '''default''' sieht somit nach dem Hinzufügen (ohne Kommentarzeilen) wie folgt aus:
 |  | 
|  |   |  | 
|  | {{{
 |  | 
|  | server {
 |  | 
|  | 	listen 80 default_server;
 |  | 
|  | 	listen [::]:80 default_server;
 |  | 
|  |   |  | 
|  | 	root /var/www/html;
 |  | 
|  |   |  | 
|  | 	index index.html index.htm index.nginx-debian.html;
 |  | 
|  |   |  | 
|  | 	server_name _;
 |  | 
|  |   |  | 
|  |         location /test {
 |  | 
|  |                 root /var/www/html/test;
 |  | 
|  | 		try_files $uri $uri/ =404;
 |  | 
|  |         }
 |  | 
|  |   |  | 
|  | 	location / {
 |  | 
|  | 		try_files $uri $uri/ =404;
 |  | 
|  | 	}
 |  | 
|  | }
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | Jetzt muss man noch das Verzeichnis '''/var/www/html/test''' anlegen und darin eine HTML-Datei '''index.html''' erstellt werden
 |  | 
|  |   |  | 
|  | Die geänderte Konfigurationsdatei wird mit dem folgenden Befehl auf Fehler getestet:
 |  | 
|  |   |  | 
|  | {{{#!vorlage Befehl
 |  | 
|  | sudo nginx -t
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | Der Aufruf von `http://localhost/test` sollte jetzt die selbst angelegte HTML-Seite anzeigen
 |  | 
|  |   |  | 
|  | Möchte man die Route `/test` in einer eigenen Konfigurationsdatei namens '''test''' hinterlegen, sollte die Datei so aussehen:
 |  | 
|  |   |  | 
|  | {{{
 |  | 
|  | server {
 |  | 
|  |   |  | 
|  |     listen 80;
 |  | 
|  |     listen [::]:80;
 |  | 
|  |   |  | 
|  | 	root /var/www/html/test;
 |  | 
|  | 	index index.html;
 |  | 
|  |   |  | 
|  | 	server_name test;
 |  | 
|  |   |  | 
|  | 	location /test {
 |  | 
|  | 		try_files $uri $uri/ =404;
 |  | 
|  | 	}
 |  | 
|  | }
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | Dann muss noch der symbolisch Link nach '''/etc/nginx/sites-enabled''' angelegt und die Konfiguration von nginx neu geladen werden:
 |  | 
|  |   |  | 
|  | {{{#!vorlage Befehl
 |  | 
|  | sudo nginx -s reload
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | === nginx als Reverse-Proxy ===
 |  | 
|  | Der nginx Webserver ist auch recht beliebt zum Einsatz als "Reverse Proxy"
 |  | 
|  | * Dabei nimmt der Server die Anfrage aus dem Internet an, leitet diese an einen lokal laufenden Applikationsserver weiter und liefert anschließend dessen Antwort aus
 |  | 
|  | * So ist z. B. im [:Python:]-Umfeld der Einsatz von nginx als Reverse Proxy in Kombination mit dem (lokal laufenden) WSGI-Applikationsserver [:Gunicorn:] oder uwsgi eine durchaus beliebte Lösung
 |  | 
|  |   |  | 
|  | Im einfachsten Fall benötigt man in der `server` Konfiguration von nginx nur die folgenden beiden Zeilen:
 |  | 
|  |   |  | 
|  | {{{
 |  | 
|  | location / {
 |  | 
|  |                 proxy_pass http://127.0.0.1:8000;
 |  | 
|  | }
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | Damit werden alle Anfragen an diese `location` - im obigen Beispiel als das Root-Verzeichnis der Domäne -  an `http://127.0.0.1:8000` weitergeleitet, wo dann ein Applikationsserver läuft
 |  | 
|  |   |  | 
|  | Trotz der Weiterleitung übergibt nginx den angesteuerten Pfad (z.B. `http://example.com/neu`, und nicht `http://127.0.0.1:8000/`)
 |  | 
|  |   |  | 
|  | Weiterführende Informationen findet man in der [https://www.nginx.com/resources/admin-guide/reverse-proxy/ Dokumention] {en} des Servers
 |  | 
|  |   |  | 
|  | == Steuerung von nginx ==
 |  | 
|  | Nginx bildet sich aus einem „Master”-Prozess und vielen „Slave”- bzw. „Client”-Prozessen
 |  | 
|  | * Man steuert nginx mit dem Master-Prozess, den man mit dem Befehl `nginx` anspricht
 |  | 
|  | * Dies geht nach folgendem Prinzip:
 |  | 
|  |   |  | 
|  | {{{#!vorlage Befehl
 |  | 
|  | nginx [-s signal] [-c filename] [-p prefix] [-g directives]
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | Falls eine andere Konfigurationsdatei als '''/etc/nginx/nginx.conf''', z. B. zu Testzwecken, verwendet werden soll, startet man nginx folgendermaßen:
 |  | 
|  |   |  | 
|  | {{{#!vorlage Befehl
 |  | 
|  | sudo nginx -c /pfad/der/konfigurationsdatei
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | Nützlich ist auch die Option `-t`, welche die Konfiguration von nginx testet
 |  | 
|  | * Nach jeder Änderung eine Konfigurationsdatei sollte man von daher
 |  | 
|  |   |  | 
|  | {{{#!vorlage Befehl
 |  | 
|  | sudo nginx -t
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | aufrufen und schauen, ob Fehler in einer der Konfigurationsdateien vorliegen
 |  | 
|  | * Wenn nicht, kann die Konfiguration neu eingelesen werden, so dass diese aktiv wird:
 |  | 
|  |   |  | 
|  | {{{#!vorlage Befehl
 |  | 
|  | sudo nginx -s reload
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | Bei der Installationaus den Paketquellen wird nginx beim Systemstart über eine [:systemd:] Service Unit automatisch gestartet, welche über [:systemd/systemctl:systemctl] kontrolliert werden kann
 |  | 
|  |   |  | 
|  | == Tipps & Tricks ==
 |  | 
|  | === Loadbalancing mit nginx ===
 |  | 
|  | [wikipedia:Loadbalancing:] ist standardmäßig in nginx vorhanden und schlägt laut [https://www.robhost.de/adminblog/archives/227-Nginx-vs-Pound-Klarer-Sieg-fuer-Nginx-als-Loadbalancer.html diesem Artikel] {de} [wikipedia:Pound_(Software):Pound] deutlich
 |  | 
|  | * Im folgenden Beispiel verteilt nginx die Last auf 3 Server:
 |  | 
|  | {{{
 |  | 
|  | http {
 |  | 
|  |   upstream loadbalancer {
 |  | 
|  |     server 127.0.0.1:8000;
 |  | 
|  |     server 127.0.0.1:8001;
 |  | 
|  |     server 127.0.0.1:8002;
 |  | 
|  |   }
 |  | 
|  |   |  | 
|  |   server {
 |  | 
|  |     listen 80;
 |  | 
|  |     server_name www.example.com example.com;
 |  | 
|  |     location / {
 |  | 
|  |       proxy_pass http://loadbalancer;
 |  | 
|  |     }
 |  | 
|  |   }
 |  | 
|  | }
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | Zur Erklärung: Im Upstream `loadbalancer` sind drei (Web-)Server vorhanden und mit ihren jeweiligen Daten (`IP:Port`) angegeben
 |  | 
|  | * Im `server { [...] }`-Block hört nginx an den Domains `www.example.com` und `example.com` an Port 80 und leitet die Anfrage an den upstream weiter
 |  | 
|  |   |  | 
|  | === Rewriting === |  | 
|  | nginx unterstützt URL-Rewriting nativ und kann mithilfe von Regex ([wikipedia:Regulärer Ausdruck:]) Anfragen umschreiben
 |  | 
|  | * So kann zum Beispiel eine Domain `example.com/artikel.php?id=123` zu `example.com/artikel/123` vereinfacht werden, ohne dass der Nutzer weitergeleitet werden muss
 |  | 
|  | * Das Rewriting kann im Hintergrund auf Server-Ebene geschehen
 |  | 
|  | * Um Rewriting zu aktivieren, fügt man folgendes in seine Konfiguration in einem `server { [...] }`-Block ein:
 |  | 
|  |   |  | 
|  | {{{
 |  | 
|  | rewrite  ^/artikel/(.*)$  /artikel.php?id=$1?  last;
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | Der reguläre Ausdruck `^/artikel/(.*)$` bedeutet folgendes: Existiert in der aufgerufenen Domain an irgendeiner Stelle die Zeichenfolge `/artikel/` wird sämtliches hinter dieser an `artikel.php` als GET-Parameter `id` übergeben
 |  | 
|  |   |  | 
|  | Dieses Rewriting passiert mit der Flag `last` nur intern
 |  | 
|  | * nginx bietet folgende Flags zur Auswahl an:
 |  | 
|  |   |  | 
|  | {{{#!vorlage Tabelle
 |  | 
|  | `last/break`
 |  | 
|  | Internes Rewriting ohne Weiterleitung
 |  | 
|  | +++
 |  | 
|  | `redirect`
 |  | 
|  | Leitet den Nutzer auf die Seite weiter (HTTP 302 - Temporäre Weiterleitung)
 |  | 
|  | +++
 |  | 
|  | `permanent`
 |  | 
|  | Leitet den Nutzer auf die Seite weiter (HTTP 301 - Dauerhafte Weiterleitung)
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | {{{#!vorlage Warnung
 |  | 
|  | Ohne eine gesetzte Flag gibt nginx den Fehler HTTP 500 zurück
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | Weitere Hilfe, Tipps und Tricks findet man im [https://wiki.nginx.org/HttpRewriteModule nginx-Wiki] {en}
 |  | 
|  |   |  | 
|  | == Absicherung von nginx == |  | 
|  | Man stelle sich vor, ein Hacker würde eine Datei via PHP/Perl/Python in das Verzeichnis '''/uploads/''' hochladen
 |  | 
|  | * Diese Datei ist mit Schadcode infiziert und würde bei der Ausführung dem Server schaden
 |  | 
|  | * Wenn jetzt aber die Ausführung der Datei nicht verboten wird, könnte der Hacker seinen Angriff starten
 |  | 
|  | * Um das zu verhindern, fügt man in den `server { [...] }`-Block folgendes ein:
 |  | 
|  |   |  | 
|  | {{{
 |  | 
|  | if ($uri !~ "^/uploads/") {
 |  | 
|  |     fastcgi_pass 127.0.0.1:9000;
 |  | 
|  | }
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | Dies löst aus, dass alle Dateien, die sonst über die FastCGI-Schnittstelle an Port 9000 laufen würden, in allen Ordnern mit dem Namen '''uploads''' nicht mehr ausgeführt werden
 |  | 
|  |   |  | 
|  | == nginx mit anderen Programmiersprachen ==
 |  | 
|  | Die Nutzung von nginx in Kombination mit [:PHP:] ist im Artikel [:nginx/PHP:] beschrieben, die in Kombination mit [:Perl:] im Artikel [:nginx/Perl:]
 |  | 
|  |   |  | 
|  | == Problembehebung ==
 |  | 
|  | [[Bild(Wiki/Icons/hint.png, 64, align=right)]]
 |  | 
|  | Siehe auch [https://wiki.nginx.org/Pitfalls Nginx Pitfalls] {en} (sinngemäß: typische Fehler)
 |  | 
|  |   |  | 
|  | ===Bei allen PHP-Dateien wird nur "No input file specified"angezeigt ===
 |  | 
|  | Dies ist ein üblicher Fehler, der aber schnell behoben werden kann
 |  | 
|  | * Es gibt zwei hauptsächliche Ursachen:
 |  | 
|  |   |  | 
|  | ==== Ursache 1====
 |  | 
|  | Folgende Konfiguration wird für PHP-Dateien benutzt:
 |  | 
|  | {{{
 |  | 
|  | location ~ \.php$ {
 |  | 
|  |         fastcgi_pass   localhost:9000;
 |  | 
|  |         include           fastcgi_params; # Statt fastcgi.conf
 |  | 
|  | }
 |  | 
|  | }}}
 |  | 
|  | Da nur in der Datei '''fastcgi.conf''' spezifiziert ist, dass PHP-Dateien auch unabhängig von dem `document root`-Verzeichnis verarbeitet werden sollen, sollte man diese statt `fastcgi_params` verwenden
 |  | 
|  | * Wer `fastcgi_params` trotzdem nutzen möchte, kann statt des Ersetzen folgende Zeile hinzufügen:
 |  | 
|  | {{{
 |  | 
|  |         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | ==== Ursache 2 ====
 |  | 
|  | Folgende (vereinfachte) Konfiguration wird benutzt:
 |  | 
|  | {{{
 |  | 
|  | location / {
 |  | 
|  |         root               /var/www/html;
 |  | 
|  | }
 |  | 
|  |   |  | 
|  | location ~ \.php$ {
 |  | 
|  |         fastcgi_pass   localhost:9000;
 |  | 
|  |         include          fastcgi.conf;
 |  | 
|  | }
 |  | 
|  | }}}
 |  | 
|  | Da die location `~ \.php$` eine andere als `/` ist, ist für die FastCGI-Schnittstelle unbekannt, wo das Wurzelverzeichnis für diesen `server { [...] }`-Block ist, weil dieses nur in `location /` festgelegt ist
 |  | 
|  | * Folgende Konfiguration löst dieses Problem:
 |  | 
|  |   |  | 
|  | {{{
 |  | 
|  | root               /var/www/html; # 'root' wird nun global für den server { [...] }-Block festgelegt
 |  | 
|  |   |  | 
|  | location ~ \.php$ {
 |  | 
|  |                      fastcgi_pass   localhost:9000;
 |  | 
|  |                      include          fastcgi.conf;
 |  | 
|  | }
 |  | 
|  | }}}
 |  | 
|  |   |  | 
|  | === nginx zeigt bei existierenden Dateien im Browser "403"an ===
 |  | 
|  | Benutzerberechtigungen überprüfen! Diese Meldung kommt meistens, wenn nginxbzw
 |  | 
|  | * der Benutzer, mit dem nginx läuft, keinen Zugriff auf die Dateien hat
 |  | 
|  | 
 |  | 
 | 
|  | === Es erscheint auf allen Websites nur noch die Meldung "502 Bad Gateway" === |  | == Aufruf == | 
|  | Dies passiert, wenn die FastCGI-Schnittstelle oder die Adresse von `proxy_pass` nicht für nginx erreichbar ist (auf Servern kann dies mit [:Lynx:] überprüft werden)
 |  | <syntaxhighlight lang="bash" highlight="1" line copy> | 
|  | * Gründe können z. B. ein Absturz der Schnittstelle sein
 |  | </syntaxhighlight> | 
|  | 
 |  | 
 | 
|  | === nginx verarbeitet keine .htaccess-Dateien === |  | === Optionen === | 
|  | Das ist korrekt, da alle Änderungen bzw. Einstellungen in der Konfigurationsdatei '''nginx.conf''' vorgenommen werden
 |  | {| class="wikitable sortable options gnu big" | 
|  | * Und Absicht -diverse Gründe, wieso es unter nginx keine htaccess-Dateien gibt, finden sich im [https://wiki.nginx.org/LikeApache-htaccess FAQ von nginx] {en} - kurz gesagt ist '''.htaccess''' ist ein Performancekiller und potentielle Sicherheitslücke
 |  | |- | 
|  | * Allerdings gibt es diverse [https://winginx.com/htaccess Konverter] {en}von htaccess zu nginx, um den Umstieg leicht zu machen
 |  | ! Unix !! GNU !! Parameter !! Beschreibung | 
|  |  | |- | 
|  |  | | || || ||  | 
|  |  | |- | 
|  |  | |} | 
|  | 
 |  | 
 | 
|  | === nginx startet nicht, da die Konfigurationsdatei angeblich falsch ist === |  | === Parameter === | 
|  | Die Konfigurationsdatei überprüfen, ob überall am Ende jedes Befehls/jeder Zeile ein Semikolon steht, und, ob alle `server {[...] }`-Blöcke auch mit dem Zeichen "}"geschlossen sind!
 |  | === Umgebungsvariablen === | 
|  |  | === Exit-Status === | 
|  |  | {| class="wikitable options col1center big" | 
|  |  | |- | 
|  |  | ! Wert !! Beschreibung | 
|  |  | |- | 
|  |  | | 0 || Erfolg | 
|  |  | |- | 
|  |  | | >0  || Fehler | 
|  |  | |} | 
|  | 
 |  | 
 | 
|  | === Obwohl nginx richtig konfiguriert ist, passiert beim Aufrufen von Subdomains nichts ===
 |  | <noinclude> | 
|  | Bei diesem Problem wird vermutlich eine Fehlkonfiguration der DNS-Zonen vorliegen
 |  | 
|  | 
 |  | 
 | 
|  | === Wieso bleibt nginx an der Meldung "[...]:80 failed (98:Address already in use)"hängen? === |  | == Anhang == | 
|  | nginx oder ein anderer Webserver benutzt bereits den Port 80
 |  | === Siehe auch === | 
|  | * Es kann immer nur ein Programm an dem Port lauschen
 |  | <div style="column-count:2"> | 
|  |  | <categorytree hideroot=on mode="pages">{{BASEPAGENAME}}</categorytree> | 
|  |  | </div> | 
|  |  | ---- | 
|  |  | {{Special:PrefixIndex/{{BASEPAGENAME}}/}} | 
|  | 
 |  | 
 | 
|  | === Wieso kann Plesk nginx nicht konfigurieren? === |  | === Dokumentation === | 
|  | Das liegt daran, dass [wikipedia:Plesk:] [:Apache:] nutzt und nicht auf nginxzugeschnitten ist
 |  | # https://wiki.nginx.org | 
|  |  | # https://docs.nginx.com/nginx | 
|  | 
 |  | 
 | 
|  | === Die Log-Datei bleibt leer, warum? ===
 |  | ; Man-Page  | 
|  | Falls der Nutzer geändert wurde, mit dem nginxläuft, muss dieser über Schreibzugriff auf diese Datei verfügen
 |  | # [https://manpages.debian.org/trixie/nginx/nginx.8.en.html nginx(8)] | 
|  | 
 |  | 
 | 
|  | === Weshalb läuft eine FastCGI-Schnittstelle, die andere aber nicht? === |  | === Links === | 
|  | Eventuell sollen beide Schnittstellen den selben Port verwenden
 |  | ==== Projekt ==== | 
|  | * Allerdings kann sich jeweils nur eine Schnittstelle an einen Port binden |  | * https://nginx.org | 
|  | 
 |  | 
 | 
|  | == Links == |  | ==== Weblinks ==== | 
|  |  * [https://wiki.nginx.org/nginx Wiki] {en} - Dokumentation
 |  | # https://de.wikipedia.org/wiki/Nginx | 
|  |  * [https://docs.nginx.com/nginx/ nginx Docs] {en} - Dokumentation für nginx Plus, welche aber auch in weiten Teil für die freie Variante von nginx zutrifft
 |  | # [https://sherbers.de/howto/nginx/ Sichere SSL/TLS Konfiguration mit Nginx]  - Ausführliche Anleitung | 
|  |  * [https://hg.nginx.org/nginx/ Quellcode Repositry] {en} von nginx bei Mercurial
 |  | # [https://library.linode.com/web-servers/nginx/ Hosting Websites with Nginx]  - Weiterführende Konfiguration | 
|  |  * [https://sherbers.de/howto/nginx/ Sichere SSL/TLS Konfiguration mit Nginx]{de} - Ausführliche Anleitung
 |  | # [https://www.my-it-brain.de/wordpress/certificate-pinning-mit-nginx/ Certificate Pinning mit Nginx]  - Artikel zum "Public Key Pinning for HTTP" (RFC 7469) | 
|  |  * [https://library.linode.com/web-servers/nginx/ Hosting Websites with Nginx]{en} - Weiterführende Konfiguration
 |  | # [https://nhi1.selfhost.co/wiki/index.php?title=HOWTO_use_virtual_hosts_in_NGINX_to_run_multiple_web-application_on_a_single_server VHOST example]  - für das Heim-Netzwerk | 
|  |  * [https://www.my-it-brain.de/wordpress/certificate-pinning-mit-nginx/ Certificate Pinning mit Nginx]{de} - Artikel zum "Public Key Pinning for HTTP" (RFC 7469)
 |  | 
|  |  * [https://nhi1.selfhost.co/wiki/index.php?title=HOWTO_use_virtual_hosts_in_NGINX_to_run_multiple_web-application_on_a_single_server VHOST example]{en} - für das Heim-Netzwerk
 |  | 
|  | 
 |  | 
 | 
|  | #tag: Netzwerk, Internet, Server
 |  | </noinclude> |