部署WSGI应用程序 - Apache和/或Nginx

时间:2013-02-06 15:02:11

标签: apache nginx wsgi

我刚刚开始使用基于Python WSGI的框架(Pyramid和Flask)。 我一直在使用Apache,但最近我对基于异步非阻塞事件的技术如node.js和Nginx进行了大量宣传。

所以我已经决定,当我的应用程序投入生产时,它将在Nginx上的虚拟云服务器上运行,并且它会变得超级,快速......但是比我想象的还要......等一下。 ..wsgi应用程序是一个BLOCKING应用程序的设计。所以wsgi应用程序实际上不会在Nginx上比Apache更糟糕,因为它会阻止进程并立即堵塞服务器吗?可能Apache比我的多线程应用程序要好得多。

无论如何,现在我想弄清楚我将在生产中使用什么,所以我可以用这种方式进行准备和优化。我在这个领域几乎是一个新手,所以我有一些想法,但我不知道采取什么路线。

1.) Have nginx serve my wsgi app, but create some kind of load balancer that sends requests to various nginx instances, as running single process would probably fail miserably as my python app would be blocking it. So I would have 4-8 nginx's running.
2.) Have apache serve everything, wsgi+static
3.) Have apache serve the app via mod_wsgi, and nginx serve static files
4.) Any other solutions?

我正在寻找性能,资源使用,可靠性和便利性之间的最佳平衡。如果配置正确,我不相信nginx或apache会成为我的应用程序的瓶颈。

由于

3 个答案:

答案 0 :(得分:1)

我还没有找到一种直接部署nginx + wsgi的方法。每个人都说使用Gunicorn并且有一些程序可以找到。但是我只能找到一个程序来说明如何在启动时启动Gunicorn并作为后台进程运行并且它很复杂。需要安装主管并创建自定义脚本以按照建议运行Gunicorn,作为套接字而不是守护进程。其他一切只是展示了如何从命令行运行Gunicorn,除了开发之外什么都没用。

考虑到每个人都在推荐Gunicorn,我感到非常惊讶,但是没有直接的方法来启动启动并在后台运行。

我最终使用的是Apache + mod_wsgi,它更容易安装并且正常工作。忘记使用nginx + wsgi imho。

答案 1 :(得分:0)

您没有说明如何使用nginx运行WSGI应用程序。如果你正在查看ngx_wsgi_module然后不这样做,因为它会引入由于在nginx进程内部运行而导致的阻塞问题。参见:

如果您正在讨论将nginx作为代理使用作为FASTCGI,SCGI,使用uWSGI运行的WSGI应用程序,甚至使用gunicorn作为后端,那么您就可以了,因为尽管nginx将阻止特定请求在等待WSGI应用程序时,由于其异步设计,它在代理时具有处理并发请求的高容量。

答案 2 :(得分:0)

你应该考虑设置它们并运行一些基准测试,看看哪种算法最适合你的应用程序。

Apache或Nginx都可能是有益的,具体取决于您的资源需求以及应用程序处理连接的方式。