【问题标题】:Cherrypy VirtualHost dispatcher not workingCherrypy VirtualHost 调度程序不工作
【发布时间】:2013-10-31 03:20:52
【问题描述】:

我的cherrypy 配置中有以下内容,但是/foo 没有处理我对http://foo.bar.com 的请求...cherrypy 应用程序位于通过主机头的nginx 后面-我正在输出主机头在 / 并且它正在返回 'foo.bar.com' 所以我希望 /foo 来处理这个请求。

[/]
request.dispatch = cherrypy.dispatch.VirtualHost(**{ 
    'foo.bar.com': '/foo',
})

Nginx 正在对 127.0.0.1 执行代理传递:

proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

【问题讨论】:

    标签: cherrypy


    【解决方案1】:

    我不明白这个问题,但它似乎是一个应用程序与全局配置问题。我在加载到全局配置中的 server.cfg 中设置了 VirtualHosts,并且我在没有应用程序配置的情况下安装:

    cherrypy.config.update("server.cfg")
    cherrypy.tree.mount(root, "/")
    

    设置应用程序配置解决了问题:

    conf = {
      "/": {
        "request.dispatch": cherrypy.dispatch.VirtualHost(
          **{
            "foo.domain.com:8000": "/foo",
            "bar.domain.com:8000": "/bar"
          }
        )
      }
    }
    cherrypy.tree.mount(root, "/", conf)
    

    如果有人想解释,我会接受他们的回答。我现在想知道我在 server.cfg (cherrypy.config) 中的 [/] 下放置的任何设置是否可以正常工作,或者是否所有路径特定的配置都需要在应用程序配置中。

    【讨论】:

      【解决方案2】:

      您不能从全局配置中设置调度程序,我认为这并不明显,而是 dispatcher itself is responsible of handling the merging of the configurations

      另一个造成混淆的原因是,如果您使用cherryd 命令,它可能看起来很正常。

      例如,您可以像这样部署应用程序:

      cherryd -c server.cfg 
      

      server.cfg 为:

      [global]
      tree.app = myapp.root
      [/]
      request.dispatch = cherrypy.dispatch.MethodDispatcher()
      

      myapp.py 上使用以下实现:

      import cherrypy
      
      class Root(object):
          exposed = True
      
          def GET(self):
              return "Hi!"
      
      root = cherrypy.Application(Root())
      

      但是cherryd 有一些诡计。

      一个是添加的命名空间“树”,您在其上设置tree.NAME_OF_APP = INSTANCE_OF_CHERRYPY_APP,更重要的是在“全局”配置文件上设置调度程序有效,因为cherryd 命令在只有一个配置文件时将配置文件合并到应用程序中应用程序挂载在树上。

      类似:

      cherrypy.tree.apps.values()[0].merge(config)
      

      有效地使“全局”配置类似于“本地每个应用程序”配置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-30
        相关资源
        最近更新 更多