cherrypy.HTTPRedirect使用abs路径重定向到IP而不是主机名

时间:2013-12-22 12:58:52

标签: python-2.7 nginx cherrypy

我在nginx后面运行CherryPy,需要处理重定向。在运行于127.0.0.1:8080的我的开发机器上,这会重定向到127.0.0.1:8080/login。

但是当在cherrypy.mydomain.com(端口80)上通过nginx运行时,重定向仍然是127.0.0.1:8080/login而不是cherrypy.mydomain.com/login。 127.0.0.1:8080是应用程序的正确本地地址,但是nginx中的应用程序服务器设置为侦听端口80并在127.0.0.1:8080上将请求发送到本地cherrypy服务器,但是不应直接公开它。

我的应用中的相关行是:

身份验证失败:

raise cherrypy.HTTPRedirect("/login")

并在我的控制器中:

cherrypy.config.update({
    'tools.encode.on': True, 'tools.encode.encoding': 'utf-8',
    'tools.decode.on': True,
    'tools.trailing_slash.on': True,
    'server.socket_host' : '127.0.0.1',
    'server.socket_port' : 8080,
})

我想知道除了套接字主机之外是否还有一个额外的服务器/主机名配置项,但我很难在文档中找到它。

基本上,我所需要的只是将cherrypy重定向到cherrypy.mydomain.com主机名而不是内部IP。

谢谢!

2 个答案:

答案 0 :(得分:3)

尝试tools.proxy配置设置:

'tools.proxy.on': True,

此外,您可能还需要

'tools.proxy.local': 'X-Forwarded-Host',

设置为合适的标题。使用 NGINX 时,标题为

'tools.proxy.local': 'Host',

如果 Lighttpd ,此标头将是合适的:

'tools.proxy.local': 'X-Host'

答案 1 :(得分:0)

我无法向https://stackoverflow.com/a/20730038/1115187添加评论,但我知道, Lighttpd 会发送X-Host标头,因此对于Lighttpd代理使用:

'tools.proxy.local': 'X-Host'