wco*_*ert 109 apache error-logging
当我尝试在我的应用程序中的特定地址进行HTTP POST时,我收到500个内部服务器错误.我查看了虚拟主机文件中指定的自定义日志目录中的服务器日志,但是错误没有显示在那里,所以调试这个问题一直很麻烦.
如何让Apache将内部500错误记录到错误日志中?
Eri*_*ski 133
为什么500内部服务器错误没有记录到您的apache错误日志中?
导致500内部服务器错误的错误来自PHP模块.默认情况下,PHP不会记录这些错误.原因是您希望Web请求的速度尽可能快,并且将错误记录到屏幕上是一种安全隐患,攻击者可以在屏幕上观察它们.
这些启用内部服务器错误记录的说明适用Ubuntu 12.10于PHP 5.3.10和Apache/2.2.22.
确保打开PHP日志记录:
找到你的php.ini文件:
el@apollo:~$ locate php.ini
/etc/php5/apache2/php.ini
Run Code Online (Sandbox Code Playgroud)以root身份编辑该文件:
sudo vi /etc/php5/apache2/php.ini
Run Code Online (Sandbox Code Playgroud)在php.ini中找到这一行:
display_errors = Off
Run Code Online (Sandbox Code Playgroud)将上面的行更改为:
display_errors = On
Run Code Online (Sandbox Code Playgroud)在文件中向下,你会看到这个:
;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
Run Code Online (Sandbox Code Playgroud)分号是注释,表示行不生效.更改这些行,使它们看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
与PHP通信的是我们要记录所有这些错误.警告,会有很大的性能损失,因此您不希望在生产中启用此功能,因为日志记录工作且工作需要时间,时间需要花钱.
重新启动PHP和Apache应该应用更改.
执行您的操作再次导致500内部服务器错误,并检查日志:
vi /var/log/apache2/error.log
Run Code Online (Sandbox Code Playgroud)你应该在最后看到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
Run Code Online (Sandbox Code Playgroud)小智 9
检查您的php错误日志,该日志可能是您的apache错误日志中的单独文件.
通过转到phpinfo()并检查error_log属性来查找它.如果没有设置.设置它:https://stackoverflow.com/a/12835262/445131
也许你的post_max_size对于你想要发布的内容来说太小了,或者其他一个最大内存设置太低了.
我刚碰到这个,这是由于我的.htaccess文件中的mod_authnz_ldap配置错误造成的.绝对没有记录任何东西,但我一直收到500错误.
如果遇到这个特定问题,可以像这样更改mod_authnz_ldap的日志级别:
LogLevel warn authnz_ldap_module:debug
Run Code Online (Sandbox Code Playgroud)
这将使用mod_authnz_ldap的日志级别的调试,但警告其他一切(https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel).
请注意:原始发帖者并没有专门询问 PHP。所有以 php 为中心的答案都做出了与实际问题无关的大量假设。
与脚本错误日志相反,默认错误日志通常具有(更多)特定错误。通常会出现权限被拒绝甚至找不到解释器的情况。
这意味着错误几乎总是出在你的脚本上。例如,您上传了一个 perl 脚本但没有授予它执行权限?或者它可能在 Linux 环境中被损坏,如果您在 Windows 中编写脚本,然后将其上传到服务器而不转换行结尾,您将收到此错误。
在 Perl 中,如果你忘记了
print "content-type: text/html\r\n\r\n";
Run Code Online (Sandbox Code Playgroud)
你会得到这个错误
原因有很多。因此,请首先检查您的错误日志,然后提供更多信息。
默认错误日志通常位于/var/log/httpd/error_log或中/var/log/apache2/error.log。
您查看默认错误日志(如上所述)的原因是因为错误并不总是发布到虚拟主机中定义的自定义错误日志中。
假设是 linux 而不是 perl
如果您的内部服务器错误信息未显示在日志文件中,则可能需要重新启动Apache服务.
我发现Apache 2.4(至少在Windows平台上)倾向于顽固地拒绝刷新日志文件 - 相反,记录的数据在内存中保留了相当长的一段时间.从性能的角度来看这是一个好主意,但在开发时可能会让人感到困惑.
| 归档时间: |
|
| 查看次数: |
290234 次 |
| 最近记录: |