Zum Inhalt springen

Nginx: Unterschied zwischen den Versionen

Aus Foxwiki
 
(63 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 Webserver fü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 ist nginx der am zweithäufigsten eingesetzte Webserver
; nginx
* ausgesprochen wie englisches „engine-ex“
* Vergleich zu [[Apache]] weniger Resourcen verbraucht und schnell ist
* Aufgrund seiner eingebauten Reverse-Proxy Funktionalität wird nginx oft als vorgeschalteter Webserver für dahinterliegende Applikationsserver genutzt


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
ist eine
* [[Webserver]]-Software
* unter der [[BSD-Lizenz]] veröffentlichte
* von Igor Sysoev entwickelt


== Installation ==
* [[Reverse Proxy]]
sudo apt instll nginx
* [[E-Mail]]-Proxy ([[POP3]]/[[IMAP]])


== Konfiguration ==
=== Funktionsumfang ===
Alle Konfigurationsdateien von nginx liegen im Verzeichnis '''/etc/nginx/''', die Grundkonfigurationsdatei ist '''nginx.conf'''
Nginx ist modular aufgebaut
* Diese besteht aus den Sektionen `events { [...] }` und `http { [...] }`
* Kommentiert wird mit 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
; 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
* ...


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)
=== Verbreitung ===
* 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
Nginx wurde die Bedürfnisse der russischen Suchmaschine [[Rambler (Suchmaschine)|Rambler]] zugeschnitten und wird dort heute noch verwendet


Es muss mindestens eine `server` Sektion vorhanden sein
Aufgrund
* Es können aber auch ohne weiteres mehrere Sektion aufgeführt werden
* der Vielfalt
* nginx arbeitet die `server` Sektionen von oben nach unten ab
* der hohen [[Rechenleistung|Leistung]]
* Treffen die Bedingungen in der Sektion auf die Anfrage zu, werden die entsprechenden Daten ausgeliefert
* der guten [[Konfiguration (Computer)|Konfigurierbarkeit]]
* 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
wird nginx bei vielen anderen großen Services wie
* 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
* [[WordPress|WordPress.com]]
* [[GitHub]]
* [[SourceForge]]
* [[ComputerBase]]
* [[Golem.de]]
* FastMail
* [[Wikimedia]]
* [[ImageShack]]
* [[Hulu (Streaminganbieter)|Hulu]]
* [[Doodle (Dienst)|Doodle]]
* [[Netflix]]


In der Standardinstallation ist bereits die Datei '''default''' vorhanden und aktiviert
eingesetzt.
* 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
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


=== Konfiguration ===
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
; Minimalbeispiel
Im folgenden Beispiel wird die vorhandene Konfigurationsdatei '''default''' um eine eigene Route erweitert, die eine einfache HTML-Seite ausgeben soll


Dazu öffnet man die Datei '''default''' mit einem Editor mit Root-Rechten[4][5] und fügt nach der Zeile `server_name: _;`
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


die folgenden Zeilen ein:
; Verbreitung
Nginx wird (Stand Februar 2024)
*  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 %


