Diversity w polskim IT
nazwa.pl
nazwa.pl

Błąd 500, który… nie jest błędem serwera?

Widząc „server error”, duża grupa właścicieli stron internetowych myśli, że tu kończy się ich możliwość działania, a winę za taki, a nie inny stan rzeczy, ponosi firma hostingowa. Nic bardziej mylnego.
2.08.20225 min
Błąd 500, który… nie jest błędem serwera?

W dosłownym tłumaczeniu „Internal Server Error” to błąd wewnętrzny serwera. Jest to jeden z komunikatów diagnostycznych protokołu HTTP (ang. Hypertext Transfer Protocol). Obok błędu 500 mamy całą rodzinę błędów rozpoczynających się na 5xx (np. 501, 503, 504 itd.), a także rozpoczynające się na 4xx (401, 404, 408 itd.) oraz kody informacyjne serii 2xx i 3xx. Wielu użytkowników Internetu spotkało się na pewno z błędem 404, który oznacza „nie znaleziono” (ang. Not found). Błąd 404 pojawia się wówczas, gdy strona internetowa odwołuje się do zasobu, którego fizycznie serwer nie jest w stanie odnaleźć. Brak, np. pliku, może być spowodowany albo niepoprawną budową linku odsyłającego, albo fizycznym usunięciem pliku z serwera. Widząc komunikat „404”, mało kto wini firmę hostingową za to, że określonego pliku na serwerze nie ma, raczej właściciel strony zastanawia się, kiedy ów plik usunął z serwera.

Kod błędu 500 Internal Server Error | nazwa.pl


Co gdy serwer nie jest w stanie dokładnie sprecyzować, jaki problem pojawił się przy przetwarzaniu strony internetowej? Nie każdą bowiem nieprawidłowość można określić na poziomie protokołu HTTP. Dlatego — gdy serwer, na którym umieszczamy swoją stronę, nie posiada informacji, jak zaprezentować dany „error”, na który napotkał — na ogół wyświetli nam komunikat „Internal Server Error”, podając jeszcze identyfikator liczbowy „500”.

500-tka na stronie WWW

Gdy na stronie internetowej, którą się zajmujemy, nagle pojawi się błąd „Internal Server Error”, często zapominamy o możliwości samodzielnej diagnostyki takiej nieprawidłowości. Jest ona niezwykle prosta, ale — aby ją skutecznie przeprowadzić — trzeba znać kilka podstawowych przyczyn, dla których serwery wyświetlają błędy 500 zamiast oczekiwanych zasobów WWW. Często, gdy już zobaczymy błąd 500, nie jest możliwe wykonanie jakichkolwiek czynności na stronie. Jeżeli korzystamy z systemu zarządzania treścią, takiego jak np. WordPress, błąd 500 może uniemożliwić nawet zalogowanie się do zaplecza strony. Wszystko zostaje zablokowane, zostaje tylko serwer, my i… wiedza, jak radzić sobie z błędami 500 na stronach WWW.

Na serwerach nazwa.pl utrzymywanych jest kilkaset tysięcy stron internetowych. Każda strona jest unikalna, każda działa niezależnie. Ale jak pokazuje statystyka, nazywana niekiedy królową nauk, dzięki tak dużej próbie można dość łatwo znaleźć charakterystyczne przyczyny, które powodują, że zamiast strony internetowej nagle pojawia się komunikat, którego nikt w tym miejscu nie chciałby zobaczyć.

Leczymy błąd 500 bez ZUS i NFZ 😊

W sytuacji nieoczekiwanego błędu 500 warto w pierwszej kolejności sprawdzić, czy nasza witryna, o ile korzysta z połączenia szyfrowanego SSL, ma ważny certyfikat. Wywoływanie części zasobów strony przez połączenie szyfrowane, a części przez połączenie nieszyfrowane, może spowodować wystąpienie komunikatu o błędzie. To jeden z przypadków, gdy strona „nagle przestaje działać”. Nagle, gdyż w określonym momencie kończy się ważność certyfikatu. To, co musimy w takim przypadku zrobić, to zaktualizować  certyfikat, korzystając z CloudHosting Panelu.

Certyfikaty SSL w CloudHosting Panel nazwa.pl


Aplikacje internetowe mogą się automatycznie aktualizować. Wraz z pojawianiem się nowych wersji PHP, producenci oprogramowania, takiego jak np. WordPress, wydają nowe wersje swoich CMS-ów. Duża grupa właścicieli stron internetowych słusznie wyznaje zasadę, że warto włączyć automatyczne aktualizacje swoich witryn, szczególnie gdy korzystamy, jak w przypadku WordPressa, z rozwiązań o otwartym kodzie źródłowym. Takie aktualizacje mogą jednak spowodować, że strona przestanie być kompatybilna z wersją PHP, która jest ustawiona na serwerze. Podobnie jest w przypadku dodatkowych wtyczek do takiego CMS-u, które również mogą aktualizować się automatycznie, a przez to stawać się niekompatybilnymi z działającą na serwerze wersją PHP. Jeżeli pojawi się błąd 500, warto sprawdzić, czy zmiana wersji PHP go usunie. Taką zmianę w kilka chwil można wykonać, korzystając z CloudHosting Panel.

