在Django docs for setting up mod_wsgi中,教程注意到:
Django本身不提供文件;它将这项工作留给了任何一个网站 你选择的服务器。
我们建议使用单独的Web服务器 - 即,也不是 运行Django - 用于服务媒体。以下是一些不错的选择:
- Nginx
- Apache的精简版
据我所知,这可能是由于Apache产生了新的进程来为每个静态文件提供服务时所浪费的资源,而Nginx避免了这种情况。但是,Apache的(新的?)事件MPM似乎与Nginx实例类似,将请求交给Apache工作人员mpm。因此,我想问:不是将Nginx设置为Apache的反向代理,而是使用Apache Event MPM就足以在Apache中提供静态文件吗?
答案 0 :(得分:3)
Apache没有为每个静态文件生成新进程。 Apache保持持久化进程以处理并发和后续请求,就像nginx一样。不同之处在于nginx使用完整的异步模型,而Apache依赖于进程和/或线程来实现并发,尽管事件MPM使用异步模型来接受初始请求并保持活动连接。对于大多数人来说,单独的Apache仍然是一个超过可接受的解决方案。因此,如果您刚刚开始并认为从一开始就需要Google / Facebook规模的解决方案,那么就不要超越自己。
比单独的Web服务器更重要的是,如果使用Apache / mod_wsgi,则以不同的主机名提供静态文件。这样就可以避免为所有静态文件请求发送重量级的cookie信息。您可以使用Apache中的虚拟主机执行此操作。还要确保使用mod_wsgi的守护进程模式来运行Django应用程序,因为这是一个更好的体系结构,并提供了更多选项来设置超时,因此您可以让应用程序从各种情况中恢复,否则可能导致服务器在过载时锁定。
对于提供更好的开箱即用配置和体验的系统而不是直接使用Apache / mod_wsgi并自行配置,请查看使用mod_wsgi-express
。
答案 1 :(得分:0)
关于分离网络服务器的建议有两个好处。格雷厄姆清楚地概述了一个。另一个是可预测的资源消耗"。
每个HTML页面的资源数量不同。留下一个Web服务器来为应用程序提供服务,而另一个Web服务器提供静态资源,这样做的好处就是您可以确切地知道可以提供多少并发访问者:Apache的MaxClients
设置。
如果这减慢了图像的加载速度,那些网络服务器只需要很少的模块,并且没有可测量的CPU功率,因此只需一台带有SSD磁盘的核心机器,并且扩展成本低廉。
正如Graham所说,它以具有不同主机名的STATIC_URL
开头。在开始时在同一台服务器上运行它。向上扩展时,将该主机名绑定到由多个映像服务器后端计算机提供服务的反向代理。