全部 - 我在尝试部署使用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正确地通过代理服务器重定向?
答案 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;
}