2017-07-01 229 views
2

在Django的docs for setting up mod_wsgi,本教程说明:设置的Nginx作为阿帕奇VS反向代理只是阿帕奇事件MPM

Django不提供文件服务本身;它会将该作业留给您选择的任何一台Web 服务器。

我们建议使用单独的Web服务器 - 即运行Django的另一个Web服务器 - 也就是 - 用于服务媒体。这里有一些不错的选择:

  • Nginx的
  • 阿帕奇的简装版

我理解这可能是由于资源浪费,当Apache生成新的进程,以服务于每个静态文件,这是Nginx避免的。然而,Apache的(newish?)Event MPM似乎类似于将请求交给Apache worker mpm的Nginx实例。因此,我想问问:不是将Nginx设置为Apache的反向代理,而是使用Apache Event MPM足以在Apache中提供静态文件?

回答

3

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

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

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

+0

你可以点我的资源在那里我可以学到你通过“服务在不同的主机名的静态文件”是什么意思? –

+1

请参阅''STATIC_URL''设置。然后使用单独的主机名将虚拟主机或独立Web服务器设置为Apache。请参阅https://docs.djangoproject.com/en/1.11/ref/settings/#static-files和https://docs.djangoproject.com/en/1.11/howto/static-files/deployment/ –

0

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

每个HTML页面的资源数量不同。离开一个Web服务器为应用程序提供服务,另一个服务器为静态资源提供服务,其优点是您确切知道可以为多少个并发访问者服务:Apache的MaxClients设置。

如果这会减慢图像的加载,这些Web服务器需要很少的模块和CPU的功率没有可测量的量这么一个核心机SSD硬盘是所有你需要和缩放便宜。

格雷厄姆表示其与STATIC_URL具有不同的主机名开始。在一开始就在同一台服务器上运行它。扩展时,将该主机名绑定到从多个图像服务器后端机器提供服务的反向代理。