繁体   English   中英

如何使用 Nginx 提供 Flask 静态文件?

[英]How to serve Flask static files using Nginx?

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

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

我已经设法使用 nginx 和 wsgi 运行了 web 应用程序,但问题是没有提供静态文件,我的意思是,当我转到它们的 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/

如何为Flask Web应用程序配置NGINX

我发现此解决方案更好:

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

当然,用项目目录替换<path to project>

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

我有同样的问题,但不幸的是这些答案没有帮助。

我的树:

├── app.py
├── service
│   └── __init__.py
├── static
│   └── styles.css
├── templates
│   └── home.html
└── venv
    ├── bin

nginx配置文件:

server {
    listen 80;
    server_name ...;
    
    location /static {
        alias /home/root/d_testing/static;
    }
    
    location / {
        proxy_pass http://localhost:8000;
        include /etc/nginx/proxy_params;
        proxy_redirect off;
    }
}

我用 gunicorn 运行我的烧瓶应用程序:gunicorn -w 3 app:app

但它显示没有样式的文本。 怎么了?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM