A 500 Internal Server Error is the most generic failure a server can return. It means: "I tried to handle your request, something went wrong, and I can't tell you what." It's a 5xx code — a server problem — and the useful information is never on the page. It's in the logs.
What 500 actually means
500 is the catch-all the server falls back to when it hits an error it didn't anticipate and doesn't have a more specific code for. Unlike a 404 (not found) or 403 (forbidden), it tells you almost nothing on purpose — exposing the real error to visitors would be a security risk. So the page is vague, but the cause is concrete and waiting in your logs.
Common causes
| Cause | What's happening |
|---|---|
| Unhandled exception | App code threw an error nobody caught |
| Bad deploy | A recent release introduced a runtime bug |
| Config / .htaccess | A malformed server or rewrite rule |
| Permissions | Wrong file/folder ownership or mode |
| Database failure | The app can't connect to or query the DB |
| Out of memory | The process was killed mid-request |
How to fix it — as a developer
- Read the server logs. This is the whole game — the stack trace names the file and line.
- Check your last deploy. If it started after a release, you have your suspect; roll back to confirm.
- Verify config & permissions. A broken
.htaccessor wrong file mode (755/644) is a classic cause on Apache/PHP. - Test the database connection. Wrong credentials or a maxed-out connection pool surface as 500s.
- Check memory. OOM kills produce intermittent 500s under load.
How to fix it — as a visitor
- Reload the page and try again in a few minutes.
- Clear your cache or try a private window.
- It's the site's problem — if it persists, the operators need to fix it.
Catch 500s the moment they start
A single 500 is noise; a sudden spike of them is an incident. The difference between a 10-minute and a 3-hour outage is how fast you find out. Nurbak Watch tracks the error rate of every endpoint and alerts you the instant 500s climb — with the route and timing you need to start debugging.

