You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EC2 Ubuntu+Nginx部署Django后Admin样式丢失求助

解决Django Admin页面样式丢失(无CSS/JS)的问题

作为新手遇到这个问题太正常了——本地开发时runserver会自动帮你处理静态文件,但生产环境用Nginx部署时,得手动配置静态文件的映射,我们一步步来解决:

1. 确认Django项目的静态文件配置

首先打开你的项目根目录下的settings.py,检查以下两个关键配置:

  • STATIC_URL = '/static/':这个是访问静态文件的URL前缀,默认就是这个,不用改。
  • STATIC_ROOT:这个必须设置为一个绝对路径,用来存放收集后的所有静态文件(包括Django Admin的样式)。比如:
    STATIC_ROOT = '/home/ubuntu/你的项目名称/static/'
    
    替换成你实际的项目路径,比如你的项目在/home/ubuntu/my_django_app,那STATIC_ROOT就设为/home/ubuntu/my_django_app/static/。

2. 收集静态文件到指定目录

在项目根目录下(如果用了虚拟环境,先激活它),运行以下命令:

python manage.py collectstatic

这个命令会把Django内置的Admin静态文件、你自己项目里的静态文件,全部复制到STATIC_ROOT指定的目录里。运行时会提示确认,输入yes回车即可。

3. 配置Nginx映射静态文件

找到你的Nginx站点配置文件,通常在/etc/nginx/sites-available/你的项目.conf(默认配置也可能在/etc/nginx/nginx.conf里)。打开文件,在server块中添加以下配置:

location /static/ {
    alias /home/ubuntu/你的项目名称/static/;  # 这里填你刚才设置的STATIC_ROOT路径
    expires 30d;  # 缓存静态文件,提升加载速度
}

⚠️ 小提示:如果用root而不是alias,路径要写STATIC_ROOT的父目录,比如:

location /static/ {
    root /home/ubuntu/你的项目名称/;
    expires 30d;
}

两种方式选一种就行,推荐用alias,更不容易出错。

配置完后,检查Nginx语法是否正确:

sudo nginx -t

如果输出test is successful,就重启Nginx生效:

sudo systemctl restart nginx

4. 修复文件权限问题

Nginx运行的用户通常是www-data,要确保静态文件目录有它的读取权限:

sudo chown -R www-data:www-data /home/ubuntu/你的项目名称/static/
sudo chmod -R 755 /home/ubuntu/你的项目名称/static/

5. 检查生产环境关键配置

最后确认settings.py里的两个重要参数:

  • DEBUG = False:生产环境必须关闭DEBUG模式,否则Django不会让collectstatic生效,还会有安全风险。
  • ALLOWED_HOSTS = ['jassem.in', '你的EC2公网IP']:必须把你的域名和EC2 IP加进去,否则Django会拒绝请求。

为什么会出现MIME类型错误?

你看到的MIME类型不匹配错误是因为静态文件404后,Nginx返回了404的HTML页面,而浏览器期望的是CSS/JS文件,所以才会报错。解决了静态文件的404问题,这个错误自然就消失了。

现在刷新你的Admin页面,应该就能看到正常的样式啦!

内容的提问来源于stack exchange,提问作者JASIM CHOUHAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:17:45