Меню

Php fpm ошибка 500

При разработке веб-сайтов и веб-приложений можно столкнуться с ошибкой 500 internal server error. Сначала она может испугать и ввести в заблуждение, поскольку обычно веб-сервер выдает более конкретные ошибки, в которых указана точная причина проблемы, например, превышено время ожидания, неверный запрос или файл не найден, а тут просто сказано что, обнаружена внутренняя ошибка.

Но не все так страшно и в большинстве случаев проблема вполне решаема и очень быстро. В этой статье мы разберем как исправить ошибку Internal server error в Nginx.

Дословно Internal server error означает внутренняя ошибка сервера. И вызвать её могут несколько проблем. Вот основные из них:

  • Ошибки в скрипте на PHP — одна из самых частых причин;
  • Превышено время выполнения PHP скрипта или лимит памяти;
  • Неправильные права на файлы сайта;
  • Неверная конфигурация Nginx.

А теперь рассмотрим каждую из причин более подробно и разберем варианты решения.

1. Ошибка в скрипте PHP

Мы привыкли к тому, что если в PHP скрипте есть ошибки, то сразу же видим их в браузере. Однако на производственных серверах отображение сообщений об ошибках в PHP отключено, чтобы предотвратить распространение информации о конфигурации сервера для посторонних. Nginx не может отобразить реальную причину ошибки, потому что не знает что за ошибка произошла, а поэтому выдает универсальное сообщение 500 internal server error.

Чтобы исправить эту ошибку, нужно сначала понять где именно проблема. Вы можете включить отображение ошибок в конфигурационном файле php изменив значение строки display_errors с off на on. Рассмотрим на примере Ubuntu и PHP 7.2:

vi /etc/php/7.2/php.ini

display_errors = On

Перезапустите php-fpm:

sudo systemctl restart php-fpm

Затем обновите страницу и вы увидите сообщение об ошибке, из-за которого возникла проблема. Далее его можно исправить и отключить отображение ошибок, тогда все будет работать. Ещё можно посмотреть сообщения об ошибках PHP в логе ошибок Nginx. Обычно он находится по пути /var/log/nginx/error.log, но для виртуальных доменов может настраиваться отдельно. Например, смотрим последние 100 строк в логе:

tail -n 100 -f /var/log/nginx/error.log

Теперь аналогично, исправьте ошибку и страница будет загружаться нормально, без ошибки 500.

2. Превышено время выполнения или лимит памяти

Это продолжение предыдущего пункта, так тоже относится к ошибкам PHP, но так, как проблема встречается довольно часто я решил вынести её в отдельный пункт. В файле php.ini установлены ограничения на время выполнения скрипта и количество оперативной памяти, которую он может потребить. Если скрипт потребляет больше, интерпретатор PHP его убивает и возвращает сообщение об ошибке.

Также подобная ошибка может возникать, если на сервере закончилась свободная оперативная память.

Если же отображение ошибок отключено, мы получаем error 500. Обратите внимание, что если время ожидания было ограничено в конфигурационном файле Nginx, то вы получите ошибку 504, а не HTTP ERROR 500, так что проблема именно в php.ini.

Чтобы решить проблему увеличьте значения параметров max_execution_time и memory_limit в php.ini:

sudo vi /etc/php/7.2/php.ini

max_execution_time 300
memory_limit 512M

Также проблема может быть вызвана превышением других лимитов установленных для скрипта php. Смотрите ошибки php, как описано в первом пункте. После внесения изменений в файл перезапустите php-fpm:

sudo systemctl restart php-fpm

3. Неверные права на файлы

Такая ошибка может возникать, если права на файлы, к которым обращается Nginx установлены на правильно. Сервисы Nginx и php-fpm должны быть запущены от имени одного и того же пользователя, а все файлы сайтов должны принадлежать этому же пользователю. Посмотреть от имени какого пользователя запущен Nginx можно командой:

nginx -T | grep user

Чтобы узнать от какого пользователя запущен php-fpm посмотрите содержимое конфигурационного файла используемого пула, например www.conf:

sudo vi /etc/php-fpm.d/www.conf

В моем случае это пользователь nginx. Теперь надо убедится, что файлы сайта, к которым вы пытаетесь обратиться принадлежат именно этому пользователю. Для этого используйте команду namei:

namei -l /var/www/site

Файлы сайта должны принадлежать пользователю, от имени которого запущены сервисы, а по пути к каталогу с файлами должен быть доступ на чтение для всех пользователей. Если файлы принадлежат не тому пользователю, то вы можете все очень просто исправить:

sudo chown nginx:nginx -R /var/www/site

