Zum Inhalt springen

Nginx: Unterschied zwischen den Versionen

Aus Foxwiki
Zeile 98: Zeile 98:
Weitere Hilfe, Tipps und Tricks findet man im [https://wiki.nginx.org/HttpRewriteModule nginx-Wiki] {en}
Weitere Hilfe, Tipps und Tricks findet man im [https://wiki.nginx.org/HttpRewriteModule nginx-Wiki] {en}


== Absicherung von nginx ==
== Sicherheit ==
Man stelle sich vor, ein Hacker würde eine Datei via PHP/Perl/Python in das Verzeichnis '''/uploads/''' hochladen
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
* Diese Datei ist mit Schadcode infiziert und würde bei der Ausführung dem Server schaden

Version vom 11. Oktober 2025, 10:23 Uhr

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

  • 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 w3techs.com Statistik {en} von ca. 40% aller Websites genutzt (Stand: September 2017)

  • Damit ist nginx der am zweithäufigsten eingesetzte Webserver

Neben der freien Version von nginx, welche auch unter eine freien Lizenz {en} steht, gibt es auch eine kostenpflichtige Variante namens nginx Plus {en}, für den die Firma nginx Inc. zusätzlichen Support und Module anbietet

Installation

sudo apt install nginx

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 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 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 nginx-Wiki {en}

Sicherheit

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:]

Links

* nginx Wiki {en} - Dokumentation
* nginx Docs {en} - Dokumentation für nginx Plus, welche aber auch in weiten Teil für die freie Variante von nginx zutrifft
* Quellcode Repositry {en} von nginx bei Mercurial
* Sichere SSL/TLS Konfiguration mit Nginx {de} - Ausführliche Anleitung
* Hosting Websites with Nginx {en} - Weiterführende Konfiguration
* Certificate Pinning mit Nginx {de} - Artikel zum "Public Key Pinning for HTTP" (RFC 7469)
* VHOST example {en} - für das Heim-Netzwerk
  1. tag: Netzwerk, Internet, Server