Python 使用Nginx、Flask和Gunicorn提供静态文件

Python 使用Nginx、Flask和Gunicorn提供静态文件,python,nginx,flask,gunicorn,Python,Nginx,Flask,Gunicorn,我正在使用Gunicorn托管一个Python Flask应用程序,并使用Nginx进行反向代理,使用Nginx服务静态文件时遇到了相当大的困难。基本上,当我导航到像www.example.com/或www.example.com/something这样的url时,Nginx可以很好地处理静态文件。但是,对于任何带有多个/it的url,它无法提供所有静态文件(例如www.example.com/something/else不会呈现任何静态文件——css、js、图像等)。不管路由如何,我都希望为来

我正在使用Gunicorn托管一个Python Flask应用程序,并使用Nginx进行反向代理,使用Nginx服务静态文件时遇到了相当大的困难。基本上,当我导航到像www.example.com/或www.example.com/something这样的url时,Nginx可以很好地处理静态文件。但是,对于任何带有多个/it的url,它无法提供所有静态文件(例如www.example.com/something/else不会呈现任何静态文件——css、js、图像等)。不管路由如何,我都希望为来自同一目录的静态文件提供服务(每个模板使用相同的CSS和JS)。我该怎么做?我认为将根目录或别名设置到该目录就足够了

我知道还有另一篇关于堆栈溢出的文章也说了类似的话,但解决方案实际上并没有解决这个问题(询问者只是说他们在别处发现了这个bug),所以任何指导都是值得的。以下是我当前应用程序的Nginx配置:

server{

    server_name 0.0.0.0 example.com www.example.com;
    root /path/to/project;
    listen 80;

    location / {
        proxy_pass http://unix:/path/to/project/project.sock;
        include proxy_params;
    }

    location /css/ {
        autoindex on;
        include /etc/nginx/mime.types; # mime.types exists 
    }

    location /js/ {
        include /etc/nginx/mime.types;
        alias /path/to/project/js/;
    }
    location /images/ {
        include /etc/nginx/mime.types;
        alias /path/to/project/images/;
    }

我意识到其中一些是多余的,可能可以做得更好,我只是想展示一下我在服务这些文件方面所尝试的各种方式。我是新手,因此任何建议或文书问题都非常感谢。

查看访问日志以确定应用程序请求的URI。常见的问题是在HTML文件中使用与路径相关的URL来指定资源文件。@RichardSmith,因此访问日志显示了我所期望的内容——在像/something/else这样的路径上,nginx尝试从/something/css/stylesheet.css提供静态文件。为什么会是这种情况(我想更好地理解这一切),我如何才能在理想的位置之前剥离所有东西?我想你可以使用重写,我只是不知道怎么做这不是Nginx的问题。访问日志显示flask应用程序使用错误的URL请求其资源文件。您需要在flask应用程序中修复
css/stylesheet.css
的定义,可能需要将其更改为
/css/stylesheet.css
@RichardSmith Awesome,这对我很有用!那么,切题相关的问题是,我获取html的方式是通过Webflow导出的,因此链接和图像标记的所有src和href属性都是在没有前导的情况下格式化的/--您知道flask有什么方法可以像解释前导斜杠一样解释这些路由吗?最初我有一些笨重的javascript重写了所有这些文件的路径,但这会缩短页面的加载时间。请查看访问日志以确定应用程序请求的URI。常见的问题是在HTML文件中使用与路径相关的URL来指定资源文件。@RichardSmith,因此访问日志显示了我所期望的内容——在像/something/else这样的路径上,nginx尝试从/something/css/stylesheet.css提供静态文件。为什么会是这种情况(我想更好地理解这一切),我如何才能在理想的位置之前剥离所有东西?我想你可以使用重写,我只是不知道怎么做这不是Nginx的问题。访问日志显示flask应用程序使用错误的URL请求其资源文件。您需要在flask应用程序中修复
css/stylesheet.css
的定义,可能需要将其更改为
/css/stylesheet.css
@RichardSmith Awesome,这对我很有用!那么,切题相关的问题是,我获取html的方式是通过Webflow导出的,因此链接和图像标记的所有src和href属性都是在没有前导的情况下格式化的/--您知道flask有什么方法可以像解释前导斜杠一样解释这些路由吗?最初,我有一些笨重的javascript重写了所有这些文件的路径,但这缩短了页面的加载时间