Phusion Passenger 永远无法上传 Django 文件

Django file upload took forever with Phusion Passenger

我有一个使用 Passenger 部署的 Django 应用程序(我没有选择 mod_wsgi 因为 mod_passenger 已经存在并且正在使用)。当我上传一个 MP3 文件 (900 kB) 时,Google Chrome 显示上传百分比,很快就达到了 100%,但结果页面却花了很长时间。数据库(包含文件的元数据)未显示任何已上传的内容。

Django 逻辑应该没问题,因为开发机器(内置 Python 服务器)一切正常

我的配置:Django 1.8,Apache 2.4,Ubuntu14.04

这里是客作者。尝试将 passenger_log_level 设置为更高的值,这可能会让您深入了解发生这种情况的原因。

我不知道你用的是哪个Passenger版本,但是在版本5中,Passenger请求处理周期是这样的:

  1. Apache 收到请求。 headers 完成后,它将请求转发到 Passenger 服务器进程,同时将请求 body 流式传输到 Passenger 服务器进程。
  2. Passenger 服务器进程缓冲整个请求,包括 body。此缓冲发生在立即取消链接的临时文件中。
  3. 缓冲完成后,Passenger 服务器进程将请求(包括 body)转发给 Django 应用程序。然后乘客等待应用生成响应。
  4. Passenger 服务器进程将响应从 Django 应用流式传输到 Apache。这里没有阻塞缓冲。
  5. Apache 将 Passenger 服务器进程的响应流式传输到客户端。这里没有缓冲。

如果日志级别足够高,您可以看到每个步骤花费了多少时间,以便查明罪魁祸首。

请注意,请求处理周期在早期版本的 Passenger 中有所不同。我的建议仅适用于版本 5。