Flask-OpenID与代理服务器有关

时间:2013-01-28 18:28:50

标签: openid flask

全部 - 我在尝试部署使用Flask-OpenID扩展的网站时遇到问题。在localhost上,我完全登录时没有问题 - >登录周期后 - 但在我的生产服务器上,在Flask应用程序前面运行Nginx代理(与Gunicorn一起运行)我收到来自我连接的任何提供商的响应的openid.realm和openid.return_to参数错误到。

基本上,realm和return_to指向我的下游Flask应用程序而不是代理服务器。例如,对于http://www.foo.com/login/的预期“下一个”网址,Flask-OpenID机制​​正在使提供者改为目标http://127.0.0.1:8000/login/?next=/login/,这是我的Flask应用程序正在运行的本地主机和端口。

有没有办法控制此行为并让Flask-OpenID正确地通过代理服务器重定向?

1 个答案:

答案 0 :(得分:1)

听起来您的代理服务器没有传递HOST标头,使用nginx可以在您的位置指令中使用proxy_set_header Host $host;

您可能还想查看设置X-Forwarded-For和X-Forwarded-Proto标头,以便您可以正确读取实际的客户端IP和协议。 Werkzeug提供fixer来帮助解决这个问题,Flask docs中详细介绍了一个示例,request.remote_addr应该是您所期望的。

这是一个更完整的nginx位置指令:

location / {
    proxy_pass  http://localhost:8000/;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}