【问题标题】:Nginx unable to load static files from djangoNginx 无法从 django 加载静态文件
【发布时间】:2026-01-28 07:05:02
【问题描述】:

家人,让 nginx 服务器加载 django 收集的静态文件有点麻烦。这是我的 nginx 站点-可用

server {
        listen 80;
       server_name <my_ip_address>;

    location / {

           proxy_pass http://127.0.0.1:8000;
           proxy_set_header X-Forwarded-Host  $server_name;
           proxy_set_header X-Real-IP         $remote_addr;

        }

  location /asset/ {
            autoindex on;
            alias /var/www/html/dev2_assets/;
           }
  }

下面是我的 Django STATIC_URL 和 STATIC_ROOT 配置

STATIC_URL = '/assets/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "assets"),
)

STATIC_ROOT = '/var/www/html/dev2_assets/'

当我使用 ./manage.py runserver 运行应用程序时,它会加载所有静态文件。任何帮助。谢谢

【问题讨论】:

  • /asset/ != /assets/
  • 谢谢丹,让我检查清楚

标签: django python-2.7 nginx gunicorn


【解决方案1】:

你的问题是你的位置。

您没有为它指定根目录,也在您的 settings.py 中声明您的资产,但在您的位置您的声明资产中缺少 s。尝试将其更改为这样的:

location /assets/ {
        autoindex on;
        root /var/www/html/dev2_assets;
    }

也为了调试目的,尝试在上面添加这个位置:

error_log /var/log/nginx/error.log;

然后您将收到一条关于它无法检索您的静态文件的特定错误消息。

最后你确定你使用的 nginx、django 和 gunicorn 正确吗?

这是我的站点文件的副本以供比较: # 这会将端口 80 上的所有传入流量重定向到 443 服务器 { 听 80; server_name domain.com; 返回 301 https://$server_name$request_uri; }

server {

listen   443;

ssl    on;
ssl_certificate    /etc/ssl/domain.com.chained.crt;
ssl_certificate_key    /etc/ssl/domain.com.key;

server_name helius.dk;
access_log /var/log/nginx/nginx.vhost.access.log;
error_log /var/log/nginx/nginx.vhost.error.log;
#location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
        root /home/user/projectname/static;
    }


    location / {
        include proxy_params;
        proxy_pass http://unix:/home/user/projectname/gunicorn.sock;
    }

}

【讨论】:

  • 谢谢 Alex,让我试试,我会回来的
  • 错误日志显示 Nginx 正在从 /var/www/html/dev2_assets/assets/ 请求静态文件,我没有注意到我做错了什么。
  • 我得到了它的工作,我改变了root -&gt; alias,我也添加了error_log /var/log/nginx/error.log;`在nginx站点启用,我也改正了资产到资产的错误,感谢@Alexander 和@Daniel Roseman