15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
21.10.2024

Wie man Nginx verwaltet: Starten, Stoppen, Neustarten und Neuladen unter Linux

Nginx ist ein hochleistungsfähiger, ereignisgesteuerter Webserver und Reverse-Proxy, der weltweit Millionen von Produktionsumgebungen bedient. Die Verwaltung seines Lebenszyklus — Starten, Stoppen, Neustarten und Neuladen — wird über das Linux-Init-System gesteuert, entweder systemd (Ubuntu 16.04+, CentOS 7+, Debian 8+) oder das ältere SysVinit-Framework. Der entscheidende Unterschied zwischen restart und reload ist nicht kosmetischer Natur: Ein Neustart beendet alle aktiven Verbindungen, während ein Neuladen einen unterbrechungsfreien Konfigurationswechsel durchführt, indem neue Worker-Prozesse geforkt werden, bevor die alten ordnungsgemäß abgebaut werden.

Dieser Leitfaden behandelt alle erforderlichen Betriebsbefehle, die zugrunde liegenden Mechanismen, die Vorab-Konfigurationsvalidierung, protokollbasierte Diagnosen und die Sonderfälle, die in der Produktion zu stillen Fehlern führen.

Voraussetzungen

Bevor Sie Nginx-Verwaltungsbefehle ausführen, bestätigen Sie Folgendes:

  • Sie verfügen über Root-Zugriff oder ein Benutzerkonto mit sudo-Berechtigungen.
  • Nginx ist installiert (nginx -v sollte eine Versionszeichenkette zurückgeben).
  • Sie wissen, welches Init-System Ihre Distribution verwendet (systemctl --version bestätigt systemd; seine Abwesenheit deutet auf SysVinit oder einen anderen Manager hin).

Wenn Sie einen neuen Server bereitstellen, verwendet eine VPS Hosting-Umgebung mit Ubuntu 22.04 LTS oder Debian 12 standardmäßig systemd, was der empfohlene Weg für alle neuen Deployments ist.

Das Nginx-Prozessmodell verstehen

Nginx läuft als Master-Prozess und ein oder mehrere Worker-Prozesse. Der Master-Prozess liest die Konfiguration, bindet sich an privilegierte Ports (80, 443) und verwaltet den Worker-Lebenszyklus. Worker verarbeiten die eigentlichen Client-Verbindungen. Diese Architektur ist der Grund, warum reload für die Produktion sicher ist: Der Master startet neue Worker mit der aktualisierten Konfiguration, während bestehende Worker laufende Anfragen fertig bearbeiten und dann sauber beenden.

Wenn Sie einen harten restart ausführen, wird der Master-Prozess selbst beendet und neu gestartet, wobei alle offenen Verbindungen getrennt werden. Reservieren Sie dies für Situationen, in denen der Master-Prozess selbst in einem schlechten Zustand ist oder nach binären Upgrades.

Nginx mit systemd verwalten (Moderne Linux-Distributionen)

systemd ist der Standard-Dienstverwaltung auf allen modernen Linux-Distributionen. Nginx integriert sich über eine Unit-Datei, die sich typischerweise unter /lib/systemd/system/nginx.service befindet.

Nginx starten

sudo systemctl start nginx

Dies aktiviert die Nginx-Dienst-Unit. Wenn der Master-Prozess sich nicht an einen Port binden kann oder auf einen Konfigurationsfehler stößt, meldet systemd sofort einen Fehler. Überprüfen Sie den Exit-Code mit echo $? — ein Wert ungleich null bedeutet, dass der Start fehlgeschlagen ist.

Nginx stoppen

sudo systemctl stop nginx

Dies sendet SIGTERM an den Nginx-Master-Prozess, der dann die Worker anweist, aktive Anfragen abzuschließen, bevor er herunterfährt. Wenn Worker nicht innerhalb des konfigurierten Timeouts beenden, sendet systemd SIGKILL. Auf einem stark ausgelasteten Server kann dies zu unterbrochenen Verbindungen führen — verwenden Sie stattdessen wann immer möglich reload.

Nginx neu starten

sudo systemctl restart nginx

Ein Neustart ist ein sequenzielles Stoppen gefolgt von einem Start. Alle aktiven Verbindungen werden beendet. Verwenden Sie dies nur wenn:

  • Die Nginx-Binärdatei selbst aktualisiert wurde.
  • Der Master-Prozess nicht reagiert.
  • Sie lauschende Sockets freigeben und neu binden müssen (z. B. nach einer Port-Änderung).

Führen Sie immer einen Konfigurationstest vor dem Neustart durch (im Abschnitt Validierung unten beschrieben).

Nginx neu laden (Unterbrechungsfreie Konfigurationsanwendung)

sudo systemctl reload nginx

