我打算使用单个VPS将多个低stream量CherryPy应用程序部署为子目录; 例如: example.com/app1
等
在研究WSGI部署之后,看起来部署应用程序的首选方法是在反向代理设置中使用WSGI服务器(Gunicorn,uWSGI等)和NGinx。 看起来使用两个networking服务器似乎有点过分 – 尤其是因为我的CherryPy应用程序本身就是一个networking服务器 – 但我不想随意地将这个想法解雇。 我当然不是专家,所以我想讨论一下。
我看到三个选项:
我的问题:
任何和所有的build议表示赞赏,谢谢。
每个人把nginx(或Apache等其他服务器)放在应用服务器前面的原因是每个人都有静态的内容,比如图片,CSS和JavaScript,以及对他们的应用来说是独特的奇怪的要求。
您的应用程序服务器(CherryPy,gunicorn,无论)都经过优化,可以运行您的应用程序并提供其输出。 虽然应用程序服务器也可以提供静态内容,但是它们几乎从来没有很好地完成这个任务,因为它是应用程序服务器的主要目的的次要。 (一些应用程序服务器也可以通过缩小和压缩CSS和JS来帮助,这样前面的Web服务器可以更快地提供这些资源。)
另外,实际的networking服务器可以做比高性能内容服务更多的function。 像caching,标题操作,URL重写,地理位置和许多其他function,只是将应用程序服务器膨胀到没有好的目的。
通常情况下,只有在开发应用程序时,只有当您是唯一的用户时,才能单独运行应用程序服务器,而性能不是问题。 即使你的网站stream量很低,你也希望它更快,对吧? 低stream量的网站,一般不会成长为高stream量的网站…
zlib
只是C库的一个包装。 但是因为Nginx有效地处理连接,所以释放你的CherryPy工作线程在生产环境中提供静态内容是一个好主意,而且只能用于dynamic内容。 据其中一位原作者说, 是的 。 大多数与CherryPy有关的networking相关的东西都可以自己做。
CherryPy有一个应用程序的概念,你可以用一个CherryPy实例来提供多个应用程序 。 CherryPy也可以服务于其他WSGI应用程序 。
在传统的* nix风格的部署中,您可以编写初始化脚本,进行守护进程,放弃其特权,编写PID等。当您有几个CherryPy实例时,这并不重要。 当你有几十个时,它变得单调乏味,将stream程pipe理移交给Gunicorn或uWGSI并将你的CherryPy实例从HTTP切换到WSGI是有意义的。
我写了一个教程/项目框架, cherrypy-webapp-skeleton ,目标是填补在Debian上为networking开发人员部署(传统)实际CherryPy应用程序的空白。
CherryPy * 1 ⇐ HTTP ⇒ Client
。 CherryPy * n ⇐ HTTP ⇒ Nginx ⇐ HTTP ⇒ Client
。 CherryPy * n ⇐ WSGI ⇒ Gunicorn ⇐ HTTP ⇒ Nginx ⇐ HTTP ⇒ Client
。