【问题标题】:Nginx won't serve static filesNginx 不会提供静态文件
【发布时间】:2019-06-27 08:31:32
【问题描述】:

我按照this 教程在 DigitalOcean 上部署了我的 Django 项目。我已经安装了 Nginx 和 Supervisor 并一直工作,直到我将 settings.py 中的 DEBUG 选项设置为 False

我尝试配置 nginx.conf 和 settings.py 百万次。将 root 更改为别名将无济于事。

Nginx 配置文件:

upstream app_server {
  server unix:/home/db1/run/gunicorn.sock fail_timeout=0;
}

server {
  listen 80;

  # add here the ip address of your server
  # or a domain pointing to that ip (like example.com or www.example.com)
  server_name ...;

  keepalive_timeout 5;
  client_max_body_size 4G;

  access_log /home/db1/logs/nginx-access.log;
  error_log /home/db1/logs/nginx-error.log;
  location /static/ {
    root /home/db1/site1/static;
  }
  # checks for static file, if not found proxy to app
  location / {
    try_files $uri @proxy_to_app;
  }

  location @proxy_to_app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server;
  }
}

Settings.py

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

【问题讨论】:

  • 你运行 collectstatic 了吗?尝试删除尾部斜杠STATIC_ROOT = os.path.join(BASE_DIR, 'static')。如果您的 STATIC_DIRstatic,则应将名称更改为不同于 static 的名称,以保持 STATIC_ROOT 和 STATIC_DIR 不同
  • 谢谢。我删除了斜线,它没有做魔法。而且我已经用不同的路径运行了 collectstatic 一百次。此外,我在项目内的三个不同位置都有我的静态文件夹的副本,但这无济于事。我的设置中没有 STATIC_DIR 参数,本教程也缺少它。只有 STATIC_URL
  • 当 debug 设置为 true 时是否有效?
  • 是的,它确实有效。无论如何,我找到了解决方案。我认为我的错误是我使用附加到地址的开发端口 8000 运行,因此为了能够加载静态文件,我需要删除端口。尽管如此,我还是不知道这是否是主要问题,因为我根据 DigitalOcean 本身的教程进行了一些调整digitalocean.com/community/tutorials/…
  • 我应该提一下,nginx.conf中有一个错误。当您使用 'root' 而不是 'alias' 时,您应该排除结束文件夹,它必须是 `root /home/db1/site1/`。解释得很好here

标签: css django nginx digital-ocean


【解决方案1】:

比较麻烦,根据DEBUG的状态用这两行之一就行了

STATIC_ROOT = os.path.join(BASE_DIR, 'static/') #Production


STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static/'), ) #Development

【讨论】:

    【解决方案2】:

    以下是帮助我解决此问题的几个步骤。不知道哪一个是实际的解决方案)

    • 将静态文件夹的所有者更改为最近创建的用户(如教程中的新项目的新创建用户)
    • 仅通过 IP 地址连接到服务器(无 PORT)

    不过,我不明白为什么添加 PORT 会导致静态文件保存在服务器上

    【讨论】:

      猜你喜欢
      • 2018-10-23
      • 1970-01-01
      • 2021-12-02
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 2022-10-06
      • 1970-01-01
      相关资源
      最近更新 更多