Dies ist der korrekte Befehl zum Anwenden von Konfigurationsänderungen in der Produktion. Intern sendet systemd SIGHUP an den Nginx-Master-Prozess. Der Master liest nginx.conf erneut, validiert sie und forkt neue Worker-Prozesse. Alte Worker bedienen weiterhin bestehende Verbindungen, bis sie inaktiv sind, und beenden sich dann. Der gesamte Übergang ist für Endbenutzer nahtlos.

Kritischer Sonderfall: Wenn die neue Konfiguration einen Fehler enthält, schlägt reload auf einigen Distributionen still fehl — die alte Konfiguration bleibt aktiv, aber kein Fehler wird im Terminal angezeigt. Deshalb ist die Vorab-Validierung mit nginx -t vor jedem Neuladen unverhandelbar.

Nginx-Status prüfen

sudo systemctl status nginx

Dieser Befehl zeigt den Dienststatus (active (running), inactive (dead), failed), die PID des Master-Prozesses, Speicher- und CPU-Auslastung sowie die letzten Zeilen des Journal-Protokolls. Es ist die schnellste erste Diagnosemaßnahme bei jedem Nginx-Problem.

Beispielausgabe für eine gesunde Instanz:

● nginx.service - A high performance web server and a reverse/proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2025-01-13 10:22:04 UTC; 2h 15min ago
       Docs: man:nginx(8)
    Process: 1234 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on;
   Main PID: 1235 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 6.4M
        CPU: 312ms
     CGroup: /system.slice/nginx.service
             ├─1235 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ├─1236 "nginx: worker process"
             └─1237 "nginx: worker process"

Nginx für den Autostart beim Booten aktivieren

sudo systemctl enable nginx

Ohne dies startet Nginx nach einem Server-Neustart nicht automatisch. Kombinieren Sie es mit dem start-Befehl in einem einzigen Aufruf:

sudo systemctl enable --now nginx

Nginx-Autostart deaktivieren

sudo systemctl disable nginx

Nginx mit SysVinit verwalten (Legacy-Systeme)

SysVinit findet sich auf End-of-Life-Distributionen wie CentOS 6 und Ubuntu 14.04. Der service-Wrapper bietet eine einheitliche Schnittstelle zu Init-Skripten in /etc/init.d/.

AktionSysVinit-Befehl
Starten`sudo service nginx start`
Stoppen`sudo service nginx stop`
Neu starten`sudo service nginx restart`
Neu laden`sudo service nginx reload`
Status`sudo service nginx status`

Wenn Sie noch SysVinit-basierte Systeme in der Produktion betreiben, wird eine Migration zu einer unterstützten Distribution dringend empfohlen. Diese Systeme erhalten keine Sicherheits-Patches mehr, was ein erhebliches Risiko für jeden internetfähigen Server darstellt.

systemd vs. SysVinit: Befehlsvergleich

OperationsystemdSysVinit
Dienst starten`systemctl start nginx``service nginx start`
Dienst stoppen`systemctl stop nginx``service nginx stop`
Dienst neu starten`systemctl restart nginx``service nginx restart`
Konfiguration neu laden`systemctl reload nginx``service nginx reload`
Status prüfen`systemctl status nginx``service nginx status`
Beim Booten aktivieren`systemctl enable nginx``chkconfig nginx on`
Beim Booten deaktivieren`systemctl disable nginx``chkconfig nginx off`
Protokolle anzeigen`journalctl -u nginx``/var/log/nginx/error.log`

Konfigurationsvalidierung vor jeder Dienständerung

Dies ist die wichtigste Betriebsgewohnheit bei der Verwaltung von Nginx. Eine fehlerhafte Konfigurationsdatei führt dazu, dass restart fehlschlägt und Ihr Server offline bleibt.

sudo nginx -t

Ein bestandener Test gibt zurück:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Für eine ausführliche Ausgabe, die auch die aufgelöste Konfiguration ausgibt (nützlich beim Debuggen von include-Direktiven):

sudo nginx -T

nginx -T gibt die gesamte zusammengeführte Konfiguration auf stdout aus, was es für die Prüfung komplexer Setups mit mehreren Server-Blöcken in /etc/nginx/conf.d/ oder /etc/nginx/sites-enabled/ unschätzbar macht.

Arbeitsablauf für sichere Konfigurationsänderungen:

# 1. Edit your configuration
sudo nano /etc/nginx/nginx.conf

# 2. Validate — stop here if errors are reported
sudo nginx -t

# 3. Apply with zero downtime
sudo systemctl reload nginx

# 4. Confirm the service is still healthy
sudo systemctl status nginx

Signale direkt an den Nginx-Master-Prozess senden

Für Szenarien, in denen systemd nicht verfügbar ist oder Sie eine feinkörnige Kontrolle benötigen, akzeptiert Nginx POSIX-Signale direkt über nginx -s:

