Ste*_*one 11 python nginx cherrypy gunicorn
我打算使用单个 VPS 将多个低流量 CherryPy 应用程序部署为子目录;如:example.com/app1,example.com/app2等等。
在研究了 WSGI 部署之后,看起来部署应用程序的首选方法是在反向代理设置中使用 WSGI 服务器(Gunicorn、uWSGI 等)和 NGinx。串联使用两个网络服务器似乎有点矫枉过正——尤其是因为我的 CherryPy 应用程序本身就是一个网络服务器——但我不想因为它无处不在而忽视这个想法。我当然不是专家,所以我想讨论一下。
我看到三个选项:
我的问题:
任何和所有的建议表示赞赏,谢谢。
小智 11
zlib只是 C 库的包装器。但是因为 Nginx 可以有效地处理连接,所以最好让您的 CherryPy 工作线程免于在生产中提供静态内容,而只专注于动态内容。据原作者之一说,是的。您可以使用 CherryPy 自己完成大多数与网络相关的事情。
CherryPy 具有应用程序的概念,您可以使用一个 CherryPy 实例为多个应用程序提供服务。CherryPy 还可以为其他WSGI 应用程序提供服务。
在传统的 *nix 风格的部署中,您编写 init 脚本、守护进程、删除其特权、编写其 PID 等。当您有几个 CherryPy 实例时,这没什么大不了的。当你有几十个时,它会变得乏味,将进程管理交给 Gunicorn 或 uWGSI 并将你的 CherryPy 实例从 HTTP 切换到 WSGI 是有意义的。
我编写了一个教程/项目框架,cherrypy-webapp-skeleton,其目标是填补在 Debian 上为 Web 开发人员部署(传统)真实世界 CherryPy 应用程序的空白。
CherryPy * 1 ? HTTP ? Client.CherryPy * n ? HTTP ? Nginx ? HTTP ? Client.CherryPy * n ? WSGI ? Gunicorn ? HTTP ? Nginx ? HTTP ? Client.每个人都将 nginx(或其他服务器,如 Apache)放在他们的应用程序服务器前面的原因是每个人都有静态内容,如图像、CSS 和 JavaScript,以及他们应用程序独有的奇怪需求。
您的应用服务器(CherryPy、gunicorn 等)经过优化,可以运行您的应用并提供其输出。虽然应用服务器也可以提供静态内容,但它们几乎从未针对此任务进行过优化,因为它次于应用服务器的主要目的。(一些应用服务器也会通过缩小和压缩你的 CSS 和 JS 来提供帮助,这样前面的 Web 服务器可以更快地为这些资源提供服务。)
此外,实际的 Web 服务器可以做的不仅仅是高性能的内容服务。诸如缓存、标头操作、URL 重写、地理定位以及许多其他只会使应用程序服务器膨胀而无济于事的功能。
通常,您只会在开发应用程序时单独运行应用程序服务器,当您是唯一的用户并且性能不是问题时。即使您的网站流量较低,您也希望它更快,对吗?缓慢的低流量网站通常不会成长为高流量网站......