我最近刚刚开始使用基于Python WSGI的框架(金字塔和Flask)。我一直在使用Apache,但最近我对node.js和Nginx等基于事件的异步非阻塞技术大肆宣传。
所以我决定,当我的应用程序投入生产时,它将在Nginx上的虚拟云服务器上运行,它将是超级的,比我thought...wait的second...wsgi应用程序在设计上是一个阻塞应用程序。那么,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会成为我的应用程序的瓶颈。
谢谢
发布于 2013-11-15 09:25:08
我还没有找到部署nginx + wsgi的简单方法。每个人都说使用Gunicorn,有一些程序可以找到。然而,我只能找到一个过程,它展示了如何在引导时启动Gunicorn并作为后台进程运行,而且它很复杂。需要安装supervisor并创建自定义脚本才能按照建议运行Gunicorn,Gunicorn作为套接字而不是守护程序运行。其他的一切都只是展示了如何从命令行运行Gunicorn,这对开发之外的任何事情都是无用的。
考虑到每个人都在推荐Gunicorn,我很惊讶,但却没有直接的方法来设置启动时启动并在后台运行。
我最终使用的是Apache + mod_wsgi,它更容易安装,而且还能正常工作。忘记使用nginx + wsgi imho。
发布于 2013-02-07 10:18:15
您没有说您打算如何使用nginx运行WSGI应用程序。如果你正在查看ngx_wsgi_module,那就不要这样做,因为它会引入阻塞问题,因为它会在nginx进程中运行。请参见:
如果您正在讨论使用nginx更多地作为代理通过运行为FASTCGI,SCGI,与uWSGI,甚至在gunicorn下作为后端运行的WSGI应用程序,那么您就很好了,因为尽管在等待WSGI应用程序时,nginx会阻塞特定的请求,但由于其异步设计,它在代理时具有处理并发请求的高容量。
发布于 2013-02-07 12:01:19
您应该考虑将它们都设置好,并运行一些基准测试,看看哪一个在您的应用程序中运行得最好。
Apache或Nginx都可能是有益的,这取决于您的资源需求和应用程序处理连接的方式。
https://stackoverflow.com/questions/14732105
复制相似问题