【问题标题】:Django static files 404 using nginxDjango静态文件404使用nginx
【发布时间】:2021-01-12 02:47:18
【问题描述】:

我知道这已经被问过几次了,但这些解决方案似乎都不适合我。这是我第一次部署 Django 项目,作为参考,我遵循了这个教程:https://linuxhint.com/create_django_app_ubuntu/

因此,完全有可能有什么东西完全从我头顶飞过。

nginx 配置(我尝试使用别名而不是 root,带有和不带有斜杠,确保静态文件不属于 root 等):

upstream django {
    server 127.0.0.1:8000;
}

server {
    listen 80;

    location /static/ {
        root /home/bryan/Projects/portfolio;
        try_files $uri =404;
    }

    location / {
        try_files $uri @send_to_django;
    }

    location @send_to_django {
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://django;
    }
}

settings.py:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

注意:

  • django.contrib.staticfiles 已安装
  • python manage.py collectstatic 似乎在工作
  • 我相信我在模板中正确引用了静态文件:
{% load static %}
    <link rel="stylesheet" type="text/css" href="{% static 'home/css/index.css' %}">

我的文件结构:

  • 投资组合(django 项目根目录)
    • 首页(django 应用)
    • static(项目静态文件)
      • home(家庭应用的静态文件)
        • CSS

除了静态文件之外,该网站在此设置下可以完美运行。

【问题讨论】:

    标签: python-3.x django ubuntu nginx gunicorn


    【解决方案1】:
    1. 确保您的静态文件位于 /home/bryan/Projects/portfolio/static 中
        STATIC_ROOT = os.path.join(BASE_DIR, 'static')
        STATICFILES_DIRS = (
            os.path.join(BASE_DIR, 'static'),
        )
    

    上述设置可能会导致静态文件被收集到 /home/bryan/Projects/portfolio/static/static 目录中

    1. 检查静态目录权限

    2. 在你的 nginx 配置文件中使用“alias”而不是“root”

    【讨论】:

    • 感谢您的回复。 1. 好像不是这样的。所有文件都按预期存在于/home/bryan/Projects/portfolio/static 下。例如,即使是我在我的 HTML sn-p 中引用的那个也可以在home/bryan/Projects/portfolio/static/home/css/index.css 2 下的文件系统中找到。我刚刚检查过,静态目录的权限是给我的用户而不是给根用户的。 3. 我现在正在尝试这个:location /static/ { alias /home/bryan/Projects/portfolio/static/; try_files $uri =404; } 但是,它仍然只是给我一个 404
    • @Bryan location /static/ { 别名 /home/bryan/Projects/portfolio/static/;删除尾部斜杠
    • 我现在已经删除了它们,但不幸的是它仍然给出了 404
    • @Bryan nginx 日志说什么?
    • 哦,它似乎在为静态文件抛出 403。但是,为什么这只发生在静态文件上?实际的 HTML 模板本身报告 200 并且工作正常; /portfolio/ 目录中的所有内容都具有完全相同的权限。
    猜你喜欢
    • 2014-06-07
    • 2017-06-05
    • 2016-09-24
    • 2015-11-30
    • 2021-08-08
    • 2021-08-12
    • 2012-09-30
    • 2020-10-17
    • 1970-01-01
    相关资源
    最近更新 更多