部署Django到Ubuntu的Nginx无法加载静态CSS文件求助
Django部署后Nginx无法加载CSS的问题排查与解决
问题背景
按照Ubuntu部署Django+Postgres+Nginx+Gunicorn的教程操作后,站点能正常访问,但CSS无法加载;直接通过0.0.0.0:8000用runserver启动时,CSS显示正常。
当前配置:
settings.py 相关配置
STATIC_URL = 'static/' STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]
Nginx 站点配置(/etc/nginx/sites-available/django_project)
server { listen 80; server_name xxx.xx.xx.xxx; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { alias /home/muser/django_project/static/; } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } }
错误原因分析
静态文件未完成收集
部署Django时,必须通过collectstatic命令将所有静态文件(包括各app下的静态资源、STATICFILES_DIRS指定目录的资源)统一收集到STATIC_ROOT指向的目录中。你当前仅配置了STATIC_ROOT,但未执行收集操作,导致staticfiles目录为空。Nginx静态文件路径配置错误
Nginx配置中location /static/指向的是项目中的static目录(开发时的静态文件存放地),但部署环境下应该指向STATIC_ROOT对应的staticfiles目录,否则Nginx找不到收集后的静态资源。
解决步骤
执行静态文件收集命令
在项目根目录下运行:python manage.py collectstatic执行过程中会提示确认,输入
yes即可完成收集。修正Nginx静态文件路径
编辑Nginx站点配置文件:sudo nano /etc/nginx/sites-available/django_project将
location /static/块修改为:location /static/ { alias /home/muser/django_project/staticfiles/; }注意路径结尾的
/必须保留,避免路径拼接错误。重启Nginx服务
保存配置后,重启Nginx使修改生效:sudo systemctl restart nginx(可选)检查目录权限
如果仍无法加载,确保Nginx进程有权限读取staticfiles目录:sudo chown -R www-data:www-data /home/muser/django_project/staticfiles/ sudo chmod -R 755 /home/muser/django_project/staticfiles/
内容的提问来源于stack exchange,提问作者mdev
相关产品推荐
相关产品推荐

