Knowledge
503 Service Unavailable
#Errors
A 503 means the server is temporarily unable to handle the request. With Laravel it often means maintenance mode is on; on a busy server it means PHP-FPM has no free workers.
Published by Mark van Eijk on June 23, 2026 · 1 minute read
About error 503
A 503 Service Unavailable signals that the server is up but temporarily can't serve the request. It's meant to be transient. There are two very different situations that produce it, and the fix depends on which one you're in.
Cause 1: Laravel maintenance mode
If you (or your deploy script) ran php artisan down, Laravel returns a 503 for every request on purpose. Bring it back up with:
php artisan up
If a deploy crashed midway and left the app down, the same command fixes it. You can also allow your own IP through while it's down:
php artisan down --secret="let-me-in"
Then visit /let-me-in once to bypass the maintenance page.
Cause 2: PHP-FPM has no free workers
On a busy server, a 503 (often paired with 502) means PHP-FPM hit its process limit and nginx had nowhere to send the request. Check the PHP-FPM log for the tell-tale warning:
tail -f /var/log/php8.3-fpm.log
You'll see server reached pm.max_children setting, consider raising it.
Solution
Raise the worker pool in your pool config (/etc/php/8.3/fpm/pool.d/www.conf), sizing it to your available RAM:
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 8
Each PHP worker uses real memory (often 30–60 MB), so don't set max_children higher than RAM / per-worker memory. Reload after changing it:
systemctl reload php8.3-fpm
If workers are exhausted because requests are slow rather than because traffic is genuinely high, fix the slowness instead, see 504 Gateway Timeout and optimizing server performance.
Subscribe to our newsletter
Do you want to receive regular updates with fresh and exclusive content to learn more about web development, hosting, security and performance? Subscribe now!
Related articles
Error in the HTTP2 framing layer
A 503 means the server is temporarily unable to handle the request. With Laravel it often means maintenance mode is on; on a busy server it means PHP-FPM has no free workers.
413 Request Entity Too Large in nginx
A 503 means the server is temporarily unable to handle the request. With Laravel it often means maintenance mode is on; on a busy server it means PHP-FPM has no free workers.