500 服务器错误: 脚本标头过早结束:

2022-08-30 18:34:49

我有一个php网站,它基于CodeIgniter与solr索引服务器一起使用。

我们得到了很多新内容,所以我们刷新了数据库,并且不得不对内容重新编制索引(大约168,000个元素)。我创建了一个脚本来按 500 个切片对内容进行索引 - 当脚本完成时,我们启动下一个索引。

它在我的本地测试环境中完美运行,但在生产环境中,我得到这个500错误:

[Thu Dec 02 ...] [error] [client IP] Premature end of script headers: index.php

我的php.log中绝对没有任何东西,只有返回它的apache error_log。我已经看到它在网站的其他页面上发生过一两次,但它是在索引期间发生的。

有什么想法吗?


答案 1

此错误通常(有时)由 FcgidIOTimeout 指令(旧名称:)的 FastCGI 设置引起。IPCCommTimeout

这是 IO 超时的秒数,默认值为 40 秒。超时意味着

“FastCGI应用程序必须在这段时间内开始产生响应。根据需要增加此指令,以处理需要相对较长时间才能响应的应用程序。

您可以尝试解决此问题,将其放入vhost.conf中:

<IfModule mod_fcgid.c>
  # 5 minutes for IO timeout, default is 40 seconds
  FcgidIOTimeout 300
</IfModule>

您可以根据需要增加它,然后在重新编制索引过程完成后还原原始值。


答案 2

关于Liquid Web的KB上的可能性有一个很好的列表;

  1. 升级或降级到不同版本的PHP可能会在httpd.conf中留下剩余的选项。在命令行上使用php -v检查当前版本的PHP,并在httpd.conf中搜索提及另一个版本的任何行。如果你找到它们,把它们注释掉,提炼httpd.conf,然后重新启动apache。

  2. 如果脚本由于资源限制而被终止,则 httpd.conf 中的 RLimitCPU 和 RLimitMEM 指令也可能导致错误。

  3. suEXEC、mod_perl或其他第三方模块中的配置问题通常会干扰脚本的执行并导致错误。如果这些是原因,将在apache error_log中找到与细节相关的其他信息。

  4. 如果 suphp 的日志大小达到 2GB 或更大,您可能会看到脚本标头错误过早结束。查看日志包含的内容,然后将其 gzip 或 null。重新启动apache,然后处理suphp日志曝光的任何问题。suphp 日志位于:/usr/local/apache/logs/suphp_log

  5. 脚本的权限也可能导致此错误。CGI 脚本只能访问 httpd.conf 中指定的用户和组所允许的资源。在这种情况下,错误可能只是指出未经授权的用户正在尝试访问脚本。

http://www.liquidweb.com/kb/apache-error-premature-end-of-script-headers/

如果我遇到同样的情况,我会先检查权限,然后继续使用3和4。


推荐