我在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。
谢谢!
答案 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'