我即将在一个nginx web服务器上部署Django应用程序,并希望确保我正在正确地构建系统。 似乎普遍认为,如果您在apache服务器上部署Django,则仍应在应用程序前面放置一个nginx服务器来提供静态文件,其中nginx的性能更高。 如果我想使用nginx + FastCGI来托管Django应用程序而不是apache,则是否有理由配置第二个nginx安装程序以坐在服务动态内容的nginx服务器前面,处理静态内容以及重定向到动态内容? 具体而言,静态和动态内容是否有不同的配置参数,使我想要保持服务器分开,还是可以在单个nginx安装中托管所有内容,并将某些URL映射到Django内容,其余内容映射到从同一nginx安装中提供的静态内容? 感谢您的建议!
大多数配置指令可以在location块中使用(即它们不仅限于全局),在实践中这是非常常见的。您只需使用一个nginx实例即可轻松设置此项。 其中一个伟大之处在于,您可以最初以这种方式设置它,然后稍后更改主机块以通过到后端服务器,而所有这些对外界都是不可见的。 因此,现在在一个服务器上进行设置,知道您可以随时添加后端服务器或集群以满足扩展需要。
回答你关于在另一个nginx前面放置nginx的问题:通常情况下没有好的理由这样做。这个老建议来自于Apache,特别是当mod_python与Apache prefork MPM一起使用时。在这种设置中,每个Django实例将作为单独的进程运行,在mod_python / Apache容器内部,这将使用大量RAM。想法是通过在重的Apache进程前面放置像nginx这样的轻量级事件驱动HTTP服务器,将静态文件服务远离Apache。这节省了RAM并提高了性能。当使用像nginx这样的轻量级服务器处理所有请求时,这不是一个问题。 nginx具有良好的URL重写处理功能,请查看Rewrite模块。 您的问题没有说明您期望的负载(连接/秒)或为什么要首先使用nginx。如果这是用于VPS服务器上的博客或类似的低负载设置,则请查看使用守护程序模式下的带有mod_wsgi的Apache。这具有与FastCGI非常接近的性能和RAM使用情况,并且mod_wsgi最近成为托管Django的官方推荐方式,请参见http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/。 一般而言,如果可能的话,我建议使用Apache / mod_wsgi,这是一个稳定和灵活的组合。请确保您不是通过使用nginx来过早地优化,而在使用Apache + mod_wsgi时可以很好地完成任务。有关mod_wsgi守护程序模式性能概述,请参见: http://code.google.com/p/modwsgi/wiki/PerformanceEstimates nginx非常棒,但对于Django解决方案而言,nginx在我看来更适合作为许多Apache实例的负载均衡器,或者作为静态文件的单独服务器。这些用法场景只有在负载较大时才有意义。
我认为只有在使用mod_python时,将django代理到自己的服务器才真正有意义。例如:使用nginx提供静态服务,并将django代理到运行mod_python的apache实例中。我很高兴地通过fastcgi在lighttpd中运行django,并且同样的lighttpd也提供静态内容服务。