我的 Apache 错误日志偶尔会显示“脚本标头提前结束”错误,并且似乎我的网站在发生这种情况时会向浏览器返回 500 内部服务器错误。奇怪的是,这种情况会发生几分钟,然后一切都会恢复正常。
答案1
这Apache 维基有一个很好的章节介绍了此错误,其中列出了最常见的原因:脚本无法正确输出 HTTP 标头。听起来好像脚本偶尔会在输出和刷新标头之前崩溃或超时,这在您看来是“脚本标头过早结束”/500 错误。
如果可能的话,尝试在本地测试脚本以确保它在所有条件下都能正确输出标题。
答案2
如果您通常使用 mod_fcgid 或 fastcgi,则 apache 配置为每个 fastcgi 进程使用的子进程数和/或请求数与 php-cgi 使用的子进程数和/或请求数可能不匹配。您是否在 apache 的配置文件中设置了 fastcgi 环境变量,或者您是否使用包装器脚本来设置 PHP_FCGI_CHILDREN (必须可以使用 fcgid 和 PHP_FCGI_MAX_REQUESTS 禁用吗?
如果 apache 的配置和 PHP 的环境变量设置不匹配,那么如果 PHP 在 apache 决定之前决定它已经达到 MAX_REQUESTS,则 PHP 将退出,但 apache 仍会认为它正在接受请求。
您可以阅读有关此内容的更多信息以及示例包装器脚本和正确的 fcgid 配置这里。