6 причини за съобщение Internal Server Error 500 [Аудио]

Слушайте съдържанието на тази статия под формата на аудио запис:

 

Чуйте и останалите ни аудио статии в SoundCloud, Spotify и Apple Podcasts.

Съобщението за грешка 500 (Internal Server Error 500) е много неприятно, особено когато се получава на собствения ни сайт.

Причините за генерирането на това съобщение може да са най-различни – некоректно изпълняващ се скрипт в сайта, некоректни права на файлове и директории, некоректни настройки на приложенията и компонентите им и други.

Припомняме какво означава съобщението за грешка 500:
Това съобщение означава, че нещо е попречило на сървъра да обработи клиентската заявка и да подготви отговор за нея или че няма друга специфична информация или друг HTTP статус код, който подходящо да описва състоянието, причинило този отказ за отговор.

Съобщението за грешка 500, показващо се в браузъра, вместо очакваната уеб страница.
Съобщението за грешка 500, показващо се в браузъра, вместо очакваната уеб страница.

Освен при зареждане на сайта, това съобщение може да се покаже в администрацията на сайта, при извършване на определени действия или да се види в инструментите за разработчици (DevTools) в браузъра.

WordPress помощ

Имате казус с Вашия WordPress сайт и не знаете на какво се дължи той? Срещате грешка 500, бавно зареждане или пък нямате достъп до администрацията? СуперЕкипът от WordPress специалисти е насреща, за да Ви помогне с експертна проверка по случая.

Вижте нашите планове за Професионална WordPress поддръжка

В тази статия сме събрали най-честите причини за съобщение за грешка 500, както и съвети за справяне с него.

Най-често срещаните причини за получаване на съобщение Internal Server Error 500:

1. PHP скрипт, който не завършва изпълнението си (в рамките на няколко минути)

За да се генерира страницата на тази статия например, се изпълняват няколко PHP скрипта, които завършват изпълнението си общо за няколко милисекунди. Резултатът от завършването на изпълнението им е готовият HTML код, който в момента е зареден в браузъра Ви. Ако само един от тези скриптове се забави и продължи изпълнението си например над 4 минути, то и зареждането на страницата би се забавило с толкова.

В действителност обаче, ако има такъв проблемен скрипт в сайта, то той би могъл да създаде много повече и по-сериозни неприятности, от това посетителите да чакат 5 минути да се зареди страница от сайта. Някои от реалните последици, ако изпълнението на скрипта не бъде преустановено навреме, са запълване на слотовете за процесите, изчерпване на паметта за целия хостинг акаунт и генериране на процесорно натоварване над 100%. Тази ситуация ще доведе до невъзможност за нормално функциониране на самия сайт и на всички други приложения в хостинг акаунта.

За да се избегне този сценарий, който влияе извънредно негативно на качеството на услугата, има няколко контролни настройки. Чрез тях се поставя лимит на времето, за което един скрипт може да забави завършването си (или подаването на отговор).
Тези контролни настройки са: PHP директивата max_execution_time и директивите за изчакване на отговор от PHP скрипт на FastCGI.

При достигането на зададените контролни лимити и прекратяването на PHP скрипта, може да се получи съобщението за грешка 500.

1.1) PHP директивата max_execution_time (контролна настройка на ниво потребител)

PHP директивите са настройките на PHP, засягащи интерпретатора и работата му. Тези настройки може да се променят от PHP Manager в cPanel.

Директивата max_execution_time на PHP определя колко време може да продължи изпълнението на даден PHP скрипт, преди да се прекъсне.

Когато времето в директивата max_execution_time е достигната, скриптът се прекратява и в лога на PHP може да се запише съобщение:

Fatal error: Maximum execution time of 30 seconds exceeded in /home/cpuser/public_html/your-script.php on line XX.

Решение: Увеличаване на стойността за max_execution_time

Можете да увеличите стойността на тази директива през PHP Manager в cPanel.

Освен max_execution_time, можете да проверите какво е зададено в директивата max_input_time. С нея се указва времето, за което скриптът може да приема данни, преди да се изпълни от интерпретатора. Стандартно зададената стойност на тази директива е „-1“, което означава, че ще се вземе предвид стойността от другата директива max_execution_time. Може да увеличите стойността и на тази директива, като „0“ ще означава без лимит.

Вижте повече: Как да променя стойността за max_execution_time? | Help

Бележка: Ако след увеличаване на тези параметри на PHP отново се получи съобщение за грешка 500, може да се свържете с нас, за да извършим проверка и да съдействаме.

