nginx — Webserver, Reverse Proxy und Load Balancer
Praxis-Guide zu nginx — Service-Verwaltung, CLI-Befehle, Configtest, Virtual Hosts, TLS mit Certbot und Log-Analyse auf Debian/Ubuntu und RHEL.
NGINX ist einer der meistgenutzten Webserver im Netz und glänzt überall dort, wo viele gleichzeitige Verbindungen auf wenig Ressourcen treffen: Dank seiner event-getriebenen Architektur bedient ein einzelner Worker-Prozess Tausende Verbindungen parallel. Über die reine Auslieferung statischer Dateien hinaus dient NGINX als Reverse Proxy, Load Balancer und TLS-Terminator vor deinen Anwendungen. Die Steuerung läuft über das schlanke nginx-Kommando und – auf systemd-Distributionen – über systemctl. Dieser Guide bündelt die Befehle für den Alltag: Service-Verwaltung, Configtest, Virtual Hosts, Zertifikate mit Certbot und Log-Analyse.
Service-Verwaltung (systemctl)
systemctl start nginx — Startet den NGINX-Webserver.
systemctl start nginxsystemctl stop nginx — Stoppt den NGINX-Webserver sofort.
systemctl stop nginxsystemctl restart nginx — Startet NGINX neu (Stopp + Start). Trennt kurzzeitig alle aktiven Verbindungen.
systemctl restart nginxsystemctl reload nginx — Lädt die NGINX-Konfiguration unterbrechungsfrei neu, ohne aktive Verbindungen zu trennen.
systemctl reload nginxsystemctl status nginx — Zeigt Service-Status, PID, Laufzeit und die letzten Logausgaben von NGINX.
systemctl status nginxsystemctl enable nginx — Aktiviert den automatischen Start von NGINX beim Systemstart.
systemctl enable nginxsystemctl disable nginx — Deaktiviert den automatischen Start von NGINX beim Booten.
systemctl disable nginxsystemctl is-active nginx — Prüft, ob NGINX gerade läuft. Gibt 'active' oder 'inactive' zurück.
systemctl is-active nginxnginx-CLI-Befehle
nginx -t — Prüft die NGINX-Konfiguration auf Syntaxfehler. Immer vor einem Reload ausführen.
nginx -tnginx -T — Prüft die Konfiguration und gibt die komplette aufgelöste Konfiguration auf stdout aus.
nginx -Tnginx -s reload — Sendet das Reload-Signal an den laufenden NGINX-Master-Prozess (unterbrechungsfreier Config-Reload).
nginx -s reloadnginx -s stop — Sendet das Stop-Signal an NGINX (schnelles Herunterfahren, trennt Verbindungen sofort).
nginx -s stopnginx -s quit — Sendet das Quit-Signal an NGINX (sauberes Herunterfahren, wartet auf das Ende laufender Requests).
nginx -s quitnginx -s reopen — Öffnet die Logdateien neu. Nach einer Logrotation, um in die neue Datei zu schreiben.
nginx -s reopennginx -v — Zeigt die NGINX-Version.
nginx -vnginx -V — Zeigt NGINX-Version, Compiler-Flags und alle einkompilierten Module.
nginx -Vnginx -c /path/to/nginx.conf — Startet NGINX mit einer bestimmten Konfigurationsdatei statt der Standarddatei.
nginx -c /etc/nginx/nginx.confnginx -p /path/to/prefix — Setzt den NGINX-Prefix-Pfad (zum Auflösen relativer Pfade in der Konfiguration).
nginx -p /etc/nginxnginx -t && systemctl reload nginx — Validiert die Konfiguration und lädt nur bei fehlerfreiem Test neu (empfohlener Workflow).
nginx -t && systemctl reload nginxProzess-Verwaltung
ps aux | grep nginx — Listet alle laufenden NGINX-Prozesse auf (Master- und Worker-Prozesse).
ps aux | grep nginxcat /var/run/nginx.pid — Zeigt die PID des NGINX-Master-Prozesses.
cat /var/run/nginx.pidkill -HUP $(cat /var/run/nginx.pid) — Sendet das HUP-Signal an den Master-Prozess, um die Konfiguration unterbrechungsfrei neu zu laden.
kill -HUP $(cat /var/run/nginx.pid)kill -USR1 $(cat /var/run/nginx.pid) — Öffnet die Logdateien neu per USR1-Signal (entspricht nginx -s reopen).
kill -USR1 $(cat /var/run/nginx.pid)kill -WINCH $(cat /var/run/nginx.pid) — Fährt die Worker-Prozesse sauber herunter (der Master bleibt aktiv, genutzt bei Upgrades).
kill -WINCH $(cat /var/run/nginx.pid)Virtual Hosts (Debian/Ubuntu)
ls /etc/nginx/sites-available/ — Listet alle verfügbaren Virtual-Host-Konfigurationsdateien auf.
ls /etc/nginx/sites-available/ls /etc/nginx/sites-enabled/ — Listet alle aktuell aktivierten Virtual-Host-Konfigurationen auf (Symlinks).
ls /etc/nginx/sites-enabled/ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ — Aktiviert einen Virtual Host durch Anlegen eines Symlinks in sites-enabled/.
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/rm /etc/nginx/sites-enabled/example.com — Deaktiviert einen Virtual Host durch Entfernen des Symlinks aus sites-enabled/.
rm /etc/nginx/sites-enabled/example.comln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ && nginx -t && systemctl reload nginx — Aktiviert eine Site, validiert die Konfiguration und lädt NGINX in einem Schritt neu.
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ && nginx -t && systemctl reload nginxnginx -T | grep server_name — Listet alle konfigurierten server_name-Werte über alle Virtual Hosts hinweg.
nginx -T | grep server_nameKonfigurationsverzeichnisse
/etc/nginx/nginx.conf — Haupt-Konfigurationsdatei von NGINX. Bindet sites-enabled/ und conf.d/ ein.
nano /etc/nginx/nginx.conf/etc/nginx/sites-available/ — Verzeichnis für Virtual-Host-Konfigurationsdateien (Debian/Ubuntu). Erst nach Symlink aktiv.
ls /etc/nginx/sites-available//etc/nginx/sites-enabled/ — Verzeichnis mit Symlinks auf aktive Virtual-Host-Konfigurationen (Debian/Ubuntu).
ls /etc/nginx/sites-enabled//etc/nginx/conf.d/ — Drop-in-Konfigurationsverzeichnis. Alle *.conf-Dateien hier werden automatisch eingebunden.
ls /etc/nginx/conf.d//etc/nginx/snippets/ — Wiederverwendbare Konfigurations-Snippets (z. B. ssl-params.conf, fastcgi-php.conf).
ls /etc/nginx/snippets//var/log/nginx/ — Standard-Logverzeichnis mit access.log und error.log.
ls /var/log/nginx/Logs
tail -f /var/log/nginx/access.log — Verfolgt das NGINX-Access-Log in Echtzeit.
tail -f /var/log/nginx/access.logtail -f /var/log/nginx/error.log — Verfolgt das NGINX-Error-Log in Echtzeit.
tail -f /var/log/nginx/error.logtail -f /var/log/nginx/error.log | grep 'crit\|emerg\|alert' — Beobachtet das Error-Log und filtert nur Meldungen auf kritischer Stufe.
tail -f /var/log/nginx/error.log | grep 'crit\|emerg'grep ' 500 \| 502 \| 503 ' /var/log/nginx/access.log — Findet 5xx-Server-Fehlerantworten im Access-Log.
grep ' 500 \| 502 \| 503 ' /var/log/nginx/access.logawk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20 — Zeigt die Top 20 IP-Adressen nach Anzahl der Requests aus dem Access-Log.
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20nginx -t 2>&1 | grep -v 'successful' — Führt einen Config-Test aus und zeigt nur Warnungen und Fehler (unterdrückt die OK-Meldung).
nginx -t 2>&1 | grep -v 'successful'journalctl -u nginx -f — Verfolgt die NGINX-Logausgabe über das systemd-Journal (inkl. Start-/Stopp-Ereignisse).
journalctl -u nginx -fjournalctl -u nginx --since '1 hour ago' — Zeigt NGINX-Journal-Einträge der letzten Stunde.
journalctl -u nginx --since '1 hour ago'SSL / TLS & Certbot
certbot --nginx -d example.com -d www.example.com — Bezieht und installiert automatisch ein Let's-Encrypt-Zertifikat für NGINX.
certbot --nginx -d example.com -d www.example.comcertbot certonly --nginx -d example.com — Bezieht ein Zertifikat, ohne die NGINX-Konfiguration zu ändern (SSL manuell verwalten).
certbot certonly --nginx -d example.comcertbot renew --dry-run — Simuliert den automatischen Erneuerungsprozess, um zu prüfen, ob er erfolgreich wäre.
certbot renew --dry-runcertbot renew — Erneuert alle fälligen Zertifikate (per Cron oder systemd-Timer ausführen).
certbot renewcertbot certificates — Listet alle verwalteten Let's-Encrypt-Zertifikate und ihre Ablaufdaten auf.
certbot certificatesopenssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/self.key -out /etc/nginx/ssl/self.crt — Erzeugt ein selbstsigniertes SSL-Zertifikat mit 365 Tagen Gültigkeit.
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crtopenssl dhparam -out /etc/nginx/dhparam.pem 2048 — Erzeugt eine Diffie-Hellman-Parameterdatei für einen stärkeren SSL-Schlüsselaustausch.
openssl dhparam -out /etc/nginx/dhparam.pem 2048openssl s_client -connect example.com:443 -servername example.com — Testet eine SSL-Verbindung und inspiziert die Zertifikatskette.
openssl s_client -connect example.com:443 -servername example.comDebugging & Inspektion
curl -I http://localhost — Sendet einen HEAD-Request an das lokale NGINX und inspiziert die Response-Header.
curl -I http://localhostcurl -I -H 'Host: example.com' http://localhost — Testet einen bestimmten Virtual Host durch Überschreiben des Host-Headers.
curl -I -H 'Host: example.com' http://localhostcurl -sk https://localhost -o /dev/null -w '%{http_code}' — Prüft den HTTP-Statuscode, den NGINX über HTTPS zurückgibt.
curl -sk https://localhost -o /dev/null -w '%{http_code}'nginx -T | grep -A5 'server_name example.com' — Findet den vollständigen Server-Block einer bestimmten Domain in der ausgegebenen Konfiguration.
nginx -T | grep -A5 'server_name example.com'ss -tlnp | grep nginx — Zeigt, auf welchen Ports NGINX lauscht.
ss -tlnp | grep nginxstrace -p $(cat /var/run/nginx.pid) -e trace=network — Verfolgt Netzwerk-Systemaufrufe des NGINX-Master-Prozesses für Low-Level-Debugging.
strace -p $(cat /var/run/nginx.pid) -e trace=network Fazit
NGINX belohnt einen disziplinierten Workflow: Prüfe jede Änderung mit nginx -t, bevor du mit nginx -s reload oder systemctl reload nginx neu lädst – der Reload erfolgt unterbrechungsfrei, sodass aktive Verbindungen nicht abreißen. Nach einer Logrotation sorgt nginx -s reopen dafür, dass NGINX in die frischen Logdateien schreibt. Wer Server-, Location- und Upstream-Blöcke feiner abstimmen will, findet die passenden Direktiven in der Konfigurationsreferenz nginx-conf.
Weiterführende Links
- nginx – offizielle Dokumentation – Referenz aller Direktiven und Module (englisch)
- Nginx – Wikipedia – Hintergrund und Geschichte