2

all - 我在尝试部署使用 Flask-OpenID 扩展的站点时遇到问题。在 localhost 上,我通过完整登录 -> 登录周期后移动没有问题 - 但在我的生产服务器上,它在 Flask 应用程序(与 Gunicorn 一起运行)前面运行 Nginx 代理,我在 openid 上遇到错误。我连接到的任何提供者的响应的领域和 openid.return_to 参数。

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

有什么方法可以控制这种行为并让 Flask-OpenID 通过代理服务器正确重定向?

4

1 回答 1

1

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

您可能还想查看设置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;
}
于 2013-01-29T15:19:01.290 回答