Внутренняя ошибка 500 Apache, но ничего в логах? - PullRequest
102 голосов
/ 19 января 2011

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

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

Ответы [ 9 ]

126 голосов
/ 11 декабря 2013

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

    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/MessedUpController.php on line 249, referer: 
    https://nuclearreactor.com/abouttoblowup
    
9 голосов
/ 14 мая 2013

Я только что столкнулся с этим, и это произошло из-за неправильной конфигурации 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).

9 голосов
/ 18 июля 2012

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

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

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

7 голосов
/ 22 августа 2015

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

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

0 голосов
/ 16 марта 2019

Добавьте HttpProtocolOptions Unsafe в файл конфигурации Apache и перезапустите сервер Apache. Показывает подробности ошибки.

0 голосов
/ 16 февраля 2018

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

0 голосов
/ 28 мая 2016

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

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

0 голосов
/ 09 апреля 2013

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

0 голосов
/ 19 января 2011

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

Это означает, что ошибка почти всегда лежит в вашем сценарии.Например, вы загрузили скрипт 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

...