Błąd wewnętrzny 500 Apache, ale nic w logach?

Dostaję 500 wewnętrznych błędów serwera, gdy próbuję zrobić POST HTTP na konkretny adres w mojej aplikacji. Zajrzałem do dzienników serwera w niestandardowym katalogu dziennika określonym w pliku virtual hosts, ale błąd nie pojawia się tam, więc debugowanie tego było wrzodem na dupie.

Jak mogę spowodować, że Apache zaloguje wewnętrzne błędy 500 do dziennika błędów?

Author: Eric Leschinski, 2011-01-19

8 answers

Dziennik błędów zwykle zawiera (bardziej) konkretny błąd. często będzie to Odmowa uprawnień lub nawet interpreter, którego nie można znaleźć.

Oznacza to, że wina prawie zawsze leży po stronie Twojego scenariusza. np. wgrałeś skrypt Perla, ale nie dałeś mu uprawnień do wykonania? a może został uszkodzony w środowisku Linuksa, jeśli napiszesz skrypt w systemie windows, a następnie załadujesz go na serwer bez konwersji zakończeń linii, otrzymasz ten błąd.

W Perlu jeśli zapomnisz

print "content-type: text/html\r\n\r\n";

Dostaniesz ten błąd

Jest wiele powodów. więc najpierw sprawdź swój dziennik błędów, a następnie podaj więcej informacji.

Domyślny dziennik błędów jest często w /var/log/httpd/error_log lub /var/log/apache2/error.log.

Powodem, dla którego patrzysz na domyślne dzienniki błędów (jak wskazano powyżej), jest to, że błędy nie zawsze są publikowane w niestandardowym dzienniku błędów zdefiniowanym w wirtualnym hoście.

Zakłada Linuksa, a niekoniecznie Perla

 2
Author: DeveloperChris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-02 00:05:37

Dlaczego wewnętrzne błędy serwera 500 nie są logowane do dzienników błędów apache?

Błędy, które powodują Wewnętrzny błąd serwera 500, pochodzą z modułu PHP. Domyślnie PHP nie rejestruje tych błędów. Powodem jest to, że chcesz, aby żądania internetowe szły tak szybko, jak to możliwe fizycznie.

Te instrukcje umożliwiające wewnętrzne rejestrowanie błędów serwera są dla Ubuntu 12.10 z PHP 5.3.10 i Apache/2.2.22.

Upewnij się, że logowanie PHP jest włączone on:

  1. Zlokalizuj swoje php.plik ini:

    el@apollo:~$ locate php.ini
    /etc/php5/apache2/php.ini
    
  2. Edytuj ten plik jako root:

    sudo vi /etc/php5/apache2/php.ini
    
  3. Znajdź tę linię w php.ini:

    display_errors = Off
    
  4. Zmień powyższy wiersz na ten:

    display_errors = On
    
  5. Niżej w pliku zobaczysz to:

    ;display_startup_errors
    ;   Default Value: Off
    ;   Development Value: On
    ;   Production Value: Off
    
    ;error_reporting
    ;   Default Value: E_ALL & ~E_NOTICE
    ;   Development Value: E_ALL | E_STRICT
    ;   Production Value: E_ALL & ~E_DEPRECATED
    
  6. Średniki są komentarzami, co oznacza, że linie nie działają. Zmień te linie, aby wyglądały tak:

    display_startup_errors = On
    ;   Default Value: Off
    ;   Development Value: On
    ;   Production Value: Off
    
    error_reporting = E_ALL
    ;   Default Value: E_ALL & ~E_NOTICE
    ;   Development Value: E_ALL | E_STRICT
    ;   Production Value: E_ALL & ~E_DEPRECATED
    

    Co to komunikuje się z PHP jest to, że chcemy zarejestrować wszystkie te błędy. Uwaga, będzie duży hit wydajności, więc nie chcesz, aby to włączone na produkcji, ponieważ logowanie wymaga pracy i praca wymaga czasu, czas kosztuje.

  7. Ponowne uruchomienie PHP i Apache powinno zastosować zmianę.

  8. Zrób to, co zrobiłeś, aby ponownie spowodować błąd wewnętrznego serwera 500 i sprawdź dziennik:

    vi /var/log/apache2/error.log
    
  9. Powinieneś zobaczyć Błąd 500 na końcu, coś w stylu to:

    [Wed Dec 11 01:00:40 2013] [error] [client 192.168.11.11] PHP Fatal error:  
    Call to undefined function Foobar\\byob\\penguin\\alert() in /yourproject/
    your_src/symfony/Controller/FuckedUpController.php on line 249, referer: 
    https://nuclearreactor.com/abouttoblowup
    
 106
Author: Eric Leschinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-03 13:23:09

Właśnie natknąłem się na to i było to spowodowane błędną konfiguracją mod_authnz_ldap w moim .plik htaccess. Absolutnie nic nie było rejestrowane, ale ciągle dostaję błąd 500.

Jeśli napotkasz ten konkretny problem, możesz zmienić poziom dziennika mod_authnz_ldap w następujący sposób:

LogLevel warn authnz_ldap_module:debug

To użyje poziomu debugowania dziennika dla mod_authnz_ldap, ale ostrzega o wszystkim innym ( https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel).

 8
Author: bmaupin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-23 16:29:43

Sprawdź dziennik błędów php, który może być oddzielnym plikiem od dziennika błędów apache.

Znajdź go przechodząc do phpinfo() i sprawdź atrybut error_log. Jeśli nie jest ustawiony. Ustaw go: https://stackoverflow.com/a/12835262/445131

Może twój post_max_size jest zbyt mały dla tego, co próbujesz opublikować, lub jedno z innych ustawień pamięci jest zbyt niskie.

 7
Author: jsonH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:21

Jeśli twój wewnętrzny błąd serwera nie pojawia się w plikach logów, prawdopodobnie musisz ponownie uruchomić usługę Apache.

Odkryłem, że Apache 2.4 (przynajmniej na platformie Windows) uparcie odmawia spłukiwania plików dziennika-zamiast tego zalogowane dane pozostają w pamięci przez dłuższy czas. To dobry pomysł z punktu widzenia wydajności, ale może być mylące podczas opracowywania.

 6
Author: Álvaro González,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-22 19:17:13

Sprawdź, czy wersja php, którą używasz, pasuje do twojej bazy kodowej. Na przykład w lokalnym środowisku może działać php 5.4 (i wszystko działa dobrze) i być może testujesz swój kod na nowej maszynie z zainstalowanym php 5.3. Jeśli używasz składni 5.4, takiej jak [] for array (), otrzymasz sytuację opisaną powyżej.

 1
Author: John Erck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-09 19:31:53

Spróbuj uzyskać dostęp do pliku statycznego. Jeśli to też nie działa to przejdź do wszystkich katalogów z katalogu głównego " / " lub "c:\" do katalogu Twojego pliku i sprawdź, czy zawierają ".htaccess" pliki.

Kiedyś zostawiłem plik w "c:\" i miał najdziwniejsze wyniki.

 0
Author: Lothar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-28 04:05:36

W moim przypadku była to dyrektywa ErrorLog w httpd.conf. Przypadkowo zauważyłam to już po tym, jak się poddałam. Postanowiłem podzielić się odkryciem ) Teraz wiem, gdzie znaleźć 500-błędy.

 0
Author: Evgenii Lycenok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-16 05:40:28