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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

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

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

    [email protected]:~$ 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/MessedUpController.php on line 249, referer: 
    https://nuclearreactor.com/abouttoblowup
    

Ответ 3

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

Ответ 4

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

Найдите его, перейдя в phpinfo() и проверьте атрибут error_log. Если он не установлен. Установите его: fooobar.com/questions/76149/...

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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