1.2) FastCGI настройки (системни настройки на сървърно ниво)

На сървърите за споделен хостинг и Managed VPS има зададена контролна настройка от 240 секунди (4 минути) за изчакване на даден скрипт да върне отговор. Това време е зададено с цел защита от изпълнение на некоректни скриптове (например безкраен цикъл).

Какво е FastCGI?
FastCGI е преводачът между уеб сървъра и PHP интерпретатора. Когато PHP интерпретаторът изпълни PHP скрипта, резултатът е готовият HTML код. Този резултат се подава към FastCGI, който го предава към уеб сървъра. А уеб сървърът отговаря на клиентската заявка, като изпраща HTML кода към уеб браузъра.

Вижте повече за FastCGI в помощната статия (с картинки): Какво е CGI и FastCGI? | Help

При достигане на това време и прекратяване на PHP скрипта, следното съобщение за грешка може да се види в логовете на сървъра – cPanel » Errors (Логове на грешки).

[fcgid:warn] [client 123.45.67.8] mod_fcgid: read data timeout in 240 seconds, referer: https://goodexample.eu/administrator/index.php?option=com_csvi&view=export
[core:error] [client 123.45.67.8] End of script output before headers: index.php, referer: https://goodexample.eu/administrator/index.php?option=com_csvi&view=export

Възможно е при определени тежки операции в сайта като бекъп, манипулация на голям брой обекти (снимки, продукти или други) това време да не е достатъчно за завършване на скрипта. Например такива операции може да са ъпдейт, генериране на бекъп, изтриване на голям брой обекти от сайта, импорт/експорт/синхронизация на продукти в онлайн магазините и други.

Решение: Проверка на скрипта

» Скриптът се използва за импорт/експорт/синхронизация на данни/продукти, бекъп или друга тежка операция

Когато скриптът е оптимизиран, не съдържа проблемен код или логика, и има нужда от повече ресурс и време, за да завърши тежката операция, възможно е той да се стартира през Cron системата в cPanel. Когато скриптът не засяга front-end частта на приложението, то не е нужно да минава през уеб сървъра. За целта може да се използва другия интерфейс на PHP – PHP CLI, който работи в шел средата. По този начин няма да се повлияе от настройките на уеб сървъра (и FastCGI).

Вижте повече за настройка на отложените задачи: Какво е Cron job (автоматизирана задача) и как се използва? | Help

Важно: При онлайн магазините има специфични операции с продуктите, като импорт, експорт, синхронизация, при които на скриптовете може да им е нужно повече време за завършване. В случай че сайтът е онлайн магазин и се опитвате да извършите някое от описаните действия, но получавате съобщение за грешка 500 или операцията не приключва успешно, свържете с нас, за да съдействаме.

» Скриптът има нужда от редакция/оптимизация

Когато не става въпрос за скрипт, извършващ тежка операция, а за такъв, който не се изпълнява оптимално, и затова не може да завърши за няколко милисекунди, тогава е необходимо да се нанесе оптимизация на кода му.

Забавяне на скрипта може да се получи и при изтегляне на външни ресурси или изпълнение на бавни заявки към базата данни.

В такива случаи, най-добре е скриптът да се погледне от разработчика му или лице, което може да извърши проверка и да нанесе корекции за оптимизация на кода му.

2. Недостиг на памет за PHP скриптовете (memory_limit)

Паметта за хостинг акаунта се разпределя за отделните процеси в него. За PHP може да се зададе определен лимит на паметта, която може да използва даден процес, обработващ PHP скрипт. Това време се задава в настройките на PHP в директивата memory_limit.

При достигнат лимит за паметта, в лога за съобщения на PHP (error_log) се записва подобна грешка:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 64 bytes) in /home/cpuser/public_html/your-script.php on line XX.

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

Решение: Увеличаване на паметта за PHP

Паметта за PHP скриптовете може да се увеличи с директивата „memory_limit“ през PHP Manager в cPanel.

Вижте повече: Как да увелича паметта за PHP скриптовете (memory_limit)? | Help

Ако сайтът е WordPress и след увеличаване на memory_limit продължите да получавате същото съобщение за грешка, проверете дали в wp-config.php е добавена директивата „WP_MEMORY_LIMIT“. Можете да добавите тази директива и да посочите максималната памет за PHP като стойност:define( 'WP_MEMORY_LIMIT', '128M' );

