Nginx + Gunicorn + Flask 不提供静态文件

Nginx + Gunicorn + Flask 不提供静态文件

我是 Nginx 和 Gunicorn 的新手......

我正在尝试在某些前缀上提供 Flask 应用程序......

前任:https://myweb.com/flask/prefix/

除了没有加载静态文件之外,一切工作正常......

我的 nginx 站点配置如下所示

location /flask/prefix/ {
        include proxy_params;
        proxy_pass http://unix:/home/user/flask_config/flask_socket_file.sock:/;        
    }

当我使用 Firefox 开发人员工具检查网络部分时,我发现它正在加载静态文件的主页路径/而不是这个/flask/prefix......

例子:

/static/image.png (即https://myweb.com/static/image.png

但它应该是/flask/prefix/static/image.png(即https://myweb.com/flask/prefix/static/image.png)。

然而我试图:/在语句末尾删除proxy_pass...它以 501 错误结束....

请让我知道我做错了什么......

我按照以下步骤使用 Nginx 配置 Flask 应用程序这里

答案1

我终于找到了解决方案......

在这里分享以便能够帮助别人......

在你的 wsgi.py 文件中...

from start import app

class PrefixMiddleware(object):

    def __init__(self, app, prefix=''):
        self.app = app
        self.prefix = prefix

    def __call__(self, environ, start_response):

        if environ['PATH_INFO'].startswith(self.prefix):
            environ['PATH_INFO'] = environ['PATH_INFO'][len(self.prefix):]
            environ['SCRIPT_NAME'] = self.prefix
            return self.app(environ, start_response)
        else:
            start_response('404', [('Content-Type', 'text/plain')])
            return ["This url does not belong to the app.".encode()]

app.wsgi_app = PrefixMiddleware(app.wsgi_app, prefix='/flask/prefix')
if __name__ == "__main__":
    app.run()

用这个它应该可以工作...

我参考了以下解决方案这里..

相关内容