So sieht die Meldung aus
2026/10/29 14:02:11 [alert] 1234#1234: *98765 768 worker_connections are not enough while connecting to upstream, client: 203.0.113.5, server: example.com, request: "GET /api/ HTTP/2.0", upstream: "http://127.0.0.1:8080/api/"Häufige Ursachen
worker_connectionsimevents-Block steht noch auf dem niedrigen Wert der mitgeliefertennginx.conf, und der Verkehr ist darüber hinausgewachsen.- Ein langsamer Upstream hält Verbindungen lange offen, sie stauen sich (siehe auch die Seiten zu 504 und 502).
- Langlebige Verbindungen wie WebSocket, SSE oder Long Polling belegen einen Platz für ihre ganze Lebensdauer.
- Das Limit in nginx liegt höher, als das Betriebssystem erlaubt: Das Open-Files-Limit des nginx-Prozesses ist zu klein, der Wert lässt sich nicht nutzen.
- Eine Flut von Anfragen durch Bots oder einen fehlerhaften Client.
Prüfen
- Aktuelle Worker-Einstellungen
nginx -T 2>/dev/null | grep -nE 'worker_(processes|connections|rlimit_nofile)' - Wie oft taucht der Alert auf?
grep -c 'worker_connections are not enough' /var/log/nginx/error.log - Open-Files-Limit des laufenden Master-Prozesses
grep 'open files' /proc/$(cat /run/nginx.pid)/limits - Socket-Übersicht (aufgebaut vs. wartend)
ss -s
Lösung
- Das Limit in
/etc/nginx/nginx.conferhöhen:events { worker_connections 4096; }, dazuworker_processes auto;beibehalten. - Genug Dateideskriptoren erlauben:
worker_rlimit_nofile 8192;im Hauptkontext, beim Proxy mindestens das Doppelte vonworker_connections. - Wenn systemd den Dienst begrenzt, mit
systemctl edit nginxein Drop-in anlegen undLimitNOFILE=auf einen passenden Wert setzen. - Die Last selbst senken: den langsamen Upstream beheben,
keepalivezum Upstream aktivieren und missbräuchliche Clients mitlimit_reqbremsen. - Anwenden:
nginx -t && systemctl restart nginx(ein Reload ändert das von systemd gesetzte Prozesslimit nicht).
Häufige Fragen
Wie viele Clients kann nginx maximal bedienen?
Grob worker_processes × worker_connections, beim Proxy durch zwei geteilt, weil jede weitergeleitete Anfrage eine Client- und eine Upstream-Verbindung braucht.
Ist ein höherer Wert immer besser?
Nein. Jede Verbindung kostet Speicher und einen Dateideskriptor. Erhöhe moderat, sorge für ein passendes Deskriptor-Limit und behebe die Ursache, wenn sich Verbindungen wegen eines langsamen Backends stauen.