如何诊断在Apache

时间:2016-08-20 14:46:45

标签: php apache file-upload silverstripe

从SO或SilverStripe论坛上的问题来看,我面临一个非常普遍的情况:文件上传失败。

然而,我的情况似乎源于我尚未在网上遇到的一个问题;从阅读其他问题和许多博客文章或论坛帖子,我已经排除了:

  • 权限问题
  • PHP配置中的
  • upload_max_filesizepost_max_size(都设置为8M)
  • Apache配置中的
  • LimitRequestBody(默认值为0,表示“无限制”)

我已经将这些排除在外有很多原因,但是这张图片显示了上传有时正在进行的三个连续上传的示例:

Screenshot of the file upload page in SilverStripe

我在SilverStripe论坛上也有started a thread来解决这个问题,但我没有希望能在那里解决问题。

我在UploadUploadFieldFile类中设置了断点,并在几小时内完成了代码,但没有成功找出错误原因。

到目前为止,我的发现是128 kiB以上的任何文件都会导致内部服务器错误。低于此大小阈值的任何文件都会按预期上传。

发生此错误时,所有日志(Apache,PHP,SilverStripe)都是完全静音的。

许可问题似乎不太可能,因为:

  • PHP以快速CGI模式运行,作为ISPConfig创建的用户(web1
  • Apache以用户apache:apache
  • 运行
  • 我已将apache添加到用户组,以便groups web1为我提供web1 : client1 sshusersgroups apache为我提供apache : apache ispapps ispconfig client1
  • 上传文件夹(assets)归web1:client1所有并拥有权限775
  • 临时上传文件夹(upload_tmp_dir)归web1:client1所有,权限为775。

我相信我所看到的是以某种方式获取有关上传失败的位置和原因的信息。是否可以将Apache的loglevel设置为“debug”或“trace”?

注意:“类似问题”中的条目导致我this answer,其中提示SSLRenegBufferSize默认为128 kiB。不幸的是,无论协议是HTTPS还是HTTP都没有影响:问题就出现了。

[编辑]我后来将LogLevel指令设置为trace,但我在服务器日志中仍然没有关于此错误的消息。

1 个答案:

答案 0 :(得分:0)

快速谷歌搜索带我到以下文章:

建议检查FcgidMaxRequestLen设定值。

这并没有回答如何正确调试,但有助于解决原始问题。