503 Service Unavailable: überlastet oder in Wartung?
· 6 Min. Lesezeit
Was der Fehler bedeutet
Mit 503 sagt der Webserver: „Ich bin da, kann dich aber gerade nicht bedienen.“ Anders als beim 502 ist dahinter nicht unbedingt etwas kaputt. Der Server schickt den 503 absichtlich, in drei Situationen: Er ist im Wartungsmodus, er hat ein Limit erreicht, das er einhalten soll (Verbindungen, Worker, Bandbreite, eine Ratenbegrenzung), oder er ist so überlastet, dass er Anfragen abweist, um nicht ganz umzufallen. Ein 503 kann einen Retry-After-Header tragen, der sagt, wann es sich lohnt, wiederzukommen; Suchmaschinen werten einen kurzen 503 als vorübergehend und werfen die Seite nicht aus dem Index.
Häufige Ursachen
- Wartungsmodus hängen geblieben. WordPress legt während Updates eine
.maintenance-Datei an und antwortet so lange mit 503. Bricht das Update ab, bleibt die Datei, und der Fehler mit ihr. Laravel, Magento, Drupal und die meisten Frameworks haben einen vergleichbaren Schalter. - Überlastung. Mehr Anfragen, als die konfigurierten Worker schaffen. Apaches
MaxRequestWorkerserreicht, PHP-FPMspm.max_childrenausgeschöpft, oder die Datenbank so langsam, dass jeder Worker wartet. - Ein Hosting-Limit. Shared Hoster deckeln CPU-Sekunden, gleichzeitige Prozesse oder „Entry Processes“ je Konto. Ist die Grenze erreicht, antwortet der Hoster für deine Website mit 503.
- Ein Backend aus der Rotation genommen. Hinter einem Load Balancer oder CDN heißt 503: Alle Backends haben den Health-Check nicht bestanden. Cloudflare zeigt eine eigene 503-Seite, wenn der Ursprungsserver überlastet oder ratenbegrenzt ist.
- Bots und Scraper. Ein Crawler, der Tausende Seiten zieht, oder ein Brute-Force-Angriff auf
wp-login.phpoderxmlrpc.phpverbraucht die Worker, und echte Besucher bekommen 503. - Volle Festplatte oder voller Arbeitsspeicher. Der Dienst läuft, kann aber keine Sessions, Cache-Dateien oder Logs mehr schreiben; manche Anwendungen antworten dann mit 503.
Wenn du Besucher bist
Eine Minute warten und neu laden; ein 503 ist meist kurz. Bleibt eine Website stundenlang auf 503, hat der Betreiber einen hängenden Wartungsmodus oder ein Kapazitätsproblem, und nur er kann es beheben.
Wenn es deine Website ist: zuerst prüfen
Lass den Website-Down-Checker laufen, um den 503 von außen zu bestätigen und zu sehen, ob ein CDN oder dein eigener Server ihn geschickt hat. Dann entscheide: Hast du oder dein CMS in den letzten Minuten ein Update gestartet? Wenn ja, ist es der Wartungsmodus. Wenn nein, ist es Kapazität.
Auf deinem eigenen Server:
# läuft der Webserver überhaupt?
systemctl status nginx
systemctl status apache2
# Last, Speicher, Festplatte: die drei Zahlen hinter den meisten 503
uptime
free -m
df -h
# wer hämmert gerade auf die Website ein?
sudo tail -n 5000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
Ein Load Average weit über der Zahl der CPU-Kerne, weniger als 100 MB freier Speicher oder eine einzelne IP mit Tausenden Anfragen in den letzten Minuten erklären jeweils einen 503.
Lösungen auf deinem eigenen Server
1. Hängenden Wartungsmodus beenden
WordPress: Lösch die Datei .maintenance im Wurzelverzeichnis der Website und ruf die Seite auf. Wurde das Update abgebrochen, ist Plugin oder Core vielleicht halb installiert; wiederhol das Update im Dashboard oder mit der WP-CLI:
rm /var/www/example.com/.maintenance
wp core verify-checksums
wp plugin update --all
Laravel: php artisan up. Magento: bin/magento maintenance:disable. Drupal: $settings['maintenance_mode'] auf false setzen oder drush state:set system.maintenance_mode 0.
2. Die Flut stoppen
Blockiere die auffällige IP oder das Netz, dann richte eine Ratenbegrenzung ein, damit der nächste es nicht wieder schafft.
# eine Adresse sperren (Debian/Ubuntu mit ufw)
sudo ufw deny from 203.0.113.45
# oder mit nftables
sudo nft add rule inet filter input ip saddr 203.0.113.45 drop
Ratenbegrenzung in nginx für Login-Seiten (im http-Block, dann im Server-Block):
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
location = /wp-login.php {
limit_req zone=login burst=5 nodelay;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
Apache: mod_evasive oder mod_qos leisten dasselbe; fail2ban mit den Jails apache-badbots und wordpress sperrt Wiederholungstäter automatisch.
3. Dem Server Kapazität geben
Ist die Last echter Besucherverkehr und kein Missbrauch, erhöhe die Worker-Grenzen so weit, wie der Arbeitsspeicher es erlaubt. Apache (mpm_event): MaxRequestWorkers. PHP-FPM: pm.max_children. Prüf vorher den Speicher je Worker: ps -ylC php-fpm8.3 --sort:rss. Dann testen und neu laden:
sudo apachectl configtest && sudo systemctl reload apache2
sudo php-fpm8.3 -t && sudo systemctl reload php8.3-fpm
Schalte einen Seiten-Cache ein (WordPress: ein Caching-Plugin oder der FastCGI-Cache in nginx), damit eine Spitze nicht mehr für jede Anfrage PHP startet. Eine Seite aus dem Cache kostet einen Bruchteil einer Millisekunde, eine WordPress-Seite ohne Cache Hunderte.
4. Festplatte freiräumen
sudo du -xh --max-depth=1 /var | sort -h | tail
sudo journalctl --vacuum-size=200M
sudo apt clean
Alte Logdateien, Backups auf derselben Platte und ein wild wachsendes Debug-Log sind die üblichen Verdächtigen.
5. Hinter einem Load Balancer
Fallen alle Backends gleichzeitig beim Health-Check durch, ist meist die Prüf-URL selbst kaputt (Health-Seite gelöscht, Weiterleitung auf HTTPS, der der Prüfer nicht folgt) und nicht jedes Backend. Ruf die Health-URL vom Balancer aus von Hand auf.
Wenn es ein Problem deines Hosters ist
Im Shared Hosting kannst du keine Limits erhöhen. Frag deinen Hoster, welches Limit du erreicht hast und ob es dein Verkehr ist oder ein anderes Konto auf demselben Server:
Guten Tag, meine Website example.com antwortet seit etwa 09:10 Uhr (UTC) mit „503 Service Unavailable“. Ich habe kein Update gestartet, und die Seite ist nicht im Wartungsmodus. Könnten Sie mir sagen, ob mein Konto ein Ressourcenlimit (CPU, Prozesse, Speicher) erreicht hat oder ob der Server überlastet ist, und welche Werte das sind? Falls es mein Konto ist: welches Limit und seit wann?
Lautet die Antwort regelmäßig „Ihr Konto hat seine Limits erreicht“, dann cache die Website richtig oder wechsle auf einen Tarif oder Server mit mehr Kapazität.
Damit es nicht wieder passiert
Ein 503 kündigt sich an: Die Last steigt, der Speicher wird knapp, eine IP beginnt zu fluten. Website-Prüfungen erwischen den 503 binnen einer Minute; der Server-Agent zeigt Last, Speicher und Festplatte, bevor es so weit kommt. Auf deinem eigenen Server schafft der Schnelleingriff Platz auf der Festplatte und startet einen hängenden Dienst neu, zum Festpreis, und der Intensiveingriff richtet Ratenbegrenzung und Caching ein, damit der Server beim nächsten Mal stehen bleibt.
Und jetzt
Von außen prüfen
Ist die Website für alle down oder nur für dich, und was antwortet der Server? Kostenlos, ohne Anmeldung.
Website-Down-CheckerAusgefallen? Wir greifen ein.
Auf deinem eigenen Server oder im Webspace mit SSH-Zugang: Schnelleingriff zum Festpreis bei den häufigen Ursachen, Intensiveingriff im 15-Minuten-Takt bei allem anderen, rund um die Uhr. Preis vor dem Auftrag.
Reparieren lassenWeitere Ratgeber
- Website nicht erreichbar: was du in den ersten 15 Minuten tust
- Server down oder nicht erreichbar: was du zuerst prüfst
- 502 Bad Gateway: Ursache finden und beheben
- 504 Gateway Timeout: Bedeutung und Lösung
- DNS_PROBE_FINISHED_NXDOMAIN: Ursachen und Lösung
- ERR_CONNECTION_REFUSED: Ursachen und Lösung
- „Ihre Verbindung ist nicht privat“: die Zertifikatswarnung