2014-01-14 2 views
2

У меня есть веб-сайт (который работает в Amazon EC2 Instance), запускающий приложение Python Bottle с CherryPy в качестве своего веб-сервера.Как использовать CherrPy в качестве веб-сервера и бутылки в качестве приложения для поддержки нескольких виртуальных хостов?

Теперь мне нужно добавить еще один веб-сайт с другим зарегистрированным доменным именем. Чтобы снизить стоимость, я хочу использовать существующий веб-узел для этого.

Очевидно, что виртуальный хост является решением.

Я знаю, что Apache mod_wsgi может сыграть трюк. Но я не хочу заменять CherryPy.

У меня много googled, есть некоторые статьи, показывающие, как создавать виртуальные хосты на CherryPy, но все они предполагают, что Cherrypy используется как веб-сервер + веб-приложение, а не CherrPy в качестве веб-сервера и бутылки в качестве приложения.

Как использовать CherrPy в качестве веб-сервера и бутылки в качестве приложения для поддержки нескольких виртуальных хостов?

ответ

1

Как вы упомянули, используйте VirtualHost. В примере используются примеры cherrypy.Application, но любой вызывающий WSGI (например, приложение для бутылок) будет делать.

+0

Не могли бы вы дать мне простой пример? Кажется, приложение Bootle не может быть использовано напрямую, в конце концов, это не черри. – 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).

+0

Я получил его работу от Cherrypy самостоятельно без введения нового модуля. В любом случае, спасибо за ваше предложение. – jcyrss

0

Другой идеей было бы использовать Nginx (http://wiki.nginx.org/Main) с uWsgi (http://projects.unbit.it/uwsgi/) & (uWsgi-питона) плагин

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-адреса из Вашего сервера, так что серверы для домена 2 в одном веб-сервере.