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

98

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

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

  • 0
    У меня была та же проблема с использованием PHP с виртуальными хостами .... без ошибок (Apache2, Ubuntu). Закончилось отсутствием модулей PHP (mysql, json и т. Д.)
  • 0
    С нашей стороны, он отправлял их в журнал доступа (вероятно, потому что, с точки зрения Apache, он работал правильно и просто передавал их с более глубокого уровня - в нашем случае, Passenger / Rails). Просто поместите эту заметку на случай, если кто-то почесает голову.
Теги:
error-logging

8 ответов

-4
Лучший ответ

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

Это означает, что ошибка почти всегда лежит на вашем script. например, вы загрузили perl script, но не дали ему разрешения на выполнение? или, возможно, он был поврежден в среде linux, если вы пишете script в Windows, а затем загрузите его на сервер без преобразования строк, вы получите эту ошибку.

в perl, если вы забудете

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

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

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

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

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

Предполагается, что linux и не обязательно perl

  • 5
    Я проверил сервер ErrorLog, и там ничего не найдено.
  • 1
    Вы правы, это оказалось проблемой с PHP-скриптом. Библиотека PEAR не была установлена. Я установил его на свой VPS, и все хорошо. Спасибо всем!
Показать ещё 5 комментариев
111

Почему 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 Internal Server error, и проверьте журнал:

    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
    
  • 31
    display_errors печатает ошибки на экране . log_errors записывает ошибки в файл журнала .
  • 10
    Это должен быть канонический ответ на этот вопрос.
Показать ещё 7 комментариев
8

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

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

LogLevel warn authnz_ldap_module:debug

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

  • 0
    Вопрос был: «Как заставить Apache регистрировать внутренние 500 ошибок в журнале ошибок?» Вероятно, это должен быть комментарий.
  • 0
    Хорошее наблюдение. Я добавил инструкции для регистрации этих ошибок.
7

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

Найдите его, перейдя в phpinfo() и проверьте атрибут error_log. Если он не установлен. Установите его: https://stackoverflow.com/questions/12834583/where-can-i-find-error-log-files

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

  • 0
    Вопрос был: «Как заставить Apache регистрировать внутренние 500 ошибок в журнале ошибок?» Вероятно, это должен быть комментарий.
6

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

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

  • 0
    Это был правильный ответ для меня в Linux. Даже после удаления исходного файла error.log (который представлял собой файл символьного устройства) и замены его на touch-log 777 с сенсорным экраном, Apache не будет писать в него, пока его не перезапустят.
1

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

  • 0
    Вопрос был: «Как заставить Apache регистрировать внутренние 500 ошибок в журнале ошибок?» Вероятно, это должен быть комментарий.
0

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

  • 0
    Можете ли вы добавить более подробную информацию в своем ответе
  • 0
    Я использую Magento (CMS - Система управления контентом) для Apache. На моей странице произошла ошибка 500 с использованием основных классов Magento. Я не мог найти, где я мог видеть сообщение об ошибке. Согласно некоторым ответам здесь я попытался найти в логах apache / etc / httpd / logs / error_log. Но там ничего не было. Позже я узнал, что в моем httpd.conf есть строка для этого конкретного веб-хоста, определяющая путь журнала: <VirtualHost. ... ErrorLog / usr / www / log / error_log Так что мне нужно было посмотреть на более конкретный журнал хоста, а не на общий журнал apache.
0

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

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

  • 1
    Вопрос был: «Как заставить Apache регистрировать внутренние 500 ошибок в журнале ошибок?»

Ещё вопросы

Сообщество Overcoder
Наверх
Меню