Бележка: Ако съобщението за грешка се получава и след като паметта е увеличена, решението е скриптът да се ревизира и да се оптимизира изпълнението му.

3. Некоректни права на файл или директория

За да работи коректно едно приложение на сървърите на СуперХостинг.БГ, директориите му трябва да са с права 755, а файловете – с права 644.

Когато правата на даден файл не са коректни, в логовете на сървъра в cPanel » Errors ще видите подобни записи:

[2017-07-12 12:21:47]: error: file is writable by others: (/home/cpuser/public_html/dir/myfile.php).

Ако правата на дадена директория не са коректни, то записите ще са подобни:

[2017-07-12 12:20:53]: error: directory is writable by others: (/home/cpuser/public_html/mydir).

Решение: Коригиране на правата на файл или директория

» Коригиране на правата през cPanel » Fix Permissions by SuperHosting

Към всички предлагани хостинг планове и Managed VPS услуги от СуперХостинг.БГ е включен специалният инструмент Fix Permissions by SuperHosting. Чрез него можете да коригирате правата на файловете и директориите в хостинг акаунта. Можете да изберете редакция на правата за целия хостинг акаунт или за определена директория.

» Промяна на правата на един файл или една директория

Редакция на правата може да се извърши и ръчно, когато например е необходима промяна за един файл или една директория. В тези случаи можете да промените правата през файловия мениджър в cPanel или през FTP клиент.

4. Некоректни директиви в .htaccess файл

Ако при записване или редакция на правила в .htaccess файл бъде допусната синтактична или правописна грешка, съответното правило няма да се обработи и ще се получи грешка 500.

Информация за грешката отново може да се намери в логовете „Errors в cPanel, като съобщението е подобно:

[Thu July 07 12:48:54 2012] [alert] [client XXX.XXX.XXX.XXX] /home/username/public_html/.htaccess: Invalid command 'RewriteEngineOn', perhaps misspelled or defined by a module not included in the server configuration

В посочения примерен запис грешката е, че е написано слято „RewriteEngineOn“, вместо „RewriteEngine On“.

Решение: Проверка на директивите в .htaccess файла

» Преглед на съдържанието във файла .htaccess

Препоръчителният начин за проверка дали директивите в този файл са коректни, е като проверите съдържанието му. Ако в .htaccess файла няма никакво съдържание или директиви, тогава потърсете друг .htaccess файл, който може да се намира в горна директория. Ако извършвате проверката през Файловия мениджър в cPanel и не откривате никакви .htaccess файлове в директориите на сайта, уверете се, че сте активирали опцията за показване на скритите файлове. Ако откриете .htaccess файл и в него има съдържание, ще е нужно да имате познания за RewriteRules и регулярни изрази, за да можете да установите некоректните директиви.

Преди да промените или изтриете нещо от файла .htaccess, направете негово резервно копие.

» Преименуване на .htaccess файла

Този начин за проверка е най-бързият, но е препоръчително да се извършва само ако сайтът не се зарежда изобщо и при достъпването на всяка негова страница се получава съобщение за грешка 500. Преименуването на този файл означава, че ще деактивирате всички правила и директиви в него. Проверката се извършва по следния начин – първо преименувате файла .htaccess, например на –htaccess, и след това опитвате да заредите сайта в браузъра. Ако сайтът се зареди успешно или се зареди някакво съдържание, каквото и да е, стига да не е отново грешка 500, това е сигурен сигнал, че има нещо проблемно във файла .htaccess. Преименуването на този файл, когато сайтът се зарежда безпроблемно, не се препоръчва. Деактивирането на директивите в този файл може да доведе до проблем със зареждането и дори получаване на грешка 500. Например, ако сайтът е онлайн магазин или такъв, на който потребителите извършват действия, които зависят от директивите в .htaccess, възможно е при преименуването да се прекъснат тези действия и да се загуби информация (например плащане на поръчка).

5. Настройки на PHP ускорителя OPcache

При активиран OPcache е възможно да се получи съобщение за грешка 500 при извършване на определени действия в сайта. Причината за това може да са зададените настройки на OPcache.

Решение: Тестване на настройките за OPcache

Може да опитате да спрете получаването на грешката, като тествате със следните параметри в конфигурацията на OPcache:

opcache.validate_timestamps = 1
opcache.revalidate_freq = 0
opcache.fast_shutdown = 0

Бележка: Тестването на различни настройки за OPcache е препоръчително да се извършва на тестово копие на сайта. Можете да създадете работно копие на сайта през cPanel » Softaculous » Staging.

