如何使用 Nginx 服务 Flask 静态文件?

How to serve Flask static files using Nginx?

我有一个具有这种结构的 Web 应用程序:

|
|__ static
   |__style.less
   |__images
|__ myapp.py
|__ wsgi.py

我已经设法 运行 使用 nginx 和 wsgi 的网络应用程序,但问题是静态文件没有提供,我的意思是,当我去他们的服务器时找不到它们URL。它给了我 404.

这是我的 nginx 配置文件部分:

 server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/public_html;
    index index.php index.html index.htm;

    server_name xxxxxxx.com;

    location / {
        try_files $uri $uri/ =404;
    }

    location /myapp {
        include uwsgi_params;
        uwsgi_pass unix:/var/www/public_html/myapp/myapp.sock;
}

是不是少了什么?

将此添加到您的 nginx 配置中

location ^~ /static/  {
    include  /etc/nginx/mime.types;
    root /project_path/;
}

/project_path/ 替换为您的 应用程序的绝对路径 ,您应该注意它 不包括静态目录 和所有/project_path/static/ 中的内容将在 url /static/.

中服务器

来自How to Configure NGINX for a Flask Web Application

我发现这个解决方案更好:

location /static  {
    alias /<path to project>/static;
}

当然,将 <path to project> 替换为您的项目目录。

请注意,在此解决方案中,static 包含在路径中!这对安全性真的很好!意外提供应用程序源文件的风险降低了。默认情况下,flask 将源文件放在 <path to project> 中,配置中的一个小错误可能会使这些源文件对攻击者可见。