503 Service Unavailable Error: Causes and How to Fix It

The 503 Service Unavailable error appears when a server cannot process a request. Unlike client-side errors such as 404, a 503 is always a server-side problem: the server is either overloaded, under maintenance, or a backend service it depends on has stopped responding.
If you are a visitor, there is little you can do except wait or try again later. If you manage the server, this guide walks through the most common causes and how to diagnose and resolve the error.
What is an HTTP 503 Error
When you open a web page, your browser sends a request to the server hosting the site, which returns the requested data and response code. The server returns the HTTP response status code that tells the client whether the request has been successful or not.
Response codes are categorized into five classes. The codes in the range of 500 to 599 indicate a server error.
The HTTP status code 503 is a generic error response returned when the server cannot handle the request. There are many reasons why a server is not ready to complete the request and return a 503 error. This error code usually appears when the server is overloaded with requests or down for maintenance.

If the page you are visiting throws 503 Error, there is nothing much you can do since your browser or Internet connection does not cause the error. Even though the error is on the server side, you can try some of the following options:
- Reload your browser or try opening the page with another one. The chances that the page will load when you refresh your browser are low, but it is worth trying.
- Try to clear your browser cache. If the page showing a 503 error is cached, the browser will request a new version after the cache is cleared.
- Come back later. The web admin may fix the webserver issue in the meantime.
- Contact the website owners. The last remaining option is to contact the person responsible for maintaining the website.
Troubleshooting 503 Error
Several different reasons can cause a 503 Service Unavailable error on the server side. The most common are:
- Server overload. When traffic spikes beyond capacity, the server stops accepting new requests.
- Scheduled maintenance. The server or an application on it may be in maintenance mode. WordPress, for example, returns 503 while applying automatic updates.
- Backend service not running. If Nginx or Apache is configured as a reverse proxy and the backend application (Node.js, PHP-FPM, Gunicorn) has crashed, the web server returns 503 for every request.
- PHP-FPM not running. On PHP-based sites, PHP-FPM handles PHP execution. If it stops or reaches its process limit, the web server cannot serve PHP pages.
- DDoS or traffic flood. A flood of requests exhausts server resources and produces the same result as organic overload.
- Misconfigured firewall or CDN. A firewall may block legitimate CDN requests, causing 503 responses.
- Broken plugin or hacked site. Malicious code or a broken CMS plugin can crash a process and trigger 503 errors.
Check the web server status
Start by confirming the web server is running. On Ubuntu and Debian:
sudo systemctl status nginxsudo systemctl status apache2If the service is stopped or in a failed state, restart it:
sudo systemctl restart nginxsudo systemctl restart apache2Read the error logs
The error log is the most direct way to identify the cause. Tail the last 50 lines:
sudo tail -n 50 /var/log/nginx/error.logsudo tail -n 50 /var/log/apache2/error.logOn Fedora, RHEL, and derivatives, the Apache log is at /var/log/httpd/error_log.
Look for entries mentioning connect() failed, upstream, or a specific process name. Those entries point to the component that stopped responding.
Check PHP-FPM
On PHP-based sites, a stopped or overloaded PHP-FPM service is one of the most frequent causes of 503 errors. Check its status:
sudo systemctl status php8.3-fpmReplace php8.3-fpm with your installed version. If it is stopped, restart it and check its log for timeout or pool limit errors:
sudo systemctl restart php8.3-fpm
sudo tail -n 50 /var/log/php8.3-fpm.logCheck the upstream backend
If Nginx or Apache is acting as a reverse proxy in front of a Node.js, Python, or Ruby application, 503 usually means the backend process is not running. Check if the backend port is listening:
ss -tlnp | grep 3000Replace 3000 with the port your application uses. If nothing is listening on that port, the backend has stopped and needs to be restarted.
Conclusion
The 503 Service Unavailable error points to the server, not the visitor. Checking the web server status and error logs will reveal what stopped responding in most cases. For persistent overload issues, consider adding rate limiting or scaling the server capacity.
Linuxize Weekly Newsletter
A quick weekly roundup of new tutorials, news, and tips.
About the authors

Dejan Panovski
Dejan Panovski is the founder of Linuxize, an RHCSA-certified Linux system administrator and DevOps engineer based in Skopje, Macedonia. Author of 800+ Linux tutorials with 20+ years of experience turning complex Linux tasks into clear, reliable guides.
View author page