2014-01-14 51 views
2

我有一個運行Python Bottle應用程序的網站(運行在Amazon EC2實例中),CherryPy作爲它的前端Web服務器。如何使用CherrPy作爲Web服務器和Bottle作爲應用程序來支持多個虛擬主機?

現在我需要添加另一個網站,其他域名已經註冊。爲了降低成本,我想利用現有的網站主機來做到這一點。

顯然,虛擬主機是解決方案。

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

我搜索了很多,有一些文章展示瞭如何在CherryPy上製作虛擬主機,但他們都假設Cherrypy作爲Web Sever + Web應用程序,而不是CherrPy作爲Web服務器和Bottle作爲應用程序。

如何使用CherrPy作爲Web服務器和Bottle作爲應用程序來支持多個虛擬主機?

回答

1

如您所述,請使用VirtualHost。在示例中使用cherrypy.Application實例,但是任何可調用的WSGI(例如Bottle應用)都可以。

+0

你能給我一個簡單的例子嗎?看來Bootle App不能直接使用,畢竟它不是cherrypy.Application。 – jcyrss

+0

我從來沒有使用瓶子,所以這是未經測試。由於您需要多個Bottle實例,因此您可以使用app1 = Bottle()app2 = Bottle()創建它們。然後使用@ app1.route()@ app2.route()進行路由。最後vhost = VirtualHost(None,domains = {'www.domain2.example':app1,'www.domain2.example:443':app2,})等等。或者將任何應用程序設置爲None以使其成爲默認應用程序。 – jwalker

+0

是的,我終於完成了你的建議。非常感謝你幫助我。 – jcyrss

0

也許你可以簡單地將nginx設置爲反向代理並將其配置爲將流量發送到右側上游的兩個域(cherryPy web服務器)。

+0

我沒有任何新模塊的介紹,我通過Cherrypy自己的工作。任何方式,感謝您的建議。 – jcyrss

0

另一個想法是使用Nginx的(http://wiki.nginx.org/Main)與uWsgi(http://projects.unbit.it/uwsgi/)&(uWsgi的Python)插件

uWsgi有一個模塊名爲皇帝,你可以在鏈接的虛擬主機(附庸),排序。

我是這個自己的新手,所以不一定是答案,而是一個建議來檢查它。 只是一個頭,uWsgi和Nginx可能是一個麻煩得到它的工作,取決於你的Linux發行版。與瓶子很好地工作,自己測試它。 希望它有幫助

+0

感謝您的建議,但該網站已經服務了很長時間,我不想引入新模塊並花費更多精力來測試它們 – jcyrss

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域。

相關問題