Ustawienia PHP w CloudHosting Panel nazwa.pl


Pozostając przy CMS-ach z otwartym kodem źródłowym, warto powiedzieć, że nieaktualizowanie tych aplikacji w obawie przed niekompatybilnością nowych wersji z PHP też nie jest dobrym rozwiązaniem. Często aplikacje z otwartym kodem są celem ataków hakerskich. Po takim ataku strona zostaje zawirusowana, a złośliwy kod generuje błędy 500. W analizie ataków pomagają logi Access Log serwera, które można pobrać z CloudHosting Panel.

Wiele osób zwraca uwagę na wyniki pozycjonowania swoich stron WWW. Nie ma co ukrywać, że im wyżej strona pojawia się w wynikach Google, tym większą popularność jej to zapewnia. Właściwe pozycjonowanie strony może być zaburzone przez nieodpowiednio skonfigurowane pliki robots.txt czy sitemap.xml. Te pliki (lub ich brak) mogą prowadzić do pojawiania się błędów 500. Warto już na początku tworzenia strony zadbać o odpowiednie zapisy w robots.txt i sitemap.xml, a potem, w trakcie rozbudowy witryny, na bieżąco je aktualizować.

Wraz ze wzrostem popularności strony może okazać się, że utworzona na początku baza danych nie jest w stanie pomieścić wszystkich informacji, które chcemy w niej gromadzić. Miejsce na serwerze FTP także może się wyczerpać. Takie sytuacje również mogą generować komunikaty „Internal Server Error”.

Aktualne użycie dysku na WWW | nazwa.pl


Wśród innych przyczyn występowania błędów 500 można wymienić np. próbę zmiany wersji PHP poprzez plik .htaccess, błędną konfiguracją Web Application Firewall w .htaccess, użycie magic_quotes_gpc, pętlę przekierowań czy nieprawidłową konfigurację połączenia z bazą danych.

Access Log i Error Log – prywatna kopalnia wiedzy

W zależności od tego, co jest powodem wystąpienia błędu 500 na stronie, odpowiednie zapisy, które pozwalają ustalić przyczyny problemu, wprowadzane są do dzienników zdarzeń, nazywanych logami. Logi przechowują ułożone chronologicznie informacje związane z funkcjonowaniem strony WWW. Korzystając z CloudHosting Panel każdy właściciel witryny umieszczonej na hostingu nazwa.pl ma możliwość weryfikacji dwóch typów logów – Access Log i Error Log. Zarówno w jednym dzienniku, jak i w drugim, mogą zapisywać się błędy 500 witryny internetowej.

Access Log, poza informacjami o prawidłowych wywołaniach plików strony WWW, przechowuje również informacje o błędach 500, których powodem jest wynik działania PHP. Może być to zatem błąd samego skryptu PHP czy też próba uzyskania przez PHP dostępu do nieistniejącego pliku. Poniżej przykład błędu 500, zapisanego w Access Log, związanego z nieprawidłową konfiguracją połączenia z bazą danych:

[26/Oct/2021:12:59:49 +0200] “GET/main.php?
g2_GALLERYSID=54cf2359fc39d018e068f3517bc14d4a&g2_itemId=380 HTTP/1.1” 500 0 “-”
“Mozilla/5.0 (compatible; SemrushBot/7~bl; +http://www.semrush.com/bot.html)” was1


Z kolei Error Log przechowuje informacje o problemach z konfiguracją serwera. Mogą być to zatem błędy w interpretacji ustawień pliku .htaccess, brak certyfikatu SSL czy brak uprawnień dostępu do plików. Poniżej przykład błędu związanego z użyciem niedozwolonej dyrektywy w .htaccess:

[Sun Nov 14 13:37:12.738689 2021] [core:alert] [pid 47:tid 140183773116160] [client ip] ścieżka:
SecRuleRemoveById not allowed here

Diagnozujmy!

Śmiało można powiedzieć, że nie taki „Internal Server Error” straszny, jak go niektórzy malują. Warunkiem poznania genezy błędu 500 na stronie jest eliminowanie potencjalnych problemów, które mogą dotyczyć naszej witryny, a których diagnostykę umożliwiają nam tak łatwo dostępne informacje w CloudHosting Panel. Narzędzie do administrowania serwerem, które udostępnia nazwa.pl, jest bowiem pierwszym miejscem, gdzie powinniśmy zajrzeć, jeżeli na naszej stronie internetowej zobaczymy informację o tytułowym błędzie wewnętrznym serwera. 

<p>Loading...</p>