Этой командой мы меняем владельца и группу всех файлов в папке на nginx:nginx. Добавить права на чтение для всех пользователей для каталога можно командой chmod. Например:

sudo chmod o+r /var/www/

Далее все должно работать. Также, проблемы с правами может вызывать SELinux. Настройте его правильно или отключите:

setenforce 0

Выводы

В этой статье мы разобрали что делать если на вашем сайте встретилась ошибка 500 internal server error nginx. Как видите проблема вполне решаема и в большинстве случаев вам помогут действия описанные в статье. А если не помогут, напишите свое решение в комментариях!

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

В большинстве случаев ошибка Internal Server Error вызвана неверной конфигурацией Nginx. Так что используйте лучшие практики по настройке веб-сервера. И не забудьте включить логирование ошибок – обычно Nginx подсказывает причину ошибку в журнале.

Помогаем

Unrecognizable

Но есть и не очевидная причина проблемы. Если Nginx работает вместе с PHP-FPM (через модуль FastCGI), то ошибку 500 сервера могут вызывать ошибки выполнения PHP, если отключена директива display_errors.

Для начала проверьте лог php-fpm:

tail -f /var/log/php-fpm/www-error.log
## Выводит 10 последних строчек лога

А затем проверьте файл конфигурации /etc/php-fpm.d/www.conf:

analiz

listen = /var/run/php-fpm/php-fpm.sock

listen.owner = nobody

listen.group = nobody

user = nginx

group = nginx

**display_errors = on**
## Уточните указанные параметры и включить отображение ошибок

Еще одна возможная причина ошибки – скрипт пытается использовать больше памяти, чем позволяет директива memory_limit. На ошибку укажет лог PHP-FPM, а увеличить лимит можно все в том же файле конфигурации /etc/php-fpm.d/www.conf.

В боль­шин­стве слу­ча­ев ошиб­ка Internal Server Error вызва­на невер­ной кон­фи­гу­ра­ци­ей Nginx. не забудь­те вклю­чить логи­ро­ва­ние оши­бок — обыч­но Nginx под­ска­зы­ва­ет при­чи­ну ошиб­ку в журнале.

Но есть и не оче­вид­ная при­чи­на про­бле­мы. Если Nginx рабо­та­ет вме­сте с PHP-FPM (через модуль FastCGI), то ошиб­ку 500 сер­ве­ра могут вызы­вать ошиб­ки выпол­не­ния PHP, если отклю­че­на дирек­ти­ва display_errors.

Для нача­ла про­верь­те лог php-fpm:

tail -f /var/log/php-fpm/www-error.log

А затем про­верь­те файл кон­фи­гу­ра­ции /etc/php-fpm.d/www.conf:

[codesyntax lang=»php»]

listen = /var/run/php-fpm/php-fpm.sock

listen.owner = nobody

listen.group = nobody

user = nginx

group = nginx

display_errors = on

[/codesyntax]

Еще одна воз­мож­ная при­чи­на ошиб­ки — скрипт пыта­ет­ся исполь­зо­вать боль­ше памя­ти, чем поз­во­ля­ет дирек­ти­ва memory_limit. На ошиб­ку ука­жет лог PHP-FPM, а уве­ли­чить лимит мож­но все в том же фай­ле кон­фи­гу­ра­ции /etc/php-fpm.d/www.conf.

https://github.com/midnight47/

Skip to content

Ошибка http 500 internal server error является ошибкой на стороне веб-сервера, данный код выводится в браузер при  обращении к сайту, также его можно увидеть в логах Apache или Nginx

  1. неверный синтаксис файла .htaccess. Ошибка в этом случае прямо указана в логе Apache (например, директивы Options -MultiViews или php_value и php_flag при использовании PHP в режиме Fastcgi )
  2. слишком долгая работа скрипта -в настройках веб-сервера установлены лимиты при превышении которых будет отдаваться ошибка 500
  3. недостаточно высокое значение параметра memory_limit в файле php.ini
  4. программные ошибки, формирующие некорректные заголовки HTTP

При появлении ошибки 500 нужно включить логирование Apache (если используется Apache), также включить логирование ошибок РНР. Если в error_log Apache информации не будет, искать их стоит в программном коде, здесь и окажутся полезными логи РНР.

 
Логирование РНР включается в php.ini, так же задается путь к логу. При использовании PHP-FPM (в т.ч. с Nginx) директива задается в /etc/php-fpm.d/www.conf — дополнительно лучше включить и вывод ошибок на экран, для этого нужно добавить display_errors = on

При нехватке скрипту выделяемой для него памяти в логе РНР будут содержаться сообщения вида:
«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

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Php fopen обработка ошибок
  • Php file get contents ошибки