使用 fastcgi 上传大文件时出现 500 错误

使用 fastcgi 上传大文件时出现 500 错误

我正在使用以下设置:

  • CentOS 5.9
  • Apache 与 Nginx 代理静态资源
  • PHP 5.4
  • 快进快退

上传较小的文件时,一切都正常。但是,如果我尝试上传较大的文件(我尚未确定截止点),我会收到 500 个错误。

我的 apache 日志设置为 E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

当这种情况第一次发生时,我检查了日志并发现 POST 的长度比 fcgi 配置中的 MaxRequestLen 长。

我立即在 cPanel 中更改了 php.conf 文件和 post_virtualHost 包含文件。这阻止了错误消息被记录,但我仍然收到 500 错误,令人困惑的是,没有记录任何与此相关的错误。

从客户端的角度来看,文件似乎上传得很好,而且花费了应有的很长时间(html5文件api始终正确报告进度),在之后的漫长的脚本执行过程中,服务器收到完整文件后会产生500错误。

该文件本身是一个大型文本文件,其中包含多个 base64 图像,然后在服务器端将其拆开,使用 ImageMajick(通过 IMajik php 扩展)将其转换为实际图像文件,然后将其复制到几个不同大小的版本,并对其应用不同级别的过滤/压缩。整个过程可能需要相当长的时间。这可能是问题的一部分吗?如果是这样,我该如何解决它?

我的 fcgi 配置当前如下:

MaxRequestsPerProcess 1000
FcgidMaxProcesses 200
FcgidProcessLifeTime 7200
MaxProcessCount 500
FcgidIOTimeout 400
FcgidIdleTimeout 600
FcgidIdleScanInterval 90
FcgidBusyTimeout 300
FcgidBusyScanInterval 80
ErrorScanInterval 3
ZombieScanInterval 3
DefaultMinClassProcessCount 0
DefaultMaxClassProcessCount 3
FcgidMaxRequestLen  1073741824

我尝试用旧的 MaxRequestLen 替换 FcgidMaxRequestLen,但仍然没有成功。

任何帮助将不胜感激。

答案1

您的脚本是否有可能超时?FcgidBusyTimeout是 5 分钟 —— 当多个脚本同时运行时,这也许不够。

为什么使用 fcgi 而不是 mod_php?如果您将其用作ngix反向代理并提供静态内容,那么 fcgi 只是另一层复杂性:ngix+apache 很好,apache+fcgi 很好,ngix+fcgi 很好,ngix+apache+fcgi 没有意义。

相关内容