Диспетчер виртуальных хостов Cherrypy 3.2

я пытаюсь заставить виртуальный хост работать в cherrypy 3.2.0, работающем на python 3:

#!/usr/bin/env python

import cherrypy
from cherrypy import expose

class Root(object):

    @expose
    def index(self):
        return "I am the root  vhost"

class Foo(object):

    @expose
    def index(self):
        return "I am testingdomain.com"

class Bar(object):

    @expose
    def index(self):
        return "I am testingdomain2.com."

def main():

    cherrypy.config.update({'server.socket_host': 'rootdomain.com',
            'server.socket_port': 80,
    })

    conf = {
        "/": {
            "request.dispatch": cherrypy.dispatch.VirtualHost(
            **{
                "testingdomain.com:8000": "/foo",
                "testingdomain2.com:8000": "/bar"
            })
        }
    }

    root = Root()
    root.foo = Foo()
    root.bar = Bar()
    cherrypy.tree.mount(root, "", conf)

    #cherrypy.quickstart()
    cherrypy.engine.start()
    cherrypy.engine.block()

if __name__ == "__main__":
    main()

У меня есть тестовые домены, зарегистрированные в /etc/hosts. При запросе они корректно направляются на сервер. Но единственная страница, которую я обслуживал, — это Root, даже если я захожу на testingdomain.com или testingdomain2.com.

Может кто-нибудь, пожалуйста, помогите мне?


person JoshuaBoshi    schedule 29.06.2011    source источник
comment
вы говорите Cherpy обслуживать порт 80 с опцией server.socket_port, но все ваши виртуальные хосты имеют порты 8000...   -  person SingleNegationElimination    schedule 29.06.2011
comment
Я очень надеялся, что проблема именно в этом. Я изменил порты vhosts на 80, но ничего не изменилось. Я все еще получаю корневую страницу на всех тестовых доменах. Любые другие идеи?   -  person JoshuaBoshi    schedule 29.06.2011
comment
должен ли вообще быть порт в описании vhost?   -  person SingleNegationElimination    schedule 29.06.2011
comment
@TokenMacGuy: Да! Сейчас это работает. Я удалил порты vhosts, и он работает. Странно, потому что в примере документации используются порты с виртуальными хостами. tools.cherrypy.org/wiki/VirtualHosts Большое спасибо!   -  person JoshuaBoshi    schedule 29.06.2011


Ответы (1)


Порты, которые они показывают в документах cherrypy, имеют значения, отличные от «80». curl по крайней мере, не добавляет номера портов в Host заголовок запроса, если порт равен 80; Я подозреваю, что cherrypy.dispatch.VirtualHost недостаточно умен, чтобы сопоставить заголовок хоста example.com на порту 80 с example.com:80 или наоборот. Я бы, вероятно, сопоставил оба хоста (с номерами портов и без них) в конфигурации на случай, если необычный заголовок хоста придет по проводу.

person SingleNegationElimination    schedule 29.06.2011