Python 如何使用CherrPy作为Web服务器和瓶子作为应用程序来支持多个虚拟主机?
我有一个网站(在AmazonEC2实例中运行)运行Python瓶子应用程序,CherryPy是它的前端web服务器 现在我需要添加另一个网站与不同的域名已经注册。为了降低成本,我想利用现有的网站主机来做到这一点 显然,虚拟主机是解决方案 我知道Apache mod_wsgi可以玩这个把戏。但我不想取代CherryPy 我在谷歌上搜索了很多,有一些文章展示了如何在CherryPy上创建虚拟主机,但它们都假设CherryPy是Web服务器+Web应用程序,而不是CherrPy作为Web服务器和瓶子作为应用程序Python 如何使用CherrPy作为Web服务器和瓶子作为应用程序来支持多个虚拟主机?,python,virtualhost,cherrypy,bottle,Python,Virtualhost,Cherrypy,Bottle,我有一个网站(在AmazonEC2实例中运行)运行Python瓶子应用程序,CherryPy是它的前端web服务器 现在我需要添加另一个网站与不同的域名已经注册。为了降低成本,我想利用现有的网站主机来做到这一点 显然,虚拟主机是解决方案 我知道Apache mod_wsgi可以玩这个把戏。但我不想取代CherryPy 我在谷歌上搜索了很多,有一些文章展示了如何在CherryPy上创建虚拟主机,但它们都假设CherryPy是Web服务器+Web应用程序,而不是CherrPy作为Web服务器和瓶子作
如何使用CherrPy作为Web服务器和瓶子作为应用程序来支持多个虚拟主机?也许您可以简单地将nginx作为反向代理,并将其配置为将流量发送到两个域的右上游(cherryPy Web服务器)。如您所述,使用。在这个示例中,使用了
cherrypy.Application
实例,但是任何WSGI可调用(例如瓶应用)都可以。另一个想法是将Nginx()与uWsgi()和(uWsgi-python)插件一起使用
uWsgi有一个名为皇帝的模块,你可以在其中链接虚拟主机(附庸)
我自己也是一个新手,所以不一定是一个答案,而是一个检查它的建议。
只是提醒一下,uWsgi和Nginx要想让它正常工作可能会很麻烦,这取决于您的linux发行版。和瓶子配合很好,我自己测试过。
希望有帮助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服务器中为两个域提供服务器。谢谢您的建议,但该网站已经服务了相当长的时间,我不想引入新的模块,也不想花更多的精力来测试它们。您能给我一个简单的示例吗?看起来Bootle应用程序不能直接使用,毕竟它不是cherrypy.Application。我从来没有用过瓶子,所以这是未经测试的。因为您需要多个瓶子实例,所以可以使用app1=瓶子()app2=瓶子()创建它们。然后使用@app1.route()@app2.route()进行路由。最后vhost=VirtualHost(None,domains={'www.domain2.example':app1,'www.domain2.example:443':app2,})等等。或者将任何应用程序放置为None以使其成为默认应用程序。是的,我终于按照您的建议完成了。非常感谢您对我的帮助。我在没有引入任何新模块的情况下,由Cherrypy自己完成了这项工作。无论如何,谢谢你的建议。