6

我即将在 nginx Web 服务器上部署一个 Django 应用程序,并希望确保我正确构建了系统。

如果您在 apache 服务器上部署 Django,那么您仍然应该在应用程序前面放置一个 nginx 服务器来提供静态文件,这似乎是一种普遍的看法,在这种情况下,nginx 的性能更高。

如果不是 apache 用于 Django 代码,我想使用 nginx + FastCGI 来托管 Django 应用程序,是否有任何理由将第二个 nginx 安装配置为位于提供动态内容的 nginx 服务器前面,以处理静态内容以及重定向到动态内容?

具体来说,静态和动态内容是否会有不同的配置参数,这会让我想要将服务器分开,或者我可以将它们全部托管在单个 nginx 安装中,其中一些 URL 被映射到 django 内容,并且休息被映射到从同一个 nginx 安装服务的静态内容?

谢谢你的建议!

4

4 回答 4

5

大多数配置指令可以存在于位置块中(即,它们不是仅全局的),并且这样做很常见。仅使用 1 个 nginx 实例设置它应该没有问题。

这样做的好处之一是您可以最初以这种方式设置它,然后通过切换位置块以传递到后端服务器来改变主意,而外部世界不可见。

因此,现在继续在一台服务器上执行此操作,知道您可以稍后在需要扩展时放入后端服务器或集群。

于 2009-04-19T15:11:02.220 回答
4

要回答您关于将 nginx 服务器放在另一个 nginx 前面的问题:不,通常没有充分的理由这样做。这个旧建议来自 Apache,尤其是当 mod_python 与 Apache prefork MPM 一起使用时。在此设置中,每个 Django 实例都将作为一个单独的进程在 mod_python / Apache 容器内运行,这将使用大量 RAM。这个想法是通过在繁重的 Apache 进程前面放置一个轻量级事件驱动的 HTTP 服务器(如 nginx)来保持静态文件服务远离 Apache。这节省了 RAM 并提高了性能。当对所有请求使用像 nginx 这样的轻量级服务器时,这不是问题。

nginx 对 URL 重写有很好的处理,查看 Rewrite 模块。

您的问题没有说明您期望的负载(连接数/秒),或者您为什么要首先使用 nginx。如果这是用于 VPS 服务器上的博客或类似的低负载设置,那么请考虑在守护程序模式下将 Apache 与 mod_wsgi 一起使用。这具有非常接近 FastCGI 的性能和 RAM 使用率,并且 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 实例的负载均衡器,或者用于静态文件的单独服务器。这两种使用场景都只对大负载有意义。

于 2009-04-22T21:22:44.437 回答
2

我会说代理 django 到它自己的服务器只有在你使用 mod_python 滚动时才真正出现,即:使用 nginx 提供静态服务并将 django 代理到运行 mod_python 的 apache 实例。我很高兴通过 fastcgi 在 lighttpd 中运行 django,同样的 lighttpd 也提供静态内容。

于 2009-04-19T23:11:51.410 回答
0

我确信可以使用一台 nginx 服务器在一个配置文件中配置所有动态和静态内容

于 2009-04-18T23:11:18.283 回答