Я получаю 500 ошибок внутреннего сервера, когда пытаюсь выполнить HTTP POST на определенный адрес в моем приложении. Я просмотрел журналы сервера в каталоге настраиваемых журналов, указанном в файле виртуальных хостов, но ошибки там не было, поэтому отладка этого была головной болью.
Как заставить Apache записывать 500 внутренних ошибок в журнал ошибок?
apache
error-logging
wcolbert
источник
источник
Ответы:
Обратите внимание: исходный плакат не спрашивал конкретно о PHP. Все ответы, ориентированные на php, делают большие предположения, не относящиеся к фактическому вопросу.
Журнал ошибок по умолчанию, в отличие от журналов ошибок скриптов, обычно содержит (более) конкретную ошибку. часто это будет отказ в разрешениях или даже переводчик, который не может быть найден.
Это означает, что ошибка почти всегда лежит в вашем сценарии. например, вы загрузили perl-скрипт, но не дали ему права на выполнение? или, возможно, он был поврежден в среде Linux, если вы напишете сценарий в Windows, а затем загрузите его на сервер без преобразования окончаний строк, вы получите эту ошибку.
в Perl, если вы забудете
вы получите эту ошибку
Для этого есть много причин. Поэтому сначала проверьте журнал ошибок, а затем предоставьте дополнительную информацию.
Журнал ошибок по умолчанию часто находится в
/var/log/httpd/error_log
или/var/log/apache2/error.log
.Причина, по которой вы просматриваете журналы ошибок по умолчанию (как указано выше), заключается в том, что ошибки не всегда записываются в настраиваемый журнал ошибок, как определено на виртуальном хосте.
Предполагает Linux и не обязательно Perl
источник
grep PHP /var/log/syslog
. Возможно потому , что я имелerror_log = syslog
в/etc/php5/apache2/php.ini
.Почему 500 внутренних ошибок сервера не регистрируются в журналах ошибок apache?
Ошибки, вызывающие вашу внутреннюю ошибку сервера 500, исходят из модуля PHP. По умолчанию PHP НЕ регистрирует эти ошибки. Причина в том, что вы хотите, чтобы веб-запросы выполнялись как можно быстрее, и угроза безопасности - записывать ошибки на экран, где злоумышленники могут их заметить.
Эти инструкции по включению регистрации ошибок внутреннего сервера предназначены для использования
Ubuntu 12.10
сPHP 5.3.10
иApache/2.2.22
.Убедитесь, что ведение журнала PHP включено:
Найдите свой файл php.ini:
Отредактируйте этот файл как root:
Найдите эту строку в php.ini:
Измените строку выше на это:
Внизу файла вы увидите это:
Точки с запятой являются комментариями, что означает, что строки не действуют. Измените эти строки так, чтобы они выглядели так:
Это сообщает PHP, что мы хотим регистрировать все эти ошибки. Предупреждение: это сильно снизит производительность, поэтому вы не хотите, чтобы это было включено в производственной среде, потому что ведение журнала требует работы, а работа требует времени, а время стоит денег.
Перезапуск PHP и Apache должен применить изменения.
Сделайте то, что вы сделали, чтобы снова вызвать ошибку внутреннего сервера 500, и проверьте журнал:
В конце вы должны увидеть ошибку 500, примерно так:
источник
display_errors
выводит ошибки на экран .log_errors
записывает ошибки в файл журнала .Проверьте журнал ошибок php, который может быть отдельным файлом от журнала ошибок apache.
Найдите его, перейдя
phpinfo()
и проверив атрибут error_log. Если не установлен. Установите его: https://stackoverflow.com/a/12835262/445131Возможно, ваш post_max_size слишком мал для того, что вы пытаетесь опубликовать, или одна из других настроек максимальной памяти слишком мала.
источник
Я только что столкнулся с этим, и это было из-за неправильной конфигурации mod_authnz_ldap в моем файле .htaccess. Абсолютно ничего не регистрировалось, но я продолжал получать ошибку 500.
Если вы столкнетесь с этой конкретной проблемой, вы можете изменить уровень журнала mod_authnz_ldap следующим образом:
Это будет использовать уровень отладки журнала для mod_authnz_ldap, но предупреждать обо всем остальном ( https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel ).
источник
Если информация о вашей внутренней ошибке сервера не отображается в файлах журнала, возможно, вам необходимо перезапустить службу Apache .
Я обнаружил, что Apache 2.4 (по крайней мере на платформе Windows), как правило, упорно отказываются смыва лог-файлов, вместо этого, вошли остатки данных в памяти долгое время. Это хорошая идея с точки зрения производительности, но может сбивать с толку при разработке.
источник
Ответ @ eric-leschinski верен.
Но есть еще один случай, если ваш серверный API - это FPM / FastCGI (по умолчанию на Centos 8 или вы можете проверить использование функции phpinfo ())
В таком случае:
phpinfo()
в php-файле;Loaded Configuration File
параметр, чтобы узнать, где находится файл конфигурации для вашего PHP.Проверить
Server API
парам. Если ваш сервер использует только API-интерфейс apache handle -> перезапустите apache. Если ваш сервер использует php-fpm, вы должны перезапустить службу php-fpmПроверьте файл журнала в папке журнала php-fpm. например
/var/log/php-fpm/www-error.log
источник
В моем случае это была директива ErrorLog в httpd.conf. Просто случайно заметил это уже после того, как сдался. Решил поделиться открытием) Теперь знаю, где искать 500-ошибки.
источник
Добавьте
HttpProtocolOptions Unsafe
в свой файл конфигурации apache и перезапустите сервер apache. Он показывает детали ошибки.источник
Убедитесь, что используемая вами версия php соответствует вашей кодовой базе. Например, в вашей локальной среде может быть запущен php 5.4 (и все работает нормально), и, возможно, вы тестируете свой код на новой машине, на которой установлен php 5.3. Если вы используете синтаксис 5.4, такой как [] для array (), вы получите описанную выше ситуацию.
источник
Попробуйте получить доступ к статическому файлу. Если и это не работает, перейдите во все каталоги от корня «/» или «c: \» до каталога вашего файла и проверьте, содержат ли они файлы «.htaccess».
Однажды я оставил файл в "c: \", и он дал самые странные результаты.
источник
Пожалуйста, проверьте, не отключили ли вы где-нибудь в коде отчеты об ошибках.
В моем коде было место, где я отключил его, поэтому я добавил код отладки после него:
источник