Quick answer: HTTP 500 is the application saying "I crashed" — the answer is always in the error log. Check the web server error log and the PHP-FPM log, reproduce the request, and read the newest lines: a syntax error, a fatal exception, a permissions problem or a broken .htaccess will be named there explicitly.
Overview
Unlike 502/504 (the app did not answer), a 500 means the app answered "internal error". The cause is in your code, configuration or permissions — and it is logged. Guessing without logs wastes time; reading them solves most 500s in minutes.
Before you start
- SSH access and knowledge of your stack (nginx+PHP-FPM, Apache, panel-managed...).
Step-by-step guide
- Watch the logs while reproducing the error:
(Apache:sudo tail -f /var/log/nginx/error.log /var/log/php8.3-fpm.log/var/log/apache2/error.log; panels keep per-site logs in the panel's directory.) - Reload the failing page and read the newest entry — PHP fatals name the file and line.
- Roll back the last change: a deploy, plugin/theme update or config edit immediately before the 500 is the cause until proven otherwise.
- Check permissions/ownership if files were copied as root:
sudo chown -R www-data:www-data /var/www/yoursite - For WordPress specifically (plugins, .htaccess, memory limit) follow the WordPress 500 guide.
- Config syntax check after edits:
sudo nginx -t
Common issues
- Empty error log: you are reading the wrong log — confirm which vhost serves the domain.
- 500 only on some URLs: rewrite rules or a specific script — the log still names it.
- Full disk: apps fail half-way and throw 500s — check
df -hearly. - PHP version mismatch after an upgrade: old code + new PHP = fatals; align the version per site.
When to contact support
Application code is customer-side on an unmanaged server, but if logs point to the platform (storage errors, resources) or you cannot access logs at all, open a ticket with the exact URL, time and the log excerpt.
Frequently asked questions
Where do I find the reason for a 500 error?
In the web server and PHP error logs — a 500 is always logged with details. Tail the logs while reloading the failing page; the newest entry names the file, line or rule that crashed.
The 500 appeared right after an update — coincidence?
Almost never. A deploy, plugin, theme or config change immediately before the error is the cause until proven otherwise. Roll it back first, then investigate the incompatibility calmly.
Related articles
- How to troubleshoot the WordPress 500 error
- Website shows 502 Bad Gateway
- Website shows 504 Gateway Timeout
- How to collect logs for support
Need a hand? Contact Cloud2Y support →