sudo nginx -s reload    # Equivalent to SIGHUP — graceful config reload
sudo nginx -s reopen    # Reopen log files (used after log rotation)
sudo nginx -s stop      # Fast shutdown (SIGTERM)
sudo nginx -s quit      # Graceful shutdown — waits for workers to finish

Die Master-Prozess-PID wird standardmäßig in /var/run/nginx.pid gespeichert. Sie können Signale auch manuell senden:

sudo kill -HUP $(cat /var/run/nginx.pid)

Das reopen-Signal ist in Log-Rotations-Pipelines besonders wichtig. Wenn logrotate /var/log/nginx/access.log verschiebt, schreibt Nginx weiterhin in den alten Dateideskriptor, bis Sie reopen senden, woraufhin es den neuen Dateipfad erstellt und beschreibt.

Fehler diagnostizieren: Protokolle und Journal

Wenn Nginx nicht startet oder neu geladen werden kann, liefern zwei Quellen Diagnosedaten.

systemd-Journal

sudo journalctl -u nginx --since "10 minutes ago"

Für die Live-Ausgabe während eines Neustartversuchs:

sudo journalctl -u nginx -f

Nginx-Fehlerprotokoll

sudo tail -n 50 /var/log/nginx/error.log

Für die Echtzeitüberwachung:

sudo tail -f /var/log/nginx/error.log

Häufige Fehlermuster und ihre Ursachen:

  • bind() to 0.0.0.0:80 failed (98: Address already in use) — Ein anderer Prozess (Apache, eine frühere Nginx-Instanz) belegt Port 80. Identifizieren Sie ihn mit sudo ss -tlnp | grep :80.
  • open() "/var/log/nginx/error.log" failed (13: Permission denied) — Der Nginx-Worker-Benutzer hat keinen Schreibzugriff auf das Protokollverzeichnis.
  • nginx: [emerg] unknown directive — Ein Tippfehler oder eine nicht unterstützte Modul-Direktive in nginx.conf. Die nginx -t-Ausgabe enthält die genaue Datei und Zeilennummer.
  • connect() failed (111: Connection refused) while connecting to upstream — Nginx läuft, aber die Upstream-Anwendung (PHP-FPM, Node.js) nicht. Dies erscheint im Fehlerprotokoll, nicht beim Start.

Nginx auf Servern mit einem Control Panel verwalten

Wenn Ihr Server ein Control Panel wie cPanel oder Plesk betreibt, kann Nginx als Reverse-Proxy-Schicht vor Apache oder als primärer Webserver verwaltet werden. In diesen Umgebungen verwenden Sie keine rohen systemctl-Befehle, um Nginx neu zu starten, ohne die Service-Orchestrierung des Panels zu verstehen — einige Panels überschreiben die systemd-Unit-Datei und verwalten Nginx über ihre eigenen Daemon-Supervisoren.

Für cPanel-verwaltete Umgebungen lautet der korrekte Neustartbefehl typischerweise:

/scripts/restartsrv_nginx

Ein VPS mit cPanel-Deployment verwaltet die Dienstverwaltung über WHMs Service Manager, der eine GUI-Oberfläche neben den oben genannten CLI-Skripten bereitstellt.

Für Umgebungen, in denen Sie die volle manuelle Kontrolle ohne ein Panel wünschen, erkunden Sie die verfügbaren VPS Control Panels, um eine Verwaltungsschicht zu finden, die zu Ihrem Betriebsmodell passt.

Nginx auf dedizierter Hardware

Hochverkehrs-Deployments, die Nginx als Load Balancer oder TLS-Terminierungspunkt betreiben, profitieren erheblich von dedizierten Ressourcen. Auf einem Dedizierten Server können Sie Worker-Prozessanzahlen genau auf physische CPU-Kerne abstimmen, große worker_connections-Werte ohne Konkurrenz mit anderen Mietern konfigurieren und Kernel-Level-Optimierungen (SO_REUSEPORT, sendfile, tcp_nopush) voll ausschöpfen. Die Dienstverwaltungsbefehle sind identisch mit VPS-Umgebungen — der Unterschied liegt in dem, was Sie konfigurieren können, nicht darin, wie Sie den Dienst steuern.

Wenn Ihre Nginx-Instanz HTTPS-Traffic terminiert, stellen Sie sicher, dass Ihre TLS-Zertifikate aktuell sind. Abgelaufene Zertifikate verursachen sofortige Verbindungsfehler, die systemctl status nginx nicht anzeigt — der Dienst erscheint gesund, während Clients SSL-Handshake-Fehler erhalten. Die proaktive Verwaltung Ihrer SSL-Zertifikate verhindert diese Art von stillen Fehlern.

Betriebliche Entscheidungsmatrix

