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
相关产品推荐
相关产品推荐

