Django 将Nginx设置为Apache的反向代理而不是Apache事件MPM

Django 将Nginx设置为Apache的反向代理而不是Apache事件MPM,django,apache,nginx,mod-wsgi,Django,Apache,Nginx,Mod Wsgi,在Django中,教程指出: Django本身不提供文件服务;它把这项工作留给了任何一个网络 您选择的服务器 我们建议使用一个单独的Web服务器,也就是说,它不是 运行Django–用于服务媒体。以下是一些不错的选择: Nginx Apache的精简版 我理解这可能是由于Apache生成新进程来服务每个静态文件时浪费了资源,而Nginx避免了这一点。然而,Apache的(newish?)事件MPM的行为似乎类似于Nginx实例将请求传递给Apache worker MPM。因此,我想问:与其

在Django中,教程指出:

Django本身不提供文件服务;它把这项工作留给了任何一个网络 您选择的服务器

我们建议使用一个单独的Web服务器,也就是说,它不是 运行Django–用于服务媒体。以下是一些不错的选择:

  • Nginx
  • Apache的精简版

我理解这可能是由于Apache生成新进程来服务每个静态文件时浪费了资源,而Nginx避免了这一点。然而,Apache的(newish?)事件MPM的行为似乎类似于Nginx实例将请求传递给Apache worker MPM。因此,我想问:与其将Nginx设置为Apache的反向代理,使用Apache事件MPM是否足以为Apache中的静态文件提供服务?

Apache不会为每个静态文件生成新的进程。Apache保持持久化进程来处理并发和后续请求,就像nginx一样。区别在于nginx使用完全异步模型,而Apache依赖于进程和/或线程来实现并发,尽管event-MPM使用异步模型来实现初始请求接受和保持活动连接。对于大多数人来说,Apache本身仍然是一个可以接受的解决方案。因此,如果你刚刚起步,并且从一开始就认为需要一个Google/Facebook规模的解决方案,那么不要超越自己

比单独的web服务器更重要的是,如果使用Apache/mod_wsgi,则以不同的主机名提供静态文件。这样可以避免为所有静态文件请求发送重量级cookie信息。您可以使用Apache中的虚拟主机来实现这一点。还要确保您使用mod_wsgi的守护程序模式来运行Django应用程序,因为这是一个更好的体系结构,并提供了更多设置超时的选项,因此您可以让您的应用程序从各种情况中恢复,否则可能会导致服务器在过载时锁定

对于提供比直接使用Apache/mod_wsgi并自己配置更好的开箱即用配置和体验的系统,请查看使用
mod_wsgi-express


关于分离Web服务器的建议有两个优点。格雷厄姆清楚地勾勒出了这一点。另一个是“可预测的资源消耗”

每个HTML页面的资源数量不同。让一个Web服务器为应用程序提供服务,另一个为静态资源提供服务,这样做的好处是您可以准确地知道可以为多少并发访问者提供服务:Apache的
MaxClients
设置

如果这降低了映像的加载速度,那么这些Web服务器只需要很少的模块,而且不需要可测量的CPU功率,因此您只需要一台带有SSD磁盘的单核机器,而且扩展成本很低


正如Graham所指出的,它以一个具有不同主机名的
静态URL
开始。开始时在同一台服务器上运行它。放大时,将该主机名绑定到从多台映像服务器后端计算机提供服务的反向代理。

您能给我指一个资源,让我了解“以不同主机名提供静态文件”的含义吗?请参阅
static\u URL
设置。然后使用虚拟主机设置Apache,或者使用单独的主机名设置单独的web服务器。看到和