Verwenden Sie diese Matrix, um die korrekte Verwaltungsaktion für eine gegebene Situation auszuwählen:

SituationKorrekte AktionGrund
`nginx.conf` oder einen Server-Block bearbeitet`nginx -t` dann `reload`Unterbrechungsfreie Konfigurationsanwendung
Nginx-Binärdatei wurde aktualisiert`restart`Neue Binärdatei muss in den Speicher geladen werden
Port-Bindung geändert`restart`Master muss Sockets neu binden
Log-Rotation abgeschlossen`nginx -s reopen`Dateideskriptoren zu neuen Protokollpfaden neu öffnen
Master-Prozess reagiert nicht`stop` dann `start`Erzwungene Beendigung und Neuinitialisierung
Dienstgesundheit überprüfen`systemctl status nginx`Zeigt PID, Betriebszeit, aktuelle Protokollzeilen
Startfehler diagnostizieren`journalctl -u nginx` + `nginx -t`Vollständiger Fehlerkontext aus beiden Quellen
Prüfen, welcher Prozess Port 80 belegt`ss -tlnpgrep :80`Port-Konflikte vor dem Start identifizieren

Wichtige technische Erkenntnisse

  • Führen Sie immer sudo nginx -t vor restart oder reload aus. Ein fehlgeschlagener Test verhindert, dass Sie einen laufenden Server mit einer fehlerhaften Konfiguration offline nehmen.
  • Bevorzugen Sie reload gegenüber restart in der Produktion. Es ist nicht störend und behandelt 99 % der Konfigurationsänderungsszenarien.
  • nginx -s quit ist sicherer als nginx -s stop, wenn Sie manuell herunterfahren müssen — es wartet, bis Worker aktive Verbindungen abgebaut haben.
  • systemctl enable nginx ist von systemctl start nginx getrennt. Das Vergessen von enable bedeutet, dass Nginx einen Neustart nicht überlebt.
  • nginx -T (Großbuchstaben) gibt die vollständige aufgelöste Konfiguration aus, einschließlich aller eingebundenen Dateien — verwenden Sie es vor größeren Änderungen, um die effektive Konfiguration zu überprüfen.
  • Control-Panel-Umgebungen haben ihre eigenen Neustartskripte. Die Verwendung roher systemd-Befehle in cPanel oder Plesk kann zu Zustandsinkonsistenzen führen.
  • Überwachen Sie /var/log/nginx/error.log kontinuierlich während jedes Konfigurations-Rollouts. Upstream-Fehler und Berechtigungsprobleme erscheinen hier, nicht in systemctl status.

Häufig gestellte Fragen

Was ist der Unterschied zwischen nginx restart und nginx reload?

restart beendet den Master-Prozess und alle Worker, trennt aktive Verbindungen und startet dann neu. reload sendet SIGHUP an den Master, der neue Worker mit der aktualisierten Konfiguration forkt, während alte Worker bestehende Anfragen fertig bearbeiten — was zu null Ausfallzeit führt.

Warum schlägt sudo systemctl restart nginx fehl, obwohl nginx -t erfolgreich ist?

Ein bestandener Konfigurationstest garantiert keinen erfolgreichen Start. Häufige Ursachen sind Port-Konflikte (ein anderer Prozess ist bereits an Port 80 oder 443 gebunden), fehlende SSL-Zertifikatsdateien, die in der Konfiguration referenziert werden, oder unzureichende Dateideskriptor-Limits. Überprüfen Sie journalctl -u nginx unmittelbar nach dem Fehler für den spezifischen Fehler.

Wie wende ich eine Konfigurationsänderung ohne Ausfallzeit an?

Führen Sie sudo nginx -t zur Validierung aus, dann sudo systemctl reload nginx. Dies führt einen unterbrechungsfreien Worker-Austausch durch. Bestehende Verbindungen werden nicht unterbrochen.

Wie lasse ich Nginx nach einem Server-Neustart automatisch starten?

Führen Sie sudo systemctl enable nginx aus. Dies erstellt einen Symlink im entsprechenden systemd-Zielverzeichnis. Kombinieren Sie es mit sudo systemctl start nginx oder verwenden Sie sudo systemctl enable --now nginx, um in einem einzigen Befehl zu aktivieren und zu starten.

Wo befinden sich Nginx-Protokolle und wie lese ich sie in Echtzeit?

Standardmäßig befindet sich das Fehlerprotokoll unter /var/log/nginx/error.log und das Zugriffsprotokoll unter /var/log/nginx/access.log. Verfolgen Sie beide in Echtzeit mit sudo tail -f /var/log/nginx/error.log. Für strukturierte Protokollansicht mit Zeitstempeln und Schweregradfilterung verwenden Sie sudo journalctl -u nginx -f.

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen