【问题标题】:How to serve Flask static files using Nginx?如何使用 Nginx 提供 Flask 静态文件?
【发布时间】:2015-10-19 08:32:01
【问题描述】:

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

|
|__ 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;
}

有什么遗漏吗?

【问题讨论】:

    标签: python nginx flask


    【解决方案1】:

    来自How to Configure NGINX for a Flask Web Application

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

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

    当然,将&lt;path to project&gt; 替换为您的项目目录。

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

    【讨论】:

    【解决方案2】:

    将此添加到您的 nginx 配置中

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

    /project_path/替换为您的应用的绝对路径,您应该注意它不包含静态目录,并且/project_path/static/中的所有内容都将在网址/static/.

    【讨论】:

    • 谢谢您,您的代码有效,但现在我看到模板在网站上不起作用(它只是向我展示了我一直创建的 404.html 模板,并且没有'不要使用templates 目录中的其他模板。
    • 只要确定模板是否在静态文件夹中
    • @JohnMagistr 不建议在每个位置块中添加根,但您可以使用根在位置内覆盖服务器根,这没关系。
    • ^~ 有什么作用?
    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2015-11-03
    相关资源
    最近更新 更多