【问题标题】:Nginx + Django errors when loading ccs files in production在生产中加载 ccs 文件时出现 Nginx + Django 错误
【发布时间】:2020-08-15 11:01:57
【问题描述】:

我看过很多类似的帖子,但没有什么能对我有用。当我加载我的静态文件时,浏览器会为我的所有 css 文件抛出这种错误。 当我收集静态时,它工作正常,而且当我运行 findstatic 时,它会将我指向正确的目录。所以我对正在发生的事情有点迷茫,因为我的静态文件似乎在它们应该在的位置,但 nginx 找不到它们,尽管它们的路径是正确的。

GET https://www.exostock.net/staticfiles/vendor/font-awesome/css/font-awesome.min.css net::ERR_ABORTED 404 (Not Found)

Home:136 GET https://www.exostock.net/staticfiles/img/logo8.png 404 (Not Found)

从我阅读的信息和 django + nginx 文档中,我无法发现我在哪里犯了错误。我已经用了几天了,我希望有人能看到我看不到的东西。

nginx/sites-available/app.conf


server {
    server_name  exostock.net www.exostock.net;

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/exostocksaas/app.sock;
}
        location /static/ {
        alias /home/ubuntu/exostocksaas/collected_static/;
}
location ~ \.css {
   add_header  Content-Type    text/css;
}
location ~ \.js {
    add_header  Content-Type    application/x-javascript;
}
}

django 中的settings.py

STATIC_URL = '/staticfiles/'

# STATICFILES_FINDERS = (
#     'django.contrib.staticfiles.finders.FileSystemFinder',
#     )
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'staticfiles')
]

STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

我的 html 链接到静态

   <!-- Bootstrap CSS-->
    <link href="{% static 'vendor/bootstrap/css/bootstrap.min.css' %}">
    <!-- Font Awesome CSS-->
    <link href="{% static 'vendor/font-awesome/css/font-awesome.min.css' %}">
    <!-- Custom Font Icons CSS-->

    <link href="{% static 'css3/font.css' %}">

更新:我做了建议的更改,但它仍然不起作用,当我查看 nginx 错误日志时,它显示静态路径如下

"/usr/share/nginx/html/staticfiles/

这是错误的,因为如果我查看 html 文件夹内部,则只有“欢迎使用 nginx”htlm 页面。问题是为什么 nginx 在那里搜索文件?我已经删除了默认文件,但是即使在重新启动 nginx 后,错误日志仍然指向,服务器也是。

【问题讨论】:

  • 你试过运行python manage.py collectstatic吗?
  • 是的,它工作正常,我所有的静态数据都被收集了

标签: html css django nginx


【解决方案1】:
STATIC_DIR = os.path.join(BASE_DIR,'static')

添加文件夹static,但在您使用它的同一路径

将你的静态文件(css、js、....)放入文件夹 static 中,然后添加 html

{% load staticfiles %}

【讨论】:

    【解决方案2】:

    我认为您在选择的路径名称上存在一些混淆问题。如果您将 nginx app.conf 更改为:

    server {
        location /static/ {
            root /home/ubuntu/exostocksaas;
        }
    
        location / {
            include proxy_params;
        }
    }
    

    然后将您的settings.py 文件更改为:

    STATIC_URL = '/static/'
    
    # STATICFILES_FINDERS = (
    #     'django.contrib.staticfiles.finders.FileSystemFinder',
    #     )
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'staticfiles')
    ]
    
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    

    它应该开始正确地为您的静态文件提供服务。从那里您可以开始根据需要对路径名进行增量更改,但这是我倾向于用于 Django 部署的标准配置。

    【讨论】:

    • 嘿,我做了建议的更改,但仍然出现错误,我更新了我的问题以反映最新情况
    • 嗯,您确定您的 nginx 文件已链接或位于 /etc/nginx/sites-enabled/ 目录中吗?也许转到本文的 nginx 部分并确保满足这些步骤 digitalocean.com/community/tutorials/… 。看起来好像它正在使用默认配置搜索位置。还要确保在每次更改后重新加载和重新启动 nginx 服务。
    • 谢谢你的教程,我看了很多!我已经注释掉了默认文件中的所有内容,重新启动了 gunicorn 和 nginx(sudo 服务 nginx 重启),我仍然在 error.log 中获得了默认路径。会发生什么?
    • 也可以试试sudo systemctl reload nginx,但我认为这不是你的问题。如果您复制了我的代码,我不明白为什么 nginx 会寻找“静态文件”。在运行collectstatic 后,它应该会转到一个名为“static”的目录,所有文件都存储在该目录中。
    • 能否请您确认您在运行 collectstatic 之前将文件存储在目录/staticfiles/ 中,并且在运行命令后它们正在转移到/static/
    猜你喜欢
    • 2018-08-27
    • 1970-01-01
    • 2014-10-20
    • 2015-03-13
    • 2011-12-24
    • 1970-01-01
    • 2017-04-04
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多