如何用Django和Nginx解决静态文件404?

如何用Django和Nginx解决静态文件404?

我使用 Django + Nginx 设置了一个 Trusty VM(其他东西也)。

服务器正在运行,我得到了“欢迎来到 Django”页面。但是当我进入servername/admin它时加载 HTML 页面但无法加载静态内容。

管理页面有以下静态内容链接:

<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css" />
<link rel="stylesheet" type="text/css" href="/static/admin/css/login.css" />

这两个 CSS 文件都给出 404 错误,正如 Nginx 日志所示:

192.168.56.1 - - [05/Jun/2014:12:04:09 -0300] "GET /admin HTTP/1.1" 301 5 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
192.168.56.1 - - [05/Jun/2014:12:04:09 -0300] "GET /admin/ HTTP/1.1" 200 833 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
192.168.56.1 - - [05/Jun/2014:12:04:10 -0300] "GET /static/admin/css/base.css HTTP/1.1" 404 142 "http://ubuntu-server/admin/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
192.168.56.1 - - [05/Jun/2014:12:04:10 -0300] "GET /static/admin/css/login.css HTTP/1.1" 404 142 "http://ubuntu-server/admin/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"

我认为错误在于我nginx.conf文件,但不知道如何解决。这是站点树:

屏幕截图

主要文件:urls.pysettings.py

答案1

这很可能是 django 或 Nginx 中的配置问题

您需要检查两件事:

  1. 您的静态文件是否在 settings.py 中正确配置?对于基本 Django 页面,这些设置不是必需的,但对于您的静态文件,您需要配置静态文件。这对于生产用途来说不是必需的,因为 Web 服务器在那里提供静态文件。它们被收集了吗?配置完成后,您可能需要运行python manage.py collectstatic

    例如,

    #settings.py
    INSTALLED_APPS += [django.contrib.staticfiles,]
    STATIC_URL = '/static/'
    STATIC_ROOT = '/your_path/.../static/'
    
    # This collects all files in /static/ directories and puts them in the static ROOT folder.
    python manage.py collectstatic
    
  2. Django 本身不提供静态文件(除非您DEBUG=True在 中设置settings.py),因此您必须在引擎 x 中添加配置才能使其提供静态文件。您可能必须重新启动 nginx 和/或autoindex on;在 nginx.conf 中为 /static/ 添加配置。

部署静态文件

在开发中,您可能还必须将/static/url 添加到您的 urls.py(在开发中),而不仅仅是设置。

答案2

我遇到了同样的问题,对 nginx 配置进行轻微的更改就解决了这个问题。

这是我的用于提供静态文件的 nginx 配置:

location /static/ {
    root /home/muqube/muqube_website/muqube/muqube_static_root/;
}

解决方案是用 替换rootalias如下所示:

location /static/ {
    alias /home/muqube/muqube_website/muqube/muqube_static_root/;
}

答案3

我猜你的文件路径不对。根据服务器的说法,admin 文件夹和 static 文件夹位于同一路径中。

在 Linux 上 / 也是根路径。您的文件不在根目录中。

再次,我只是猜测,希望这会有所帮助!

相关内容