Fehler 429: Anfragebegrenzung anpassen
Unsere Webserver begrenzen automatisch, wie viele Anfragen eine Website in kurzer Zeit bekommt. Das schützt deine Website und alle anderen auf dem Server vor Bots, Crawlern und Lastspitzen. Wird eine Grenze überschritten, antwortet der Server mit 429 Too Many Requests; nach kurzer Zeit geht es weiter.
Was gezählt wird
Gezählt werden nur Aufrufe von Seiten und Skripten. Bilder, CSS, JavaScript, Schriften, Videos, PDFs, Office-Dokumente und Archive zählen nicht. HTML-, XML-, TXT- und JSON-Adressen zählen mit, weil sie oft PHP erzeugt (Sitemaps, robots.txt, Feeds).
| Grenze | Standard |
|---|---|
| je Besucher-IP und Domain | 5 Anfragen pro Sekunde, kurzfristig bis zu 60 auf einmal (in einer Minute also bis zu 360) |
| Crawler und veraltete oder gefälschte Browserkennungen, gemeinsam je Domain | 2 Anfragen pro Sekunde, kurzfristig bis zu 20; Google und Bing sind ausgenommen |
| Domain insgesamt | 20 Anfragen pro Sekunde, kurzfristig bis zu 200 |
| Domain gleichzeitig in Bearbeitung | 30 Anfragen |
Für normale Besucher reicht das mit viel Reserve, auch für Seiten, die viel auf einmal nachladen, wie WordPress-Admin oder Shops. Eng wird es bei vielen Besuchern hinter einer gemeinsamen IP-Adresse (Firmennetz, Mobilfunk), bei Websites mit vielen AJAX-Aufrufen oder einer Schnittstelle und bei großen Shops. Tarnen sich Bots mit aktuellen Browserkennungen, greift die Grenze für die ganze Domain; dann können auch echte Besucher kurz 429 erhalten, der Server und alle anderen Websites bleiben stabil.
Erkennen
In Plesk unter Websites & Domains :: Domain :: Logs stehen abgewiesene Anfragen mit dem Status 429 im nginx-Zugriffsprotokoll und mit „limiting requests“ oder „limiting connections“ im nginx-Fehlerprotokoll. Der Eintrag zone "…" zeigt, welche Grenze gegriffen hat. Steht „dry run“ dabei, wurde nur protokolliert und nichts abgewiesen. Abgewiesene Anfragen erreichen PHP nicht und fehlen deshalb im Apache-Protokoll.
Anpassen
Die Grenzen deiner Domain stellst du selbst ein unter Websites & Domains :: Domain :: Hosting & DNS :: Apache & nginx im Feld Zusätzliche nginx-Direktiven. Plesk prüft die Eingabe beim Speichern und übernimmt sie sofort.
Eine eigene limit_req-Zeile ersetzt alle drei Standardgrenzen für Anfragen pro Sekunde. Trage deshalb immer alle drei Zeilen ein und ändere nur den Wert, der abweichen soll:
# Anfragebegrenzung für diese Domain, immer alle drei Zeilen limit_req zone=rl_ip_per_domain burst=60 nodelay; limit_req zone=rl_suspect_per_domain burst=20 nodelay; limit_req zone=rl_domain_total_20 burst=200 nodelay;
Die gleichzeitigen Anfragen passt du einzeln an, die limit_req-Zeilen brauchst du dafür nicht:
limit_conn rl_domain_total_conn 30;
Die Rate wählst du über die Zone, burst (die Menge, die kurzfristig auf einmal kommen darf) und die Zahl bei limit_conn frei:
| Zeile | Zone | Rate |
|---|---|---|
| je Besucher-IP | rl_ip_per_domain (Standard)rl_ip_per_domain_high |
5 pro Sekunde 10 pro Sekunde |
| Crawler und verdächtige Browser | rl_suspect_per_domain (Standard)rl_suspect_per_domain_low |
2 pro Sekunde 30 pro Minute |
| Domain insgesamt | rl_domain_total_5, rl_domain_total_10, rl_domain_total_20 (Standard), rl_domain_total_40 |
5, 10, 20 oder 40 pro Sekunde |
Typische Anpassungen
| Ziel | Zusätzliche nginx-Direktiven |
|---|---|
| Großer Shop, viele gleichzeitige Besucher | limit_conn rl_domain_total_conn 60; |
| Kleine Website, weniger gleichzeitige Anfragen | limit_conn rl_domain_total_conn 15; |
| Viele AJAX-Aufrufe, Schnittstelle, Kassensystem | limit_req zone=rl_ip_per_domain_high burst=100 nodelay;limit_req zone=rl_suspect_per_domain burst=20 nodelay;limit_req zone=rl_domain_total_40 burst=200 nodelay; |
| Website unter Bot-Last | limit_req zone=rl_ip_per_domain burst=60 nodelay;limit_req zone=rl_suspect_per_domain_low burst=5 nodelay;limit_req zone=rl_domain_total_10 burst=50 nodelay;limit_conn rl_domain_total_conn 8; |
| Nur je IP begrenzen, ohne Crawler-Filter und Domain-Grenze | limit_req zone=rl_ip_per_domain burst=60 nodelay; |
| Anfragen pro Sekunde nicht begrenzen (gleichzeitige Anfragen bleiben begrenzt) | limit_req zone=rl_off; |
| Erst testen: nur protokollieren, nichts abweisen | limit_req_dry_run on;limit_conn_dry_run on; |
Die gleichzeitigen Anfragen liegen am besten über der Zahl der PHP-Prozesse deiner Website (Plesk unter Hosting & DNS :: PHP bei pm.max_children, Standard 30). Kurze Spitzen warten dann einen Moment bei PHP, statt sofort 429 zu bekommen. Erhöhe pm.max_children bei Überlast nicht: Mehr Prozesse verschärfen das Problem.
Soll deine Domain ganz ohne Begrenzung laufen oder bist du unsicher, welcher Wert passt, schreib uns an support@baebeca.de.
Gesperrte Adressen wie xmlrpc.php beantwortet der Server mit 403 statt 429: Fehler 403: Access denied by server policy.