Digital Ocean上Django项目静态文件无法加载求助
Django静态文件403 Forbidden问题排查与解决
我在Digital Ocean Droplet上部署首个Django项目,按照官方指南配置后页面可正常加载,但静态文件请求返回403 Forbidden错误。
关键配置文件
settings.py
BASE_DIR = Path(__file__).resolve().parent.parent STATIC_ROOT = os.path.join(BASE_DIR,"static") STATIC_URL = '/static/' DEBUG = False COMPRESS_ROOT = os.path.join(BASE_DIR,"static") COMPRESS_ENABLED = True STATICFILES_FINDERS = [ 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder', ]
urls.py
urlpatterns = [ ... ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
服务器文件夹结构
root/ snap/ gymtracker/ gymenv/ gymtracker/ gymtrackerapp/ static/
静态文件实际路径:
/root/gymtracker/gymtracker/static/
错误信息:
Status Code: 403 Forbidden
问题排查与解决步骤
1. 修复静态文件目录权限
Nginx运行用户(默认是www-data)需要静态文件目录的读取权限,以及从根目录到static文件夹的遍历权限。执行以下命令:
# 将静态目录权限赋予www-data用户 chown -R www-data:www-data /root/gymtracker/gymtracker/static/ # 设置目录为755、文件为644的标准权限 find /root/gymtracker/gymtracker/static/ -type d -exec chmod 755 {} \; find /root/gymtracker/gymtracker/static/ -type f -exec chmod 644 {} \; # 确保上级目录有遍历权限 chmod 755 /root /root/gymtracker /root/gymtracker/gymtracker
2. 校验Nginx静态文件配置
打开Nginx站点配置文件(通常在/etc/nginx/sites-available/目录下),确认静态文件映射路径正确:
location /static/ { root /root/gymtracker/gymtracker/; # 注意这里是static目录的上级目录,不要写static本身 expires 30d; }
修改后重启Nginx:
sudo systemctl restart nginx
3. 确认静态文件已正确收集
确保执行过collectstatic命令,将所有App的静态文件聚合到STATIC_ROOT目录:
cd /root/gymtracker source gymenv/bin/activate python manage.py collectstatic
执行时检查输出,确认文件都被复制到/root/gymtracker/gymtracker/static/下。
4. 移除开发环境静态路由
当DEBUG=False时,Django不会处理静态文件请求,urls.py中的static(...)路由仅在开发环境生效,生产环境应由Nginx直接处理,删除此行代码:
# 移除这一行 + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
内容的提问来源于stack exchange,提问作者Raphael
相关产品推荐
相关产品推荐

