Błąd HTTP 500 Internal Server Error: Przyczyny i sposoby naprawy

Czym jest błąd HTTP 500?
Błąd HTTP 500 (Internal Server Error) to kod statusu po stronie serwera, który oznacza, że serwer WWW napotkał nieoczekiwany problem uniemożliwiający realizację Twojego żądania. Jest to najbardziej ogólny błąd serwera — sposób, w jaki serwer mówi 'coś się zepsuło, ale nie wiem dokładnie co.'
Zgodnie ze specyfikacją HTTP (RFC 9110, sekcja 15.6.1), odpowiedź 500 powinna być używana, gdy serwer nie może znaleźć bardziej szczegółowego kodu statusu 5xx do opisania problemu. W odróżnieniu od błędu 503 (który sygnalizuje stan tymczasowy), błąd 500 nie daje żadnej wskazówki, czy problem jest tymczasowy, czy trwały.
Kluczowa różnica polega na tym, że błąd 500 jest prawie zawsze spowodowany błędem w kodzie, błędną konfiguracją lub awarią kodu po stronie serwera — a nie czymś, co zrobił odwiedzający. Naprawa musi nastąpić ze strony właściciela witryny lub administratora serwera.
Jak wygląda błąd 500
Błąd 500 wyświetla się różnie w zależności od serwera WWW, dostawcy hostingu i systemu CMS. Oto najczęstsze komunikaty, na które możesz natrafić.
500 Internal Server Error — standardowy komunikat
HTTP Error 500 — często widoczny w pasku adresu przeglądarki
Internal Server Error — ogólny tekst bez kodu statusu
The server encountered an internal error or misconfiguration — domyślny komunikat Apache
500 Internal Server Error – nginx — minimalna strona błędu Nginx
There has been a critical error on this website — WordPress (od wersji 5.2)
HTTP Error 500.19 – Internal Server Error — IIS z podkodami statusu
500. That's an error. — własna strona błędu Google
Najczęstsze przyczyny błędu HTTP 500
Błąd 500 może być wywołany przez dziesiątki różnych problemów po stronie serwera. Oto najczęstsze przyczyny, uszeregowane według częstotliwości występowania.
Uszkodzony plik .htaccess — Pojedynczy źle umieszczony znak lub nieprawidłowa dyrektywa w .htaccess spowoduje natychmiastową awarię Apache. To przyczyna nr 1 na hostingu współdzielonym.
Fatalne błędy PHP — Błędy składni, nieobsługiwane wyjątki lub wywołanie niezdefiniowanych funkcji zatrzymują wykonywanie skryptu i generują błąd 500.
Wyczerpanie limitu pamięci PHP — Skrypty przekraczające memory_limit (domyślnie 128M) ulegają awarii bez ostrzeżenia. Częstymi wyzwalaczami są przetwarzanie dużych obrazów i złożone zapytania bazodanowe.
Nieprawidłowe uprawnienia plików — Pliki powinny mieć uprawnienia 644, katalogi 755. Zarówno zbyt restrykcyjne, jak i niebezpiecznie otwarte (777) uprawnienia powodują problemy.
Konflikty wtyczek lub motywów — Nowo zaktualizowana lub niekompatybilna wtyczka może spowodować awarię całej aplikacji. To najczęstsza przyczyna specyficzna dla WordPressa.
Błąd połączenia z bazą danych — Błędne dane uwierzytelniające, awaria serwera bazy danych lub przekroczenie limitu połączeń uniemożliwiają działanie aplikacji.
Przekroczenie czasu skryptu — Długo działające skrypty przekraczają max_execution_time (domyślnie 30 sekund) i są zabijane przez serwer.
Uszkodzone pliki rdzenia CMS — Nieudane aktualizacje lub przerwane transfery plików pozostawiają krytyczne pliki niekompletne.
Awarie procesów PHP-FPM — Procesy robocze umierające z powodu problemów z pamięcią lub osiągnięcia limitów pm.max_children powodują, że Nginx zwraca 500.
Błędna konfiguracja serwera — Zła wersja PHP, nieprawidłowe ustawienia virtual host lub błędne bloki serwera Nginx wywołują błędy 500.
Pełny dysk — Gdy serwerowi braknie miejsca na dysku, nie może zapisywać logów ani plików tymczasowych, co powoduje awarie.
Błędy skryptów CGI/Perl — Zły tryb plików (binarny vs ASCII), nieprawidłowe zakończenia linii lub brakujące moduły.
Jak naprawić błąd 500 (jako odwiedzający)
Jeśli widzisz błąd 500 na czyjejś stronie, problem leży po stronie serwera — nie Twojej. Jest jednak kilka rzeczy, które możesz spróbować, zanim się poddasz.
Odśwież stronę — Poczekaj 30 sekund, a następnie naciśnij F5 lub Ctrl+R (Cmd+R na Macu). Wiele błędów 500 jest powodowanych przez chwilowe problemy serwera, które same się rozwiązują.
Twarde odświeżenie — Naciśnij Ctrl+Shift+R (Cmd+Shift+R na Macu), aby ominąć pamięć podręczną przeglądarki i pobrać całkowicie nową kopię.
Wyczyść pamięć podręczną i pliki cookie przeglądarki — Przejdź do ustawień przeglądarki i wyczyść zapisane pliki. Uszkodzone dane w pamięci podręcznej mogą czasami powodować problemy z wyświetlaniem.
Spróbuj w trybie incognito — Otwórz okno prywatne/incognito, aby wykluczyć rozszerzenia przeglądarki lub zapisany stan powodujący problemy.
Sprawdź, czy strona jest niedostępna dla wszystkich — Użyj narzędzia HTTP Headers Checker DNS Robot, aby zweryfikować kod odpowiedzi serwera.
Spróbuj ponownie później — Ponieważ problem leży po stronie serwera, to właściciel witryny musi go naprawić. Poczekaj 15-30 minut i sprawdź ponownie.
Skontaktuj się z właścicielem strony — Jeśli błąd utrzymuje się przez kilka godzin, powiadom go przez formularz kontaktowy lub media społecznościowe.
Rozwiązanie 1: Sprawdź logi błędów serwera
Logi błędów to najważniejsze narzędzie do debugowania błędów 500. Powiedzą Ci dokładnie, co poszło nie tak, łącznie ze ścieżką pliku, numerem linii i komunikatem błędu. Zawsze sprawdzaj logi, zanim spróbujesz czegokolwiek innego.
# Apache error log
tail -100 /var/log/apache2/error.log
# Nginx error log
tail -100 /var/log/nginx/error.log
# PHP-FPM error log
tail -100 /var/log/php-fpm/error.log
# WordPress debug log (if WP_DEBUG_LOG enabled)
tail -100 /path/to/wordpress/wp-content/debug.logRozwiązanie 2: Przetestuj i napraw .htaccess
Uszkodzony lub błędnie skonfigurowany plik .htaccess to najczęstsza przyczyna błędów 500 na serwerach Apache. Pojedyncza literówka, nieobsługiwana dyrektywa lub błędna reguła RewriteRule mogą wyłączyć całą stronę.
Najszybszym testem jest tymczasowa zmiana nazwy pliku. Jeśli strona zacznie działać po zmianie nazwy, to .htaccess był problemem.
# Rename to disable .htaccess
mv .htaccess .htaccess_backup
# If site loads, regenerate a clean .htaccess
# For WordPress, go to Settings > Permalinks and click SaveRozwiązanie 3: Napraw uprawnienia plików
Nieprawidłowe uprawnienia plików uniemożliwiają serwerowi WWW odczytywanie lub wykonywanie plików. Standardowe uprawnienia to 644 dla plików i 755 dla katalogów. Nigdy nie ustawiaj uprawnień na 777 — to zagrożenie bezpieczeństwa, a wielu dostawców hostingu to blokuje.
# Set correct directory permissions
find /path/to/webroot -type d -exec chmod 755 {} \;
# Set correct file permissions
find /path/to/webroot -type f -exec chmod 644 {} \;
# WordPress wp-config.php (extra security)
chmod 440 wp-config.phpRozwiązanie 4: Zwiększ limit pamięci i czas wykonywania PHP
Skrypty PHP, które przekroczą limit pamięci lub maksymalny czas wykonywania, są cicho zabijane przez serwer, co skutkuje błędem 500. Domyślny memory_limit 128M i max_execution_time 30 sekund są często zbyt niskie dla złożonych aplikacji.
Możesz zwiększyć te limity na kilka sposobów w zależności od konfiguracji serwera.
# Option 1: php.ini (best method)
memory_limit = 256M
max_execution_time = 300
# Option 2: .htaccess (Apache only)
php_value memory_limit 256M
php_value max_execution_time 300
# Option 3: .user.ini (FastCGI/Nginx)
memory_limit = 256M
# Option 4: wp-config.php (WordPress)
define( 'WP_MEMORY_LIMIT', '256M' );Rozwiązanie 5: Wyłącz wtyczki i motyw (CMS)
Jeśli używasz WordPressa, Joomli lub innego systemu CMS, wadliwa wtyczka lub motyw to jedna z najczęstszych przyczyn błędów 500. Najszybszym sposobem na przetestowanie jest wyłączenie wszystkich wtyczek naraz, a następnie ponowne włączanie ich jedna po drugiej.
# Disable all WordPress plugins (via file system)
cd /path/to/wordpress/wp-content
mv plugins plugins_disabled
# Or use WP-CLI
wp plugin deactivate --all
# Switch to default theme
wp theme activate twentytwentyfourRozwiązanie 6: Sprawdź połączenie z bazą danych i napraw ją
Błąd 500 może wystąpić, gdy aplikacja nie może połączyć się ze swoją bazą danych. Dzieje się tak, gdy dane uwierzytelniające są błędne, serwer bazy danych nie działa lub tabele są uszkodzone.
Najpierw zweryfikuj dane uwierzytelniające bazy danych w pliku konfiguracyjnym (wp-config.php dla WordPressa, .env dla Laravela). Następnie przetestuj połączenie i w razie potrzeby napraw uszkodzone tabele.
# Test MySQL connection
mysql -u username -p -h localhost database_name -e "SELECT 1;"
# Repair and optimize all tables
mysqlcheck -u username -p --auto-repair --optimize database_name
# WordPress: add to wp-config.php, then visit /wp-admin/maint/repair.php
define( 'WP_ALLOW_REPAIR', true );Rozwiązanie 7: Sprawdź kompatybilność wersji PHP
Uruchamianie kodu napisanego dla starszej wersji PHP na nowszej wersji (lub odwrotnie) wywołuje fatalne błędy. Przestarzałe funkcje, zmienione domyślne zachowania i usunięte funkcjonalności to częste przyczyny problemów po aktualizacji PHP.
Sprawdź aktualną wersję PHP i porównaj ją z wymaganiami Twojej aplikacji.
# Check PHP version
php -v
# List loaded PHP modules
php -m
# Check current memory limit
php -i | grep memory_limitRozwiązanie 8: Sprawdź miejsce na dysku
Gdy serwerowi braknie miejsca na dysku, nie może zapisywać plików logów, plików tymczasowych ani danych sesji — co powoduje błędy 500. Jest to często pomijane, ale zaskakująco częste, zwłaszcza gdy pliki logów rosną bez kontroli.
# Check disk usage
df -h
# Find large files eating disk space
du -sh /var/log
du -sh /tmp
# Clear old log files if needed
truncate -s 0 /var/log/nginx/error.log500 vs 502 vs 503 vs 504: Jaka jest różnica?
Kluczowa różnica: 500 = serwer zepsuł się wewnętrznie. 502 = proxy otrzymał nieprawidłową odpowiedź od backendu. 503 = serwer żyje, ale jest zajęty. 504 = proxy zrezygnował z czekania. Możesz sprawdzić dokładny kod statusu, który zwraca Twój serwer, używając narzędzia HTTP Headers Checker DNS Robot.
| Kod | Nazwa | Co oznacza | Częsta przyczyna |
|---|---|---|---|
| 500 | Internal Server Error | Sam serwer uległ awarii lub wyrzucił nieobsługiwany wyjątek | Fatalny błąd PHP, błędny .htaccess, wyczerpanie pamięci |
| 502 | Bad Gateway | Proxy otrzymał nieprawidłową odpowiedź od backendu | Awaria PHP-FPM, backend nie działa, zamknięte gniazdo |
| 503 | Service Unavailable | Serwer jest tymczasowo przeciążony lub w trybie konserwacji | Skok ruchu, planowana konserwacja, limity zasobów |
| 504 | Gateway Timeout | Proxy przekroczył czas oczekiwania na odpowiedź backendu | Wolne zapytanie bazodanowe, długo działający skrypt, niereagujący upstream |
Jak błędy 500 wpływają na SEO
Błędy 500 mają poważniejszy wpływ na SEO niż większość innych błędów HTTP. Oto, co musisz wiedzieć.
Deindeksacja może zacząć się w ciągu 2 dni. John Mueller z Google potwierdził, że uporczywe błędy 500 mogą spowodować usunięcie adresów URL z indeksu w zaledwie dwa dni. Jest to szybsze niż w przypadku błędów 503, które Google traktuje jako tymczasowe.
Błędy 500 marnują budżet indeksowania. W odróżnieniu od błędów 404 (które Google w końcu przestaje ponownie indeksować), błędy 500 są niejednoznaczne — strona może wrócić — więc Googlebot agresywnie ponawia próby. Marnuje to budżet indeksowania na stronach, które nic nie dostarczają.
Pozycje spadają szybko, ale się odzyskują. Po naprawieniu problemu Google zwykle przywraca indeksowanie w ciągu kilku dni. Jednak odzyskanie pozycji może zająć tygodnie — rankingi nie wracają natychmiast.
Używaj 503 do planowanej konserwacji, nigdy 500. Prawidłowo skonfigurowana odpowiedź 503 z nagłówkiem Retry-After informuje Google, aby wrócił później, bez usuwania strony. Błąd 500 nie wysyła takiego sygnału.
Jak zapobiegać błędom 500
Zapobieganie jest zawsze lepsze niż debugowanie. Stosuj te najlepsze praktyki, aby zminimalizować ryzyko błędów 500 na swojej stronie.
Ustaw monitoring dostępności — Użyj narzędzi takich jak UptimeRobot lub Pingdom, aby sprawdzać stronę co 1-5 minut. Otrzymuj natychmiastowe alerty, gdy wystąpi błąd 500.
Zawsze testuj zmiany na środowisku stagingowym — Nigdy nie wdrażaj bezpośrednio na produkcję. Testuj aktualizacje wtyczek, uaktualnienia PHP i zmiany konfiguracji na środowisku testowym.
Używaj kontroli wersji (Git) — Commituj każdą zmianę, abyś mógł natychmiast cofnąć wadliwe wdrożenie jednym poleceniem.
Implementuj prawidłową obsługę błędów — Otaczaj zapytania bazodanowe i wywołania API blokami try-catch. Loguj pełne ścieżki stosu po stronie serwera dla każdego błędu.
Monitoruj miejsce na dysku i zasoby serwera — Ustaw alerty dla zużycia dysku powyżej 80%, wysokiego CPU i nacisku na pamięć.
Aktualizuj oprogramowanie — Przestarzałe wersje CMS, wtyczek i oprogramowania serwera zawierają znane błędy powodujące awarie.
Utrzymuj automatyczne kopie zapasowe — Regularnie testuj procedurę przywracania. Kopia zapasowa, której nigdy nie testowałeś, nie jest kopią zapasową.
Ustaw odpowiednie limity PHP — Skonfiguruj memory_limit i max_execution_time na podstawie faktycznego obciążenia, a nie domyślnych wartości.
Używaj pipelinów CI/CD — Automatyzuj testowanie przed wdrożeniem. Jeśli testy zawiodą, wdrożenie nie powinno być kontynuowane.
Sprawdź odpowiedź swojego serwera
Użyj narzędzia HTTP Headers Checker DNS Robot, aby zweryfikować, jaki kod statusu zwraca Twój serwer i przeanalizować wszystkie nagłówki odpowiedzi.
Try HTTP Headers CheckerFrequently Asked Questions
Błąd HTTP 500 (Internal Server Error) oznacza, że serwer WWW napotkał nieoczekiwany problem, który uniemożliwił realizację Twojego żądania. Jest to ogólny błąd wskazujący, że coś się zepsuło po stronie serwera, ale serwer nie może wskazać dokładnej przyczyny.