Ако след промяна на параметрите, съобщението за грешка продължи да се получава, ще е нужна допълнителна проверка на казуса.

Вижте още информация за настройките на модула OPcache в статията: PHP модул – OPcache | Help

6. Изчерпване на ресурсите процесорно време и оперативна памет за акаунта

При изчерпване на ресурсите за хостинг акаунта е възможно да се получи съобщение за грешка 500 при опит за зареждане на сайта.

Има няколко възможни варианта за справяне при тази ситуация. Но първо е нужно да направите проверка на причините за изчерпването на ресурсите.

Решение при увеличен брой реални посещения в сайта

Изчерпване на ресурсите в хостинг акаунта може да се получи, когато посещенията в сайта вече са се увеличили много над препоръчителния брой, указан за използвания хостинг план.

Ако увеличението на реалните посещения в сайта е временно явление, случващото се на Black Friday например, трябва да вземете превантивни мерки за тези моменти. Мерките включват подсигуряване на допълнителни ресурси. В този случай е нужно да се свържете с нас, още преди да е дошъл определения момент, за да съдействаме.

Вижте повече: Black Friday: Тенденции и съвети за Вашите сайтове | Blog

Другият вариант за увеличаване на посещенията е, разрастването на сайта и известността му. В този случай решението е трайното осигуряване на нужните ресурси, чрез преминаване на подходяща хостинг услуга. Ако сайтът е в подем, но не му бъдат осигурени ресурсите, това ще е пречка за развитието и най-вече стабилността му.

Решение при увеличен трафик от бот/ботове

Възможно е изчерпването на ресурсите да е породено от агресивно обхождане на сайта от ботове. За да проверите посещенията в сайта, може да използвате инструмента за статистики AWStats в cPanel. В данните от инструмента можете да различите лесно реалните посещения от тези на ботовете.

Вижте повече: Как да ползвам AWStats за анализ, при повишено процесорно време? | Help

В този случай трябва да прецените дали обхождането от тези ботове е нужно и важно за сайта, или не, и да блокирате достъпа им.

Вижте повече: Обхождащи роботи, блокиране на лоши ботове | Help

В случай че обхождането на агресивните ботове е важно за сайта, решението е трайно осигуряване на нужните ресурси чрез преминаване на подходяща хостинг услуга.

Решение при извършени промени в системата и настройките ѝ

Съобщението за грешка 500 може да се получи, след като сте извършили промени в сайта. Например извършили сте обновление на системата или някой от плъгините. Или ако сте инсталирали нов плъгин, модул или компонент в сайта, който има неоптимално изпълняващ се скрипт, той може да е причината за повишено потребление на процесорен ресурс и оперативна памет.

В случай че промените не може да се коригират, например да деактивирате плъгина, решението е да се възстанови бекъп на съдържанието в хостинг акаунта. Можете да възстановите от бекъп файлове, директории и/или бази данни в хостинг акаунта през Backup Manager в cPanel.

Съвет от support-а: При получаване на съобщение за грешка 500, първо проверете логовете на уеб сървъра (cPanel » Errors) и лога на PHP (error_log), за възможни съобщения за грешка. Следете тези логове за грешки, за да можете своевременно да засечете възможно некоректно функциониране на сайта.

Абонирайте се за СуперБлога, за да научавате първи най-важното и полезното от света на уеб, касаещо Вашия сайт и дигитално развитие.

Мадлена Методиева
Мадлена Методиева
Меган е част от СуперМаркетинг екипа. Мисията ѝ е старателно да попълва е-библиотеката на СуперХостинг.БГ с полезни и помощни статии.
0 0 votes
.
Абониране
Уведоми ме при
guest

11 Коментара
Inline Feedbacks
View all comments
SaaS?

SaaS? Що е то и кое го прави най-подходящата платформа за Вашия онлайн магазин

0
SaaS услугата ви дава възможност лесно и бързо да стартирате собствен електронен магазин и да развивате бизнеса си в интернет.
Съвместна статия за маркетинг, реклама и SEO - Netpeak

13 съвета за маркетинг и реклама [Аудио]

2
Сега когато имате повече време у дома, можете да отделите енергия в SEO и добра реклама за дигитален успех. Заслужава си!
Какво е CMS (Content Management System)?

Какво е CMS (система за управление на съдържание)?

0
CMS (система за управление на съдържание) е софтуерен инструмент за лесно и бързо създаване на сайт и след това лесно поддържане на съдържанието в него.