内部错误500 Apache,但在日志中没有?
当我尝试将HTTP POST发送到我的应用中的特定地址时,出现500内部服务器错误。 我已经查看了虚拟主机文件中指定的自定义日志目录中的服务器日志,但错误没有显示在那里,所以debugging这是一个痛苦的屁股。
如何导致Apache将内部500错误logging到错误日志中?
错误日志通常具有(更多)特定的错误。 往往会被拒绝权限,甚至无法find解释器。
这意味着故障几乎总是存在于您的脚本中。 例如你上传了一个perl脚本,但没有给它执行权限? 或者如果你在Windows环境中编写脚本,然后将其上传到服务器,而不是转换行结束,则可能是在Linux环境中损坏了,否则会出现此错误。
在Perl中,如果你忘记
print "content-type: text/html\r\n\r\n";
你会得到这个错误
这有很多原因。 所以请先检查你的错误日志,然后提供一些更多的信息。
默认错误日志通常在/var/log/httpd/error_log
或/var/log/apache2/error.log
。
您查看默认错误日志(如上所述)的原因是,错误并不总是按虚拟主机中定义的方式发布到自定义错误日志中。
假设Linux,不一定是Perl
为什么500内部服务器错误没有被logging到你的Apache错误日志?
导致您的500内部服务器错误的错误来自PHP模块。 默认情况下,PHP不logging这些错误。 原因是您希望networking请求的速度尽可能快。
这些启用内部服务器错误日志logging的说明适用于使用PHP 5.3.10
和Apache/2.2.22
Ubuntu 12.10
。
确保PHP日志logging已打开:
-
find您的php.ini文件:
el@apollo:~$ locate php.ini /etc/php5/apache2/php.ini
-
以root身份编辑该文件:
sudo vi /etc/php5/apache2/php.ini
-
在php.ini中find这一行:
display_errors = Off
-
将上面的行更改为:
display_errors = On
-
在文件中放下你会看到这个:
;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
-
分号是注释,表示行不生效。 改变这些线,看起来像这样:
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通信的是我们要logging所有这些错误。 警告,会有很大的性能下降,所以你不希望在生产上启用这个function,因为logging需要工作,而且工作需要时间,而且花费时间。
-
重新启动PHP和Apache应该应用更改。
-
做你做了什么导致500内部服务器错误再次,并检查日志:
vi /var/log/apache2/error.log
-
最后你会看到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/FuckedUpController.php on line 249, referer: https://nuclearreactor.com/abouttoblowup
我刚刚遇到这个,这是由于我的.htaccess文件中的mod_authnz_ldapconfiguration错误。 绝对没有logging,但我不断收到500错误。
检查你的PHP错误日志这可能是一个单独的文件从你的Apache错误日志。
通过去phpinfo()
find它并检查error_log属性。 如果没有设置。 设置它: https : //stackoverflow.com/a/12835262/445131
也许您的post_max_size对于您要发布的内容太小,或者其他最大内存设置之一太低。
如果您的内部服务器错误信息未显示在日志文件中,则可能需要重新启动Apache服务 。
我发现Apache 2.4(至less在Windows平台上)往往顽固地拒绝刷新日志文件 – 相反,logging的数据在内存中保留了一段时间。 从性能的angular度来看,这是一个好主意,但是在开发时可能会造成混乱。
检查您正在运行的PHP版本是否与您的代码库匹配。 例如,您的本地环境可能正在运行php 5.4(而且运行正常),也许您正在安装php 5.3的新机器上testing您的代码。 如果你正在使用5.4的语法,如array(),那么你将会得到你上面描述的情况。
尝试访问一个静态文件。 如果这不起作用,那么从根目录“/”或“c:\”到你的文件目录,并检查它们是否包含“.htaccess”文件。
我曾经在“c:\”中留下了一个文件,结果是最奇怪的。