You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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目录赋权限:
    # 替换成你实际的Media目录路径
    sudo chown -R www-data:www-data /home/ec2-user/your-project/media
    sudo chmod -R 755 /home/ec2-user/your-project/media
    
    如果是Amazon Linux,把www-data换成nginx即可。

2. 修正Nginx的Media路径配置

从你提供的配置截图来看,重点检查这几点:

  • alias必须写绝对路径,别用相对路径(比如./media这种无效,得写成/home/ec2-user/your-project/media/)
  • 配置块参考示例:
    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;
        }
    }
    
    修改配置后重启Nginx: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:00:58