我即将在nginx Web服务器上部署Django应用程序,并希望确保我正确构建系统。
如果你在一个apache服务器上部署Django,那么你应该仍然在应用程序前放置一个nginx服务器来提供静态文件,nginx的性能更高,这似乎是一种普遍的看法。
如果没有Djacheo代码的apache,我想使用nginx + FastCGI来托管Django应用程序,是否有任何理由配置第二个nginx安装位于服务于动态内容的nginx服务器前面,处理静态内容以及重定向到动态内容?
具体来说,是否会有静态和动态内容的不同配置参数,这些参数会让我想要将服务器分开,或者我可以在单个nginx安装中将它们全部托管,其中一些URL被映射到django内容,其余的映射到从同一个nginx安装服务的静态内容?
感谢您的建议!
答案 0 :(得分:5)
大多数配置指令都可以存在于位置块内(即,它们不仅仅是全局的),这种做法很常见。只使用1个nginx实例就可以轻松设置它。
最重要的一点是,您最初可以通过这种方式进行设置,然后通过切换位置块来传递到后端服务器,而不会让外部世界看到任何内容,从而改变主意。 / p>
因此,现在就在一台服务器上进行操作,因为您知道可以在以后需要扩展时放入后端服务器或集群。
答案 1 :(得分:4)
回答你关于将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。这有性能和RAM使用非常接近FastCGI,mod_wsgi最近成为主持Django的官方推荐方式,请参阅 http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/
一般情况下,我建议尽可能使用Apache / mod_wsgi,它是一个稳定而灵活的组合。通过使用Apache + mod_wsgi可以正常运行的nginx确保你没有“过早地优化”。有关守护进程模式下mod_wsgi的性能概述,请参阅: http://code.google.com/p/modwsgi/wiki/PerformanceEstimates
nginx非常棒,但对于Django解决方案,nginx更适合作为许多Apache实例的负载均衡器,或者用于静态文件的单独服务器。这两种使用场景仅对大型负载有意义。
答案 2 :(得分:2)
我想说,如果你使用mod_python进行滚动,即使用nginx和代理django将静态服务器运行到一个运行mod_python的apache实例,那么代理django到它自己的服务器只会真正进入。我很高兴通过fastcgi在lighttpd中使用相同的lighttpd运行静态内容的django。
答案 3 :(得分:0)
我确信可以使用一个nginx服务器在一个配置文件中配置所有动态和静态内容