代理服务器的 Flask-OpenID 问题



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

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

有没有办法控制这种行为,让 Flask-OpenID 正确地重定向到代理服务器?

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

您可能还需要查看设置 X-Forwarded-For 和 X-Forwarded-Proto 标头,以便您可以正确读取实际的客户端 IP 和协议。Werkzeug提供了一个修复程序来帮助解决这个问题,Flask文档中有一个详细的示例,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;
}

最新更新