在 Django 管理员上上传大于 1 MB 的文件时,会出现 400 Bad Request 响应

在 Django 管理员上上传大于 1 MB 的文件时,会出现 400 Bad Request 响应

我有一个小型的 Django (1.2.x) 项目,通过 mod_wsgi (3.x) 部署在 Apache (2.x) 上。在管理员中,如果我上传一个小于 1MB 的文件,我可以通过;但是,对于一个文件,比如说 1.2MB 大小,我会从服务器收到 400 响应,其中“错误 400“仅在正文中。我想知道为什么会发生这种情况。据我所知,LimitRequestBodyApache 配置中没有设置。我尝试使用多种浏览器上传,包括:Firefox、Chrome 和 Safari。

在 Apache 的日志文件中,似乎没有给出 400 错误响应的请求条目。这很奇怪。

我应该指出的是,发生这种情况的场景是这样的:该项目部署在两个相同的 Apache 服务器(完全相同的设置)上,它们位于负载均衡器。当然,在我的开发设置中,这个问题不会出现。

任何帮助都将不胜感激。

更新:我发现负载均衡器记录了以下错误消息:Bad request headers : Content-length exceeds post body limit。另一个有趣的事情是,如果文件大于 1 MB 是通过 HTTPS 上传的,则上传成功。但是,如果文件通过 HTTP 上传,则会出现 400 错误。

更新 #2:我决定使用 Python 和 web.py 编写一个简单的文件上传程序。我将其部署在相同虚拟主机配置下的生产服务器上,在 下mod_wsgi。当应用程序通过 SSL 提供服务时,文件上传可以正常工作。但是当它们通过非 SSL 提供服务时,它们给出了Error 400。所以,我比以前更加困惑了。

答案1

我将亲自回答这个问题,因为问题已经解决了。非常感谢你们红蒙巴格雷厄姆·邓普尔顿征求他们的意见。

问题肯定不是出在 Django 上(我们已经确定了)。然而,事实证明问题并不出在 Apache 上。问题出在系统管理员完全忘记了的防火墙上(叹气)。显然,防火墙对文件大小的限制是 1MB。

相关内容