Django+React部署环境下访问media动态子目录文件出现403错误
解决Django+EC2+Nginx环境下Media文件403权限错误
1. 先搞定Nginx运行用户的目录权限
Nginx默认用www-data(Ubuntu/Debian)或nginx(Amazon Linux/CentOS)用户运行,得让这个用户能读取你的Media目录:
- 先查Nginx的运行用户:
ps aux | grep nginx,看输出第一列的用户名 - 给Media目录赋权限:
如果是Amazon Linux,把# 替换成你实际的Media目录路径 sudo chown -R www-data:www-data /home/ec2-user/your-project/media sudo chmod -R 755 /home/ec2-user/your-project/mediawww-data换成nginx即可。
2. 修正Nginx的Media路径配置
从你提供的配置截图来看,重点检查这几点:
alias必须写绝对路径,别用相对路径(比如./media这种无效,得写成/home/ec2-user/your-project/media/)- 配置块参考示例:
修改配置后重启Nginx:location /media/ { alias /home/ec2-user/your-project/media/; expires 30d; add_header Cache-Control "public, max-age=2592000"; # 可选:指定允许访问的文件类型,过滤无效请求 types { image/jpeg jpg; image/png png; text/plain txt; } }sudo systemctl restart nginx
3. 处理SELinux权限(仅Amazon Linux/CentOS/RHEL)
这类系统默认开启SELinux,需要给Media目录添加HTTP访问的上下文:
sudo semanage fcontext -a -t httpd_sys_content_t "/home/ec2-user/your-project/media(/.*)?" sudo restorecon -Rv /home/ec2-user/your-project/media
4. 确认Django的Media配置无误
检查settings.py中的配置,确保如下:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'
注意:生产环境不要用Django自带的django.views.static.serve处理Media,完全交给Nginx即可。
5. 单个文件权限检查
挑一个无法加载的文件,查看权限是否过于严格:
ls -l /home/ec2-user/your-project/media/test.jpg
如果权限是-rw-------这类,改成644:
sudo chmod 644 /home/ec2-user/your-project/media/test.jpg
内容的提问来源于stack exchange,提问作者Fadhili Rashidi
相关产品推荐
相关产品推荐

