HTTP 503 Service Unavailable
The server is temporarily unable to handle the request — overloaded, in maintenance, or has no healthy backends.
Meaning
503 signals a temporary condition. Servers may include Retry-After. It’s returned by maintenance modes (Laravel php artisan down, WordPress updates), by load balancers with no healthy targets, and by servers that have exhausted worker processes.
Common causes
- Maintenance mode enabled (and not disabled after a deploy)
- No healthy targets behind the load balancer
- All worker processes busy (PHP-FPM
pm.max_children, ApacheMaxRequestWorkers) - Rate limiting returning 503 (Nginx
limit_reqdefault) - Dependency outage with a circuit breaker open
- Kubernetes service with no ready pods
⚡ Quick fix
- Check whether maintenance mode is on (
php artisan up, delete WordPress.maintenancefile) - Check load balancer target health
- Look for worker exhaustion in server logs and scale or raise limits
- Retry after the
Retry-Afterinterval
Detailed fix by platform
PHP
- PHP-FPM log "server reached pm.max_children setting": raise
pm.max_childrenbased on available RAM ÷ average process size.
WordPress
- Delete the
.maintenancefile in the site root if an update was interrupted.
Kubernetes
kubectl get endpoints <svc>— empty endpoints means no ready pods; check readiness probes and pod status.
AWS
- ALB returns 503 when the target group has no registered/healthy targets — check health check path and security groups.
How to diagnose
- Maintenance — Is maintenance mode on?
- Capacity — Are workers/pods saturated?
- Health — Are backends passing health checks?
- Dependencies — Is a downstream service failing?
🧠 Still stuck? Analyze your error
Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.
Was this page helpful?
Report a correction or suggest an improvement
Last updated 2 Oct 2026