Розбираємося, що означає помилка 500, через що вона може виникнути і що робити, щоб прибрати її з сайту.
Що всередині
- Що значить помилка сервера 500
- Як може виглядати помилка 500
- Чому виникає помилка 500
- Як усунути помилку 500
Що таке помилка 500
Помилка 500 Internal Server Error — це код стану HTTP, одна зі стандартних відповідей сервера на запит браузера. Приклади інших кодів HTTP: 403 Forbidden, 404 Not Found або 503 Service Unavailable.
Сервер відправляє один з таких кодів кожен раз, коли в браузері відкривають нову сторінку або переходять по посиланню. Навіть коли ніякої помилки не було і сторінка нормально завантажилася.
Саме цей код HTTP — 500 Internal Server Error — означає, що сервер не зміг виконати запит через непередбачену помилку.
Як може виглядати помилка 500
Дизайн сторінки з 500 помилкою буде відрізнятися в залежності від різних факторів: вашого браузера, веб-сервера, панелі керування хостингом, операційної системи, а також движка або фреймворка, на якому працює сайт.
Наприклад, ось так виглядають стандартні сторінки 500 помилки чотирьох популярних веб-серверів: Apache, Nginx, LiteSpeed і IIS 7.
Коли щось не так з параметрами PHP або правами на файли і папки, в Google Chrome 500 помилка буде оформлена у фірмовому стилі браузера, а в Firefox буде порожня сторінка — «білий екран смерті».
Коли на сайті з WordPress є проблема зі скриптом — у ньому помилка або пропущено символ — теж виникне помилка 500:
Також сторінку з 500 помилкою іноді оформляють в загальному дизайні сайту. Ось так, наприклад, виглядає сторінка з такою помилкою на сайті YouTube:
Це не всі варіанти, а лише найпопулярніші. Залежно від того, яке ПЗ ви використовуєте, оформлення сторінки з помилкою може бути і іншим.
Текст на сторінці теж може відрізнятися. Ось деякі варіанти, з якими ви можете зіткнутися:
- 500 Error
- HTTP Error 500
- Internal Server Error
- 500 Помилка сервера
- HTTP 500 — Internal Server Error
- 500 Помилка в налаштуваннях сайту
- 500 Внутрішня помилка сервера
- The website can not display the page
- Error establishing a database connection
- Error: Request failed with status code 500
- На сайті виникла критична помилка.
- The site is experiencing technical difficulties.
- There has been a critical error on your website.
- 500 Internal Server Error. Sorry something went wrong.
- 500. That’s an error. There was an error. Please try again later. That’s all we know.
Чому виникає помилка 500
Як ви вже зрозуміли, помилка 500 — це збірне повідомлення, яке виникає, коли щось не спрацювало, як очікувалося. Таку узагальнену відповідь використовують, тому що змусити сервер зламатися можуть тисячі різних речей і неможливо передбачити окрему сторінку для кожного випадку.
Найпростіше — подивитися у логи сервера, щоб знайти причину виникнення 500 помилки. Але взагалі, ось кілька поширених ситуацій, в яких вона виникає:
- помилка в скрипті PHP;
- проблеми з базою даних;
- неправильні параметри PHP;
- неправильні права доступу до папок і файлів;
- сайт вступає в конфлікт з темою або плагіном;
- відсутній або пошкоджений системний файл рушія сайту;
- помилка у глобальному конфігураційному файлі веб-сервера;
- помилка в додатковому конфігураційному файлі веб-сервера .htaccess;
- в одному з файлів є посилання на інший файл, але сам файл відсутній на хостингу;
- скрипт не виконується через занадто низьких значень max_execution_time і memory_limit.
Як 500 помилка впливає на SEO
Якщо на сайті виникла 500 помилка, важливо виправити її якомога скоріше, тому що через це сторінки можуть зникнути з результатів пошуку.
Коли пошуковий робот заходить на сторінку і бачить 500 помилку, він пробує зайти на сторинку ще раз протягом доби, розраховуючи на те, що власник сайту вирішить проблему. Але якщо при повторному відвідуванні знову буде код вiдповiдi сервера 500, бот може вилучити сторінку з індексу.
Перевірити, чи випала сторінка з індексу, можна в Google Search Console. Для цього увійдіть до консолі, введіть у рядку пошуку URL сторінки і натисніть Enter. Сервіс перевірить сторінку і покаже її статус. Якщо сторінки вже немає в індексі, натисніть «Запросити індексування», щоб повторно її туди додати.
Також Search Console допоможе вам своєчасно виявляти помилки. Для цього просто періодично перевіряйте розділ «Покриття» на головній сторінці панелі в меню зліва. У нього будуть записуватися всі помилки на сайті.
Як додати сайт в Google Search Console
Як виправити помилку 500
Якщо ви зіткнулися з помилкою як відвідувач, ваша єдина опція описана у першому пункті. Для інших пунктів знадобиться доступ на хостинг.
Поради у цьому розділі описують не всі ситуації, в яких може виникнути 500 помилка, а тільки найбільш популярні. Якщо нічого з перерахованого вище не допоможе, в кінці статті є рекомендація, що робити.
1. Очистіть кеш і обновіть сторінку
Буває, що 500 помилка виникає в моменті та пропадає при перезавантаженні сторінки. При цьому іноді вона кешується, тому кеш на всякий випадок варто очистити. Ось як зробити це в популярних браузерах:
2. Перевірте логи
Так ви одразу побачите причину помилки, замість того щоб перебирати усі можливі варіанти. Якщо ви не сильно розбираєтеся, спробуйте спочатку поради нижче. А вже якщо не спрацює, доведеться повертатися до цього варіанта.
У залежності від того, який веб-сервер використовується у вас на хостингу, за замовчуванням логи будуть зберігатися по таким шляхам:
- /var/log/httpd/error_log або /var/log/apache2/error_log —для Apache;
- /var/log/nginx/error_log — для Nginx.
Логи можуть зберігатися і в інших місцях. Наприклад, панелі керування хостингом часто міняють стандартні путь їх розташування:
- /usr/local/apps/apache/logs/vashdomen.err — для Webuzo, безкоштовної панелі керування VPS у нас на хостингу;
- /usr/local/apache/logs/error_log — для Apache зі встановленою cPanel & WHM.
Важливий нюанс — доступ до загальних логів буде тільки на VPS-хостингу чи виділеному сервері. На віртуальному хостингу буде свій файл error_log. За замовчуванням він створюється в тій самій папці, де лежить скрипт, виконання якого призвело до 500 помилки. Але різні CMS можуть перевизначати шлях до цього файла до інших папок.
Плюс у цей файл потрапляють тільки помилки PHP. Помилки веб-сервера потряплять до загальних логів, до яких не будет доступу. Так що, якщо у вас віртуальний хостинг і в логах з помилками PHP пусто, зв’яжіться з підтримкою провайдера і попросіть їх подивиться загальні логи. Нехай пришлють останні рядки звідти.
Ви також можете увімкнути опцію display_errors, щоб причина помилки з логів відображалася на сайті. В панелі керування cPanel для цього потрібно знайти на головній сторінці панелі розділ «Програмне забезпечення» і відкрити програму «Select PHP Version».
Далі перейдіть на вкладку «Options» і поставте галочку в рядку «display_errors». Зміни збережуться автоматично.
На VPS або виділеному сервері додайте таку директиву до основного файлу php.ini:
display_errors = on
Після цього текст з логів буде виводитися на екран. Спочатку в ньому буде причина помилки, а потім її пояснення. Наприклад, шлях до файлу з номером рядка, на якій ця помилка знаходиться. Ось приклад такого повідомлення.
У цьому випадку 500 помилка виникла через те що, як зазначено на 33 рядку в файлі wp-settings.php, серверу обов’язково потрібно відкрити файл version.php (слово «require» на самому початку) але прав для відкриття цього файлу немає (слова «Permission denied»).
3. Перевірте глобальні конфігураційні файли
Якщо у вас віртуальний хостинг, турбуватися нема про що. За налаштування цих файлів відповідає хостинг-провайдер, тому ймовірність виникнення помилки через таку проблему майже нульова.
Якщо у вас VPS або виділений сервер, ви самі відповідаєте за налаштування цих файлів. І в цьому випадку 500 помилку може викликати випадкова помилка або конфліктуючі директиви.
У веб-сервера Apache конфігураційні файли зберігаються в таких місцях:
- Основний конфігураційний файл httpd.conf в каталозі /etc/httpd/conf/ або apache.conf в каталозі /etc/apache2/conf/ (в залежності від дистрибутива).
- Додаткові конфігураційні файли, в яких розміщені віртуальні хости, в каталогах /etc/httpd/conf.d/, /etc/apache2/conf.d/, /etc/apache2/sites-available/ або /etc/apache2/sites-enabled/.
У веб-сервера Nginx конфігураційні файли зберігаються в таких місцях:
- Основний конфігураційний файл nginx.conf в каталозі /etc/nginx/.
- Додаткові конфігураційні файли, в яких розміщені віртуальні хости, в каталогах /etc/nginx/conf.d/, /etc/nginx/sites-available/ або /etc/nginx/sites-enabled/.
Якщо ви керуєте сервером за допомогою якоїсь панелі керування, конфігураційні файли можуть зберігатися в інших папках. Наприклад, для Webuzo це /usr/local/apps/apache, а для Plesk — /home/user/conf/.
4. Перевірте допоміжний конфігураційний файл .htaccess
Цей файл буде у кореневій папці домену на будь-якому хостингу з веб-сервером Apache. Навіть якщо ви ніколи не редагували його, в ньому все одно може бути помилка. Наприклад, таке буває з сайтами на WordPress: при встановленні плагінів вони самі додають потрібні директиви у файл, через що іноді виникають конфлікти з попередніми директивами і виникає 500 помилка.
Щоб перевірити, чи дійсно справа у .htaccess, перейменуйте його на хостингу і знову зайдіть на сайт. З іншою назвою файл не буде працювати. Якщо помилка пропаде, проблема саме в файлі. Залишається тільки знайти директиву, яка викликає помилку. Для цього додайте знак решітки на початку кожного рядка директиви:
#RewriteEngine On #RewriteCond %{HTTP_HOST} !^www\. #RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Читайте докладніше на цю тему:
5. Перевірте права доступу до папок і файлів
Помилка 500 Internal Server Error часто виникає, тому що у веб-сервера немає доступу до якоїсь папки або файлу, через що він не може виконати скрипт. Справа може бути у тому, що у файлу або папки в принципі неробочі права, а може в тому, що файлом або папкою володіє один користувач, а веб-сервер виконує процеси від імені іншого; у власника права є, а у веб-сервера немає.
Змінити власника можна в командному рядку за допомогою команди chown:
chown користувач:група /шлях/до/папки-або-файлу
Змінити права можна або за допомогою FTP-клієнта на зразок FileZilla, якщо ви таким користуєтеся, або за допомогою диспетчера файлів у панелі керування хостингом. Ось як зробити це в cPanel.
На головній сторінці панелі знайдіть блок «Файли» і перейдіть в розділ «Диспетчер файлів».
Виділіть потрібний файл або папку і натисніть у верхній панелі кнопку «Дозволи». Ось стандартні значення, з якими все повинно працювати:
- для каталогів — 755;
- для файлів — 644.
Якщо звикли працювати з файлами в командному рядку, ось команда, яка допоможе змінити права:
chmod [дозволи] /шлях/до/папки
Читайте докладнiше на цю тему:
Права доступу до папок і файлів на хостингу
6. Перевірте базу даних
Помилка Internal Server Error ще виникає, коли сервер не може підключитися до бази даних. Текст помилки в цьому випадку буде «Error establishing a database connection», але в логах буде код помилки 500.
Найчастіше сервер не може підключитися до бази даних через те, що в файлі з деталями бази вказано неправильний логін або пароль. Таке може статися, якщо ви або ваш програміст поміняли деталі, але випадково забули оновити їх у файлі. Розташований цей файл зазвичай в кореневій папці сайту і має у своїй назві слово config. Наприклад, для сайтів на WordPress це wp-config.php, а для сайтів на OpenCart — config.php.
Також справа може бути у тому, що MySQL-сервер перевантажений через велику кількість відвідувачів. Таке часто буває на віртуальному хостингу, де для кожного користувача обмежена кількість одночасних підключень до бази.
Запитів до бази даних може стати більше в міру природного зростання трафіку на сайт. Це зазвичай означає, що потрібен більш потужний хостинг. Або запити можуть бути шкідливими і тоді потрібно просто від них відбитися. Перевірити навантаження можна за допомогою команд SHOW GLOBAL STATUS, VMSTAT або TOP. Якщо не розбираєтеся, зверніться за допомогою до розробника сайту або підтримки вашого хостинг-провайдера.
Ще помилку Error establishing a database connection може викликати пошкодження в базі даних. У міру того як ви наповнюєте свій сайт контентом, встановлюєте теми і плагіни, оптимізуєте його за допомогою різних інструментів, що щось важливе може випадково видалитися, через що база перестане працювати. У цьому випадку рішенням буде відновити резервну копію, якщо вона є.
7. Перевірте використання ресурсів на сервері
Будь-яка дія на сайті запускає на сервері процес. Якщо їх буде дуже багато і всі ресурси виявляться зайняті, почне утворюватися черга. Може вийти так, що черга стане занадто довгою і нові процеси почнуть витісняти старі. В результаті якийсь важливий процес може не виконатися і виникне 500 помилка.
Якщо у вас віртуальний хостинг, ви не можете керувати процесами — це завдання провайдера. Але, можливо, зможете оцінити завантаженість сервера в своїй панелі керування. У cPanel це можна зробити в блоку «Статистика» на головній сторінці панелі праворуч:
При повній завантаженості сервера ви можете зв’язатися з провайдером і попросити їх завершити деякі процеси. Але на такому хостингу вони зазвичай пов’язуються з клієнтами самі, коли помічають у них багато важких процесів, оскільки це може впливати на роботу інших сайтів на сервері.
Якщо у вас VPS або виділений сервер, ви самі керуєте процесами. Їх можна подивитися за допомогою команди top, і при необхідності завершити деякі з них за допомогою команди:
kill -TERM [PID]
У цій команді «PID» — це номер процесу, який ви отримали за допомогою команди top, а «kill -TERM» — безпечний метод завершення завислого процесу.
Завершити процес — це тимчасова міра. У майбутньому їх знову може стати занадто багато і знову з’явиться 500 помилка. Щоб вирішити проблему, вам знадобиться або переходити на більш потужний тариф, або оптимізувати сайт. Наприклад, відключити непотрібний функціонал, виправити скрипти або переробити запити до бази даних.
Якщо купували хостинг у нас, напишіть нам лист з деталями вашого хостингу і описом проблеми. Наші фахівці подивляться на процеси і підкажуть, що можна зробити.
8. Перевірте параметри PHP max_execution_time і memory_limit
Ці параметри регулюють поведінку сервера при обробці PHP скриптів, щоб він не зависав і не витрачав на обробку всі ресурси. Параметр max_execution_time — це час в секундах, протягом якого скрипт повинен виконатися. А memory_limit — це кількість пам’яті PHP, яку сервер може виділити для виконання скрипта.
Стартових значень цих параметрів може не вистачати, щоб сервер виконав важливі скрипти, через що він буде змушений відправити браузеру 500 помилку.
Один із способів збільшити значення цих параметрів — в панелі керування хостингом. У cPanel для цього потрібно знайти на головній сторінці панелі розділ «Програмне забезпечення» і відкрити програму «Вибір версії PHP».
Далі перейдіть на вкладку «Налаштування», знайдіть зазначені параметри і збільште їх значення. Налаштування зберігаються автоматично.
Окремий момент – після зміни версії PHP індивідуальні значення параметрів memory_limit і max_execution_time повертаються до значень за замовчуванням. Так що доведеться збільшувати їх заново.
9. Перевірте PHP-скрипти на помилки
Найпоширеніші помилки — це одруки: пропущені букви, крапки з комою або дужки. Також може бути таке, що в скрипті стоїть посилання на файл, але самого файлу за вказаним шляхом немає. В результаті сервер не може виконати скрипт і показує в браузері 500 помилку.
Ще одна причина — несумісність скрипта з новою версією PHP. Різні версії відрізняються одно від одної, тому скрипт, який працював з PHP 5.6, може вже не працювати з PHP 7.2. Наприклад, тому що в новій версії більше не підтримується якась змінна. Також після зміни версії PHP деякі розширення можуть бути вимкнені за замовчуванням або бути відсутнім як застарілі.
10. Перевірте плагіни і тему
Будь-який плагін або тема це чийсь код, який ви вбудовуєте в свій сайт. Якщо цей код написаний погано або після його додавання він вступає в конфлікт з іншим кодом, на сервері може виникнути 500 помилка. Іноді вона виникає відразу після встановлення або оновлення і на всіх сторінках сайту, але може і виникати після виконання якоїсь дії або тільки на одній сторінці.
Щоб перевірити, справа в плагіні чи ні, деактивуйте їх і перевірте, чи зникла помилка. Якщо зникла, вмикайте плагіни по черзі, поки не знайдете той, через який вона виникає. Якщо ні, значить справа у чомусь іншому.
Подібним чином можна перевірити і тему — увімкніть замість поточної теми стандартну і знову зайдіть на сайт. Далі по ситуації: або шукайте проблему далі, або міняйте тему, або зв’яжіться з розробником, щоб допоміг вирішити проблему.
Вимкнути плагіни можна в консолі WordPress, в розділі «Плагіни» – «Встановлені плагіни». Оберіть плагіни, які хочете вимкнути, оберіть у спадному меню вище варіант «Деактивувати» і натисніть «Застосувати».
Якщо не можете потрапити до консолі бо 500 помилка відображається на всіх сторінках сайту, відключити плагіни можна в диспетчері файлів у панелі керування хостингом. Ось як це зробити в cPanel.
На головній сторінці cPanel знайдіть блок «Файли» і перейдіть в розділ «Диспетчер файлів».
Далі знайдіть кореневу папку домену, перейдіть в папку wp-content і перейменуйте папку plugins, наприклад, в plugins-old. Це відключить всі плагіни.
Зазвичай для основного домену коренева папка називається public_html, а для додаткового — так само, як і сам домен.
Якщо після цього 500 помилка зникла, перейменуйте папку plugins назад, зайдіть в неї і по черзі перейменовуйте папку з кожним плагіном, поки не знайдете той, який викликає помилку.
11. Зверніться до хостинг-провайдера
500 помилка може виникати, якщо провайдер проводить на сервері технічні роботи. Тому уточніть цей момент у підтримки, якщо не виходить знайти причину помилки самостійно.
Багато провайдерів інформують клієнтів про подібні роботи. У нас для цього є окрема сторінка «Сервісні повідомлення». Ви знайдете її в бічній панелі свого акаунта.
Що робити, якщо поради не допомогли
На жаль, таке теж може статися. Помилка 500 дуже індивідуальна і розглянути всі ситуації в статті неможливо. Спробуйте погуглити фрагмент помилки, можливо, у когось була така сама проблема і її рішення вже описали на якомусь форумі. Альтернативний варіант — надішліть у коментарях до цієї статті повідомлення з логів, постараємося допомогти.
Якщо купували хостинг у нас, пишіть з цим питанням відразу в чат або на пошту support@hostiq.ua. Так буде швидше.