【问题标题】:Flask app gives ubiquitous 404 when proxied through nginxFlask 应用程序在通过 nginx 代理时提供无处不在的 404
【发布时间】:2014-01-20 13:33:22
【问题描述】:

我有一个通过主管守护进程的烧瓶应用程序。我想将本地主机上的子文件夹代理传递给烧瓶应用程序。烧瓶应用程序直接运行时可以正常运行,但是通过代理调用时会出现 404 错误。这是nginx的配置文件:

upstream apiserver {
    server 127.0.0.1:5000;
}

location /api {
            rewrite /api/(.*) /$1 break;
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://apiserver;
            proxy_next_upstream error timeout http_502;
            proxy_buffering off;

}

例如,当我转到 http://127.0.0.1:5000/me 时,我会从应用程序中获得有效响应。但是,当我转到 http://127.0.0.1/api/me 时,我从烧瓶应用程序(不是 nginx)中得到 404。此外,flask SERVER_NAME 变量设置为 127.0.0.1:5000,如果这很重要的话。

非常感谢任何建议;我很困惑!如果还有什么需要补充的,请告诉我!

【问题讨论】:

    标签: python nginx proxy flask


    【解决方案1】:

    我建议不要设置 SERVER_NAME。

    如果设置了 SERVER_NAME,它将 404 任何不匹配该值的请求。

    【讨论】:

    • 说的差不多。我的意思是,您当然可以设置SERVER_NAME,但只需确保 nginx 在寻址后端时使用相同的名称。
    【解决方案2】:

    由于 Flask 正在处理请求,您只需在 404 错误中添加一点信息,以帮助您了解传递给应用程序的内容,并就您的 nginx 配置更改导致的影响提供一些真实的反馈。

    from flask import request
    
    @app.errorhandler(404)
    def page_not_found(error):
        return 'This route does not exist {}'.format(request.url), 404
    

    因此,当您获得 404 页面时,它会帮助您准确地告诉您 Flask 正在处理什么,这将帮助您快速缩小问题范围。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。 Flask 确实应该在这里提供更详细的错误,因为裸 404 不是很有帮助。

      在我的例子中,SERVER_NAME 被设置为我的域名(例如 example.com)。

      nginx 正在转发没有服务器名称的请求,正如@Zoidberg 所说,这导致 Flask 触发 404。

      解决方案是将 nginx 配置为使用与 Flask 相同的服务器名称。
      在您的 nginx 配置文件中(例如 sites_availablenginx.conf,取决于您定义服务器的位置):

      server {
          listen       80;
          server_name  example.com;  # this should match Flask SERVER_NAME
      
          ...etc...
      

      【讨论】:

        猜你喜欢
        • 2021-08-25
        • 2021-02-04
        • 2021-01-13
        • 2012-02-27
        • 2019-10-18
        • 2021-05-04
        • 2011-04-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多