2013-10-31 46 views
1

我已經在我的cherrypy配置中有以下信息,但/ foo沒有處理我的請求到http://foo.bar.com ...櫻桃應用程序在nginx後面傳遞主機頭 - 我輸出Host頭部在/並且它返回'foo.bar.com',所以我期望/ foo來處理這個請求。Cherrypy VirtualHost調度器不工作

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

Nginx的是做了proxy_pass與到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; 

回答

0

我不明白的問題,但它似乎是一個應用程序VS全局配置問題。我設置其加載到全局配置中的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)下的[/]將正常工作,或者如果所有路徑特定的配置需要在應用程序配置。

0

你不能從全局配置中設置調度程序,我認爲這不是顯而易見的,而是dispatcher itself is responsible of handling the merging of the configurations

混亂的另一個原因是,因爲如果你使用cherryd命令,它可能看起來像是正常的東西。

例如,你可以部署這樣的應用程序:在myapp.py

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

通過以下實現:

cherryd -c server.cfg 

server.cfg作爲

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) 

有效地做像一個「本地每個應用」配置「全局」配置。