如何使用CherrPy作为Web服务器和Bottle作为应用程序来支持多个虚拟主机?

时间:2014-01-14 15:14:00

标签: python virtualhost cherrypy bottle

我有一个运行Python Bottle应用程序的网站(在Amazon EC2 Instance中运行),其中CherryPy作为其前端Web服务器。

现在我需要添加另一个已经注册了不同域名的网站。为了降低成本,我想利用现有的网站主机来做到这一点。

显然,虚拟主机是解决方案。

我知道Apache mod_wsgi可以发挥作用。但我不想取代CherryPy。

我已经搜索了很多内容,有一些文章展示了如何在CherryPy上制作虚拟主机,但他们都假设Cherrypy是Web Sever + Web应用程序,而不是CherrPy作为Web服务器和Bottle作为应用程序。

如何使用CherrPy作为Web服务器和Bottle作为应用程序来支持多个虚拟主机?

4 个答案:

答案 0 :(得分:1)

正如您所提到的,请使用VirtualHost。在示例中使用cherrypy.Application实例,但任何WSGI可调用(例如Bottle应用程序)都可以。

答案 1 :(得分:0)

也许您可以简单地将nginx作为反向代理并将其配置为将流量发送到右上游的两个域(cherryPy webserver)。

答案 2 :(得分:0)

另一个想法是使用Nginx(http://wiki.nginx.org/Main)和uWsgi(http://projects.unbit.it/uwsgi/)& (uWsgi-python)插件

uWsgi有一个名为emperor的模块,你可以链接vhosts(vassals),等等。

我自己就是这个新手,所以不一定是答案,而是建议检查出来。 根据您的Linux发行版,uWsgi和Nginx可能很难让它运行起来。与瓶子配合使用,自己测试。 希望它有所帮助

答案 3 :(得分:0)

jwalker的回答非常清楚。如果任何CherryPy新手需要整个脚本供参考,我在下面发布一个。

import cherrypy
from bottle import Bottle
import os


app1 = Bottle() 
app2 = Bottle()

@app1.route('/')
def homePage():    
    return "=========  home1 ==============="


@app2.route('/')
def homePage_2():    
    return "=========  home2 ==============="

vhost = cherrypy._cpwsgi.VirtualHost(None, 
                                     domains={
                                              'www.domain1.com': app1, 
                                              'www.domain2.com': app2,
                                             }
                                     )

cherrypy.tree.graft(vhost) 

cherrypy.config.update({
                        'server.socket_host': '192.168.1.4',
                        'server.socket_port': 80,
                      })
cherrypy.engine.start()
cherrypy.engine.block()

您可以将www.domain1.com和www.domain1.com指向您服务器的一个IP地址,因此它在一个Web服务器中为2个域提供服务。