我在我的cherrypy配置中有以下内容,但/ foo没有处理我对http://foo.bar.com的请求...这个樱桃应用程序在nginx后面,它正在传递主机头 - 我正在输出主机头在/并返回'foo.bar.com'所以我希望/ foo能够处理这个请求。
[/]
request.dispatch = cherrypy.dispatch.VirtualHost(**{
'foo.bar.com': '/foo',
})
Nginx正在使用:
执行proxy_pass到127.0.0.1proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
答案 0 :(得分: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)中的[/]下的任何设置是否可以正常工作,或者是否所有路径特定的配置都需要在应用程序配置中。
答案 1 :(得分:0)
您无法从全局配置中设置调度程序,我认为这不是显而易见的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)
有效地将“全局”配置设置为“每个应用程序本地”配置。