首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用gunricorn + nginx时出现烧瓶重定向(Url_for)错误

使用gunricorn + nginx时出现烧瓶重定向(Url_for)错误
EN

Stack Overflow用户
提问于 2014-03-11 05:46:01
回答 5查看 12.7K关注 0票数 17

我的flask应用程序中的重定向(Url_for)功能出现了问题。

任何重定向(url_for(“”))行将应用程序从domain.com/app重定向到ip-addr/,其中ip-addr是我自己的客户机ip,而不是服务器的ip。

这让我非常困惑,我不知道问题具体发生在哪里,因为它只在服务器上发生,而不是在任何本地测试中。

详情:

我正在使用http://flask.pocoo.org/snippets/35/中找到的反向代理设置。我的nginx配置如下所示

代码语言:javascript
复制
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应用程序没有收到更新其重定向路由的备忘录。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-09-26 18:11:38

添加include proxy_params为我修复了它。

代码语言:javascript
复制
location / {
    proxy_pass http://...;
    include proxy_params;
}
票数 8
EN

Stack Overflow用户

发布于 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)不会这样做。

这对服务器和本地开发都有效。

票数 14
EN

Stack Overflow用户

发布于 2018-06-01 05:32:38

也有同样的问题。您的解决方案是通过在每个环境的配置变量上进行设置,使应用程序有必要知道它正在运行哪个域。我发现HERE的解决方案实际上是在nginx proxy_pass上重写头部,如下所示:

代码语言:javascript
复制
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;
   }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22312014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档