apache - 内部错误 500 Apache,但日志中没有任何内容?

标签 apache error-logging

当我尝试向应用程序中的特定地址发出 HTTP POST 时,出现 500 个内部服务器错误。我已经查看了虚拟主机文件中指定的自定义日志目录中的服务器日志,但错误没有显示在那里,因此调试这是一件很痛苦的事情。

如何让 Apache 将内部 500 错误记录到错误日志中?

最佳答案

这是 2013 年的一个古老答案,当时 PHP 还很新鲜,安全性不是问题:

将来像这样将错误转储到屏幕会存在安全风险。您最好不要在任何生产环境中执行此操作。

为什么 500 个内部服务器错误没有记录到您的 apache 错误日志中?

导致 500 内部服务器错误的错误来自 PHP 模块。默认情况下,PHP 不记录这些错误。原因是您希望 Web 请求尽可能快地进行,而将错误记录到攻击者可以观察到的屏幕上会存在安全隐患。

这些启用内部服务器错误日志记录的说明适用于 Ubuntu 12.10PHP 5.3.10Apache/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 错误的操作,并检查日志:

    tail -f /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
    

关于apache - 内部错误 500 Apache,但日志中没有任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4731364/

相关文章:

java - Maven 和 CXF : abstractMethodError (getConduit) with web service

.net - 错误记录例程中的异常怎么办?

postgresql - 记录和存储 Postgres 错误?

asp.net - 如何捕获 global.asax 中的 AJAX WebMethod 错误?

node.js - Bunyan 中的多个日志路径

linux - 每次重启 cloud-init 时启动 apache 网络服务器

php - 什么时候 .php 文件太大了?

windows - Apache DocumentRoot 到虚拟主机的网络目录

django - 服务器滞后 - Django + mongodb + cronjob

error-handling - Apiglity是否提供内置的错误处理和日志记录?