Внутренняя ошибка 500 Apache, но ничего в логах?

Я получаю 500 внутренних ошибок сервера, когда я пытаюсь сделать HTTP-сообщение на определенный адрес в моем приложении. Я просмотрел журналы сервера в пользовательском каталоге журналов, указанном в файле виртуальных хостов, но ошибка там не отображается, поэтому отладка это была боль в заднице.

Как заставить Apache регистрировать внутренние ошибки 500 в журнале ошибок?

8 ответов


журнал ошибок обычно имеет (более) конкретную ошибку. часто это будут Запрещенные разрешения или даже интерпретатор, который не может быть найден.

это означает, что вина почти всегда лежит на вашем скрипте. e.g вы загрузили скрипт perl, но не дали ему разрешения на выполнение? или, возможно, он был поврежден в среде linux, если вы напишете сценарий в windows, а затем загрузите его на сервер без преобразования окончаний строк, вы получите эту ошибку.

в perl если вы забыли

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

вы получите эту ошибку

есть много причин для этого. поэтому сначала проверьте журнал ошибок, а затем предоставьте дополнительную информацию.

журнал ошибок по умолчанию часто находится в /var/log/httpd/error_log или /var/log/apache2/error.log.

причина, по которой вы смотрите журналы ошибок по умолчанию (как указано выше), заключается в том, что ошибки не всегда публикуются в пользовательском журнале ошибок, как определено в виртуальном хосте.

предполагает linux и не обязательно на Perl


почему 500 внутренних ошибок сервера не регистрируются в ваших журналах ошибок apache?

ошибки, которые вызывают ошибку внутреннего сервера 500, поступают из модуля PHP. По умолчанию PHP не регистрирует эти ошибки. Причина в том, что вы хотите, чтобы веб-запросы шли как можно быстрее физически.

эти инструкции для включения регистрации ошибок внутреннего сервера предназначены для Ubuntu 12.10 С PHP 5.3.10 и Apache/2.2.22.

убедитесь, что PHP ведение журнала включено:

  1. найдите свой php.ini-файл:

    el@apollo:~$ locate php.ini
    /etc/php5/apache2/php.ini
    
  2. отредактируйте этот файл как root:

    sudo vi /etc/php5/apache2/php.ini
    
  3. найдите эту строку в php.ini:

    display_errors = Off
    
  4. изменить эту строку на это:

    display_errors = On
    
  5. ниже в файле вы увидите это:

    ;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. точки с запятой-это комментарии, это означает линии не действуют. Измените эти строки, чтобы они выглядели так:

    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
    

    что это связывает с PHP, так это то, что мы хотим зарегистрировать все эти ошибки. Предупреждение, будет большой удар по производительности, поэтому вы не хотите, чтобы это было включено на производстве, потому что ведение журнала требует работы, а работа требует времени, время стоит денег.

  7. перезапуск PHP и Apache должны применить изменения.

  8. сделайте то, что вы сделали, чтобы вызвать 500 Внутренняя ошибка сервера снова, и проверьте журнал:

    vi /var/log/apache2/error.log
    
  9. вы должны увидеть ошибку 500, в конце концов, что-то вроде этого:

    [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
    

Я просто столкнулся с этим, и это было связано с неправильной конфигурацией mod_authnz_ldap в моем .файл htaccess. Абсолютно ничего не регистрировалось, но я продолжал получать ошибку 500.

Если вы столкнулись с этой конкретной проблемой, вы можете изменить уровень журнала mod_authnz_ldap следующим образом:

LogLevel warn authnz_ldap_module:debug

Это будет использовать уровень журнала отладки для mod_authnz_ldap, но предупреждать обо всем остальном (https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel).


Проверьте журнал ошибок php, который может быть отдельным файлом из вашего журнала ошибок apache.

найдите его, перейдя в phpinfo() и проверьте атрибут error_log. Если он не установлен. Установите его:https://stackoverflow.com/a/12835262/445131

возможно, ваш post_max_size слишком мал для того, что вы пытаетесь опубликовать, или один из других параметров max memory слишком низок.


Если Внутренняя Ошибка Сервера информация не отображается в файлах журнала, вам, вероятно, нужно перезапустите службу Apache.

Я обнаружил, что Apache 2.4 (по крайней мере, на платформе Windows) упорно отказывается очищать файлы журналов-вместо этого зарегистрированные данные остаются в памяти довольно долго. Это хорошая идея с точки зрения производительности, но она может быть запутанной при разработке.


убедитесь, что версия php, которую вы используете, соответствует вашей кодовой базе. Например, ваша локальная среда может работать под управлением php 5.4 (и все работает нормально), и, возможно, вы тестируете свой код на новой машине с установленным php 5.3. Если вы используете синтаксис 5.4, такой как [] для array (), вы получите ситуацию, описанную выше.


попробуйте получить доступ к статическому файлу. Если это не работает, то перейдите во все каталоги из корня " / "или" c:\ "в каталог вашего файла и проверьте, содержат ли они".реврайт" файлов.

Я однажды оставил файл в " c:\", и у него были самые странные результаты.


в моем случае это была директива ErrorLog в httpd.conf. Просто случайно заметил это уже после того, как сдался. Решил поделиться открытием ) Теперь я знаю, где найти 500-ошибки.