我们热衷于在基于 django 的应用程序中使用 nginx + uwsgi,因为我们想尝试更新的解决方案,并且听说 nginx 比 apache 更节省资源。
在 Quora 上读到一位 Django 的创建者对 apache 的一些看法后:
http://www.quora.com/What-web-server-suits-Django-best
I'm still a big fan of a stripped down Apache+mod_wsgi running behind nginx.
Nginx handles static files, gzip, trickling to slow clients, load balancing and
having a configuration language that's actually pleasant to work with.
Apache just sits there serving up dynamic Python pages via mod_wsgi, using the
shortest possible config.The reason I like Apache for this is I don't need to
babysit the process at all, unlike if I was using FastCGI or running a separate
Python app server.
我不打算为不同目的设置 2 个 Web 服务器,更希望 nginx 单独完成所有工作,而 django 则使用 uwsgi。我有几个问题:
“根本不需要照看整个过程”是什么意思?与 apache+mod_wsgi 相比,nginx+uwsgi 是否需要额外的努力?
据说 Nginx 内置了对 uwsgi 的支持,而没有对 gunicorn 的支持,这是什么意思?
答案1
“照看”部分是关于手动启动 uWSGI/gunicorn 进程(通过诸如 Supervisor、monit 或简单的 rc 脚本之类的工具)。
一年多以前,uWSGI 使用 uWSGI Emperor 解决了这个“问题”,它会以一种非常简单的方式帮你管理实例(只需将配置文件放到目录中)。因此,一个设置需要一个用于 nginx 的启动脚本和一个用于 apache 的启动脚本,而另一个设置需要一个用于 nginx 的启动脚本和一个用于 uWSGI Emperor 的启动脚本(因此我们的比例是 2:2)。
关于 nginx 中的 uwsgi 支持,它与“uwsgi 协议”有关,而不是 uWSGI 应用服务器。它是一种比 http 更简单的传输,因此它可以带来一些性能优势并添加一些特定功能(例如直接传递 WSGI 变量)。您不必使用 uwsgi 协议,您只需以 http 模式启动 uWSGI(如 gunicorn)并正常代理它即可。
话虽如此,请考虑到当前的 uWSGI python 代码库与 mod_wsgi 非常相似(mod_wsgi 作者在修复 uWSGI python 错误方面提供了很多帮助),所以如果您不需要特定的 uWSGI 功能,那么您将不会比真正精简的 apache+mod_wsgi 获得特别的优势。