内部错误500 Apache,但在日志中没有?

问题描述:

当我尝试将HTTP POST发送到我应用程序中的特定地址时,出现500内部服务器错误。我已经查看了虚拟主机文件中指定的自定义日志目录中的服务器日志,但是该错误没有显示出来,所以调试这一直是一个痛苦的屁股。内部错误500 Apache,但在日志中没有?

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

+0

我有同样的问题使用PHP与虚拟主机....没有错误(Apache2,Ubuntu)。最终失去了PHP模块(mysql,json等) – 2011-08-07 19:57:51

+0

在我们的系统上,它将它们发送到访问日志(可能是因为从Apache的角度来看,它是正常工作的,只是从更深的层面传递它们 - - 在我们的例子中,Passenger/Rails)。只是把这张笔记放在这里,以防有人在挠头。 – 2016-07-08 18:29:55

错误日志通常具有(更多)特定错误。通常会被拒绝权限,甚至无法找到解释器。

这意味着故障几乎总是存在于您的脚本中。例如你上传了一个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的

+5

我检查了服务器ErrorLog,并且没有什么可以在那里找到。 – wcolbert 2011-01-19 06:14:25

+1

你是对的,它证明是PHP脚本的问题。 PEAR库没有安装。我将它安装在我的VPS上,一切正常。谢谢大家! – wcolbert 2011-01-19 08:02:51

+163

如何“请检查日志”是“为什么我的日志为空”的答案? – 2015-08-22 19:20:12

检查,这可能是从Apache的错误日志的单独文件的PHP错误日志。

通过去phpinfo()找到它并检查error_log属性。 如果没有设置。将其设置为:https://*.com/a/12835262/445131

也许您的post_max_size对于您要发布的内容太小,或者其他最大内存设置中的一个太低。

+0

问题是,*“我如何导致Apache将内部500错误记录到错误日志中?”*这可能是一条评论。 – jww 2017-12-22 00:10:17

检查您运行的php版本是否与您的代码库匹配。例如,您的本地环境可能正在运行php 5.4(并且运行正常),也许您正在安装了php 5.3的新计算机上测试您的代码。如果你使用5.4的语法,例如array [),那么你会得到上面描述的情况。

我刚刚遇到了这个,这是由于我的.htaccess文件中的mod_authnz_ldap配置错误。绝对没有记录,但我一直得到500错误。

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

导致500内部服务器错误的错误来自PHP模块。默认情况下,PHP不会记录这些错误。原因是您希望网络请求的速度尽可能快。

这些用于启用内部服务器错误记录的指令是Ubuntu 12.10PHP 5.3.10Apache/2.2.22

确保PHP打开记录:

  1. 找到你的php.ini文件:

    [email protected]:~$ locate php.ini 
    /etc/php5/apache2/php.ini 
    
  2. 编辑该文件作为根:

    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内部服务器错误,并检查日志:

    vi /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/FuckedUpController.php on line 249, referer: 
    https://nuclearreactor.com/abouttoblowup 
    

如果您的内部服务器错误信息未显示在日志文件中,您可能需要resta rt Apache服务

我发现Apache 2.4(至少在Windows平台上)倾向于顽固地拒绝刷新日志文件 - 相反,记录的数据在内存中保留了很长一段时间。从性能的角度来看,这是一个好主意,但在开发时可能会造成混淆。

尝试访问一个静态文件。如果这不起作用,则 转到根目录“/”或“c:\”到您文件目录的所有目录,并检查它们是否包含“.htaccess”文件。

我曾经在“c:\”中留下了一个文件,它有最奇怪的结果。

在我的情况下,它是httpd.conf中的ErrorLog指令。只是在我放弃之后意外注意到它。决定分享发现) 现在我知道在哪里可以找到500错误。