我的flask应用程序中的重定向(Url_for)功能出现了问题。
任何重定向(url_for(“”))行将应用程序从domain.com/app重定向到ip-addr/,其中ip-addr是我自己的客户机ip,而不是服务器的ip。
这让我非常困惑,我不知道问题具体发生在哪里,因为它只在服务器上发生,而不是在任何本地测试中。
详情:
我正在使用http://flask.pocoo.org/snippets/35/中找到的反向代理设置。我的nginx配置如下所示
location /app {
proxy_set_header X-Script-Name /app;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_pass http://localhost:8000/;
}
我让gunicorn运行我的flask应用程序作为一个新的任务。有什么提示吗?
编辑:
所以我仔细研究了一下,发现这个git报告也有类似的问题,https://github.com/omab/django-social-auth/issues/157。
Nginx -通过localhost服务于Nginx的Gunicorn (127.0.0.1:1234)。不幸的是,当我在社交平台上进行身份验证时,将它们发送到的重定向URL social-auth是127.0.0.1:1234/twitter/complete,这显然不能被客户端的浏览器解析。
似乎我的Flask应用程序没有收到更新其重定向路由的备忘录。
发布于 2018-09-26 18:11:38
添加include proxy_params
为我修复了它。
location / {
proxy_pass http://...;
include proxy_params;
}
发布于 2014-03-12 07:01:40
我找到了一个解决方案。我所有的重定向都必须使用redirect(url_for(location, _external=True))
。
似乎url_for(x, _external=True)
将使用我的nginx proxy_set_header中的所有变量来构造url,而url_for(x)
不会这样做。
这对服务器和本地开发都有效。
发布于 2018-06-01 05:32:38
也有同样的问题。您的解决方案是通过在每个环境的配置变量上进行设置,使应用程序有必要知道它正在运行哪个域。我发现HERE的解决方案实际上是在nginx proxy_pass上重写头部,如下所示:
location /api {
# Define the location of the proxy server to send the request to
proxy_pass http://web:8000;
# Redefine the header fields that NGINX sends to the upstream server
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Define the maximum file size on file uploads
client_max_body_size 5M;
}
https://stackoverflow.com/questions/22312014
复制相似问题