Wie kann ich die Anzahl der gleichzeitigen Verbindungen in NGINX erhöhen?

Melden
  1. Einleitung
  2. Anpassungen in der NGINX-Konfiguration
  3. Betriebssystemlimits anpassen
  4. Optimierungen und weitere Optionen
  5. Zusammenfassung

Einleitung

NGINX ist ein sehr leistungsfähiger Webserver und Reverse-Proxy, der standardmäßig für hohe Lasten optimiert ist.

Es gibt jedoch Fälle, in denen Sie die maximale Anzahl der gleichzeitigen Verbindungen erhöhen müssen, etwa wenn Ihre Webseite oder Anwendung stark frequentiert wird.

Dies erfordert Anpassungen an der NGINX-Konfiguration sowie an den Betriebssystem-Einstellungen, um das volle Potenzial auszuschöpfen.

Anpassungen in der NGINX-Konfiguration

Die wichtigste Einstellung für die Anzahl der gleichzeitigen Verbindungen in NGINX ist der Parameter worker_connections.

Diese Direktive gibt an, wie viele Verbindungen jeder NGINX-Worker-Prozess gleichzeitig öffnen kann.

Wenn Sie beispielsweise vier Worker-Prozesse haben und jeder kann 1024 Verbindungen handhaben, dann sind insgesamt 4096 Verbindungen möglich.

Die Direktive worker_processes steuert, wie viele Worker-Prozesse NGINX startet.

Üblicherweise wird hier die Anzahl der CPU-Kerne angegeben, damit NGINX die Hardware effizient nutzt.

In der NGINX-Konfigurationsdatei (meist /etc/nginx/nginx.conf) sieht das beispielhaft so aus:

worker_processes 4;events { worker_connections 10240;}

Mit dieser Konfiguration könnte NGINX theoretisch bis zu 4 x 10240 = 40960 Verbindungen gleichzeitig verwalten.

Beachten Sie, dass eine Verbindung nicht immer einer Session entspricht, da persistent connections, HTTP/2 und Keep-Alive-Verbindungen Einfluss haben.

Betriebssystemlimits anpassen

NGINX kann jedoch nur so viele Verbindungen öffnen, wie das Betriebssystem zulässt.

Daher ist es wichtig, die Systemlimits für offene Dateien (File Descriptors) zu erhöhen, da jede Verbindung mindestens eine offene Datei repräsentiert.

Die Limits werden in der Datei /etc/security/limits.conf oder in entsprechenden Systemd-Einheiten eingestellt.

Wichtig sind dort die Werte nofile, also die Anzahl der offenen Dateien, für den Benutzer unter dem NGINX läuft (meist www-data oder nginx).

www-data soft nofile 65536www-data hard nofile 65536

Zusätzlich sollten Sie überprüfen, ob NGINX selbst oder Systemd diese Limits überschreiben.

Bei Systemd-Diensten können Sie mit einer Datei /etc/systemd/system/nginx.service.d/override.conf folgende Anpassungen vornehmen:

LimitNOFILE=65536

Nach Änderungen an Systemd-Konfigurationen sollte unbedingt ein systemctl daemon-reload durchgeführt und der Dienst neu gestartet werden.

Optimierungen und weitere Optionen

Neben den oben genannten Kernparametern gibt es weitere Einstellungen, mit denen Sie die Verbindungsanzahl und -leistung verbessern können.

Beispielsweise kann die Verwendung von worker_rlimit_nofile in der NGINX-Konfiguration dazu beitragen, die Dateideskriptoren-Limits direkt für NGINX zu setzen:

worker_rlimit_nofile 65536;

Auch die Aktivierung von multi_accept on; im events-Block sorgt dafür, dass Worker-Prozesse mehrere Verbindungen gleichzeitig akzeptieren, was die Performance bei vielen Verbindungen verbessert.

Für Hochlast-Szenarien können auch weitere Betriebssystemparameter, wie net.core.somaxconn oder fs.file-max, angepasst werden. Diese steuern z.B. die maximale Warteschlangenlänge für Socket-Verbindungen oder die systemweite maximale Anzahl an offenen Dateien.

Zusammenfassung

Um die Anzahl gleichzeitiger Verbindungen in NGINX zu erhöhen, müssen Sie primär die Parameter worker_processes und worker_connections in der NGINX-Konfiguration anpassen.

Zudem sind Betriebssystemlimits für offene Dateien entscheidend und sollten entsprechend erweitert werden.

Nach allen Änderungen ist es wichtig, NGINX neu zu starten und seine Logs zu prüfen, um sicherzugehen, dass keine Fehler auftreten und die Änderungen Wirkung zeigen.

0

Kommentare