Django/Nginx生产环境部署:服务器图片无法加载求助
确认静态文件收集完成
执行python manage.py collectstatic命令,Django不会自动聚合各APP下的静态文件到统一目录,必须手动执行此操作。同时检查settings.py中的STATIC_ROOT(静态文件存放的绝对路径)和STATIC_URL(前端访问路径)配置是否匹配,比如:STATIC_URL = '/static/' STATIC_ROOT = '/var/www/your_project/static/'直接进入
STATIC_ROOT对应的目录,确认目标图片是否存在。验证Nginx静态资源配置准确性
检查Nginx配置文件中location /static/的路径是否与STATIC_ROOT完全对应,注意root和alias的区别:# 使用root的写法(root指向项目根目录,访问路径会拼接/static/) location /static/ { root /var/www/your_project; expires 30d; } # 或者使用alias的写法(alias直接指向静态文件目录,末尾斜杠要注意) location /static/ { alias /var/www/your_project/static/; expires 30d; }修改配置后,先执行
sudo nginx -t检查语法是否正确,再重启Nginx:sudo systemctl restart nginx。检查文件与目录权限
静态文件目录和文件的所有者必须匹配Nginx运行用户(通常是www-data或nginx),执行:sudo chown -R www-data:www-data /var/www/your_project/static/同时设置合理权限:
sudo chmod -R 755 /var/www/your_project/static/如果服务器开启了SELinux,临时关闭测试:
sudo setenforce 0,若图片恢复加载,需添加SELinux规则:sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/your_project/static(/.*)?" sudo restorecon -Rv /var/www/your_project/static/查看浏览器控制台与Nginx日志
打开浏览器开发者工具(F12)的Network标签,刷新页面查看图片请求的状态码:- 404:路径配置错误或文件实际不存在;
- 403:权限不足;
- 500:Nginx配置存在语法或逻辑错误。
同时查看Nginx错误日志:tail -f /var/log/nginx/error.log,刷新页面后捕捉具体报错信息,定位问题根源。
验证模板中静态资源引用是否正确
确保模板文件开头加载了静态文件标签:{% load static %},图片引用使用正确格式:<img src="{% static 'images/your_image.jpg' %}" alt="示例图片">避免硬编码路径,确保引用路径与
STATIC_ROOT下的文件结构一致。检查UFW防火墙规则
执行sudo ufw status确认80(HTTP)和443(HTTPS)端口已被允许,静态资源通过Nginx提供,只要这两个端口开放即可,无需额外规则。
内容的提问来源于stack exchange,提问作者Guy

