1

我最近才开始使用基于 Python WSGI 的框架(Pyramid 和 Flask)。从那以后我一直在使用 Apache,但最近我对 node.js 和 Nginx 等基于异步非阻塞事件的技术大肆宣传。

所以我决定,当我的应用程序投入生产时,它会在 Nginx 上的虚拟云服务器中运行,它会超级、超级快……但比我想象的要快……等一下……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 都不会成为我的应用程序的瓶颈。

谢谢

4

3 回答 3

1

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

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

我最终使用了 Apache + mod_wsgi,它更容易安装并且可以正常工作。忘记使用 nginx + wsgi 恕我直言。

于 2013-11-15T01:25:07.613 回答
0

您应该考虑同时设置它们并运行一些基准测试,看看哪个最适合您的应用程序。

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

于 2013-02-07T04:01:18.623 回答
0

您没有说您打算如何使用 nginx 运行 WSGI 应用程序。如果您正在查看 ngx_wsgi_module 则不要,因为它会由于在 nginx 进程内部运行而引入阻塞问题。看:

如果您正在谈论更多地使用 nginx 作为代理,通过 WSGI 应用程序作为 FASTCGI、SCGI、uWSGI 或什至在 gunicorn 作为后端运行,那么您很好,尽管 nginx 会在等待特定请求时阻塞WSGI 应用程序,由于其异步设计,它在代理时具有很高的并发请求处理能力。

于 2013-02-07T02:18:15.450 回答