Ошибка http 500 internal server error является ошибкой на стороне веб-сервера, данный код выводится в браузер при обращении к сайту, также его можно увидеть в логах Apache или Nginx
В ошибке обычно указано какой веб-сервер её отдал. При появлении ошибки нужно выяснить какой веб-сервер обрабатывает запросы и проверить его логи.
Проверить какой веб-сервер обрабатывает запросы к порту 80 можно так:
netstat -nltp | grep 80
Далее рассматриваем случай когда ошибку вернул веб-сервер Apache. Он чаще всего используется для обработки скриптов на PHP.
Возможные причины ошибки 500:
- неверный синтаксис файла .htaccess. Ошибка в этом случае прямо указана в логе Apache. (например, директивы Options -MultiViews или php_value и php_flag при использовании PHP в режиме Fastcgi )
- слишком долгая работа скрипта. В настройках веб-сервера установлены лимиты при превышении которых будет отдаваться ошибка 500
- недостаточно высокое значение параметра memory_limit в файле php.ini
- программные ошибки, формирующие некорректные заголовки HTTP
Ошибка http 500 internal server error может быть вызвана разными причинами. При появлении ошибки нужно включить логирование Apache (если используется Apache), также включить логирование ошибок РНР. Если в error_log Apache информации не будет, искать их стоит в программном коде, здесь и окажутся полезными логи РНР.
Логирование РНР включается в php.ini, так же задается путь к логу. При использовании PHP-FPM директива задается в /etc/php-fpm.d/www.conf. Дополнительно лучше включить и вывод ошибок на экран, для этого нужно добавить display_errors = on
Пример записей о причинах ошибки 'http 500 internal server error' в логе
При нехватке скрипту выделяемой для него памяти в логе РНР будут содержаться сообщения вида:
"Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 32 bytes) in /home/example.com/www/wp-includes/pomo/streams.php on line 110"
В этом случае нужно увеличить значение memory_limit в файле с настройками php.ini
Когда веб-сервер отдает ошибку записи появляются не только в error_log. Также сообщения будут в логе доступа, в который пишется информации при каждом посещении сайта.
Пример записи приведен на скриншоте (запись из лога nginx, он согласно конфигурации тестовой машины объединен с логом Apache). Там можно увидеть код ответа 500.
У записи есть ip адрес клиента, user agent, временная метка. По ним можно найти те же самые запросы в логе ошибок и точно установить какой запрос соотносится с ошибкой.
Причиной ошибки может быть высокая нагрузка на сервер. Читайте о том как её выявить и что делать если нагрузка выше нормы.