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

2023-11-21

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

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


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

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

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

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

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

    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
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内部错误 500 Apache,但日志中没有任何内容? 的相关文章

随机推荐