{{{
=== Lizenzen ===
        location /test {
* Freie Version ([https://opensource.org/licenses/BSD-2-Clause BSD-2-Clause])
                root /var/www/html/test;
* Kostenpflichtige Version ([https://www.nginx.com/products/nginx/ nginx Plus]) mit zusätzlichem Support und weiteren Modulen
try_files $uri $uri/ =404;
        }
}}}


Erklärung:
; Kommerzielle Version „NGINX Plus“
* Die erste Zeile legt fest, dass der folgenden Block an Direktiven für die Route `/test` gilt
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 zweite Zeile legt das `root`-Verzeichnis, in dem nach (HTML-) Dateien gesucht wird, auf '''/var/www/html/test''' fest
* Die dritte Zeile besagt, dass ein "404 - not found" zurückgeliefert werden soll, wenn keine passende (HTML) Datei gefunden wurde


Die kommerzielle Version wird Unternehmen unter dem Namen „NGINX Plus“ angeboten
* Gleich zu Beginn erhielt die neu gegründete Firma 3 Millionen Dollar [[Wagniskapital|Risikokapital]] von [[Michael Dell]] und anderen Kapitalgebern
* 2018 erhielt nginx von verschiedenen Investoren, darunter [[Goldman Sachs]], 43 Millionen US-Dollar
* 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


Die Datei '''default''' sieht somit nach dem Hinzufügen (ohne Kommentarzeilen) wie folgt aus:
== Installation ==
 
<syntaxhighlight lang="bash" highlight="1" line copy>
{{{
sudo apt install nginx
server {
</syntaxhighlight>
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.&nbsp;B.&nbsp;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.&nbsp;B.&nbsp;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 Installation aus 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
== Aufruf ==
* nginx bietet folgende Flags zur Auswahl an:
<syntaxhighlight lang="bash" highlight="1" line copy>
</syntaxhighlight>


{{{#!vorlage Tabelle
=== Optionen ===
`last/break`
{| class="wikitable sortable options gnu big"
Internes Rewriting ohne Weiterleitung
|-
+++
! Unix !! GNU !! Parameter !! Beschreibung
`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
=== Parameter ===
Ohne eine gesetzte Flag gibt nginx den Fehler HTTP 500 zurück
=== Umgebungsvariablen ===
}}}
=== Exit-Status ===
{| class="wikitable options col1center big"
|-
! Wert !! Beschreibung
|-
| 0 || Erfolg
|-
| >0  || Fehler
|}


Weitere Hilfe, Tipps und Tricks findet man im [https://wiki.nginx.org/HttpRewriteModule nginx-Wiki] {en}
<noinclude>


== Absicherung von nginx ==
== Anhang ==
Man stelle sich vor, ein Hacker würde eine Datei via PHP/Perl/Python in das Verzeichnis '''/uploads/''' hochladen
=== Siehe auch ===
* Diese Datei ist mit Schadcode infiziert und würde bei der Ausführung dem Server schaden
<div style="column-count:2">
* Wenn jetzt aber die Ausführung der Datei nicht verboten wird, könnte der Hacker seinen Angriff starten
<categorytree hideroot=on mode="pages">{{BASEPAGENAME}}</categorytree>
* Um das zu verhindern, fügt man in den `server { [...] }`-Block folgendes ein:
</div>
----
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}


{{{
=== Dokumentation ===
if ($uri !~ "^/uploads/") {
; Man-Page
    fastcgi_pass 127.0.0.1:9000;
# [https://manpages.debian.org/trixie/nginx/nginx.8.en.html nginx(8)]
}
# https://wiki.nginx.org/
}}}
# https://docs.nginx.com/nginx/


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
=== Links ===
==== Projekt ====
* https://nginx.org/


== nginx mit anderen Programmiersprachen ==
==== Weblinks ====
Die Nutzung von nginx in Kombination mit [:PHP:] ist im Artikel [:nginx/PHP:] beschrieben, die in Kombination mit [:Perl:] im Artikel [:nginx/Perl:]
# https://de.wikipedia.org/wiki/Nginx
# [https://sherbers.de/howto/nginx/ Sichere SSL/TLS Konfiguration mit Nginx]  - Ausführliche Anleitung
# [https://library.linode.com/web-servers/nginx/ Hosting Websites with Nginx] - Weiterführende Konfiguration
# [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://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


== Links ==
{{DEFAULTSORT:nginx}}
* [https://wiki.nginx.org/ nginx Wiki] {en} - Dokumentation
{{DISPLAYTITLE: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://hg.nginx.org/nginx/ Quellcode Repositry] {en} von nginx bei Mercurial
* [https://sherbers.de/howto/nginx/ Sichere SSL/TLS Konfiguration mit Nginx] {de} - Ausführliche Anleitung
* [https://library.linode.com/web-servers/nginx/ Hosting Websites with Nginx] {en} - Weiterführende Konfiguration
* [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
[[Kategorie:Nginx]]
</noinclude>

Aktuelle Version vom 11. Oktober 2025, 12:16 Uhr

nginx - Russischer Webserver

Beschreibung

nginx
  • ausgesprochen wie englisches „engine-ex“
  • Vergleich zu Apache weniger Resourcen verbraucht und schnell ist
  • Aufgrund seiner eingebauten Reverse-Proxy Funktionalität wird nginx oft als vorgeschalteter Webserver für dahinterliegende Applikationsserver genutzt

ist eine

Funktionsumfang

Nginx ist modular aufgebaut

Module

Verbreitung

Nginx wurde die Bedürfnisse der russischen Suchmaschine Rambler zugeschnitten und wird dort heute noch verwendet

Aufgrund

wird nginx bei vielen anderen großen Services wie

eingesetzt.

Aufgrund der geringen Größe und der reverse-proxy-Funktionalität ist nginx zudem beliebt, um die wahre Adresse der Kontrollserver von Botnetzen zu verschleiern

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

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

Verbreitung

Nginx wird (Stand Februar 2024)

  • bei rund 32 % der 10.000 Webseiten mit dem höchsten Traffic verwendet
  • Im Februar 2017 betrug der Marktanteil des Nginx-HTTP-Servers in Deutschland 8,6 %,
  • in Österreich 9,6 %
  • in der Schweiz 10,8 %

Lizenzen

  • Freie Version (BSD-2-Clause)
  • Kostenpflichtige Version (nginx Plus) mit zusätzlichem Support und weiteren Modulen
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

  • Gleich zu Beginn erhielt die neu gegründete Firma 3 Millionen Dollar Risikokapital von Michael Dell und anderen Kapitalgebern
  • 2018 erhielt nginx von verschiedenen Investoren, darunter Goldman Sachs, 43 Millionen US-Dollar
  • 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 Internet Holding durchsucht

Installation

sudo apt install nginx

Aufruf

Optionen

Unix GNU Parameter Beschreibung

Parameter

Umgebungsvariablen

Exit-Status

Wert Beschreibung
0 Erfolg
>0 Fehler


Anhang

Siehe auch


Dokumentation

Man-Page
  1. nginx(8)
  2. https://wiki.nginx.org/
  3. https://docs.nginx.com/nginx/

Links

Projekt

Weblinks

  1. https://de.wikipedia.org/wiki/Nginx
  2. Sichere SSL/TLS Konfiguration mit Nginx - Ausführliche Anleitung
  3. Hosting Websites with Nginx - Weiterführende Konfiguration
  4. Certificate Pinning mit Nginx - Artikel zum "Public Key Pinning for HTTP" (RFC 7469)
  5. VHOST example - für das Heim-Netzwerk