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

Nginx+Django使用X-Accel-Redirect下载大文件返回403错误如何解决?

问题原因

你的报错Permission denied是Nginx运行用户没有访问目标文件及父目录的权限,或者SELinux限制了Nginx访问/home目录内容,按以下步骤排查修复:


步骤1:排查目录层级权限

Nginx需要对路径上所有父目录有执行权限(x),对目标文件有读取权限(r),用以下命令查看完整路径的权限情况:

namei -l /home/myuser/direct/example.txt

重点检查/home、/home/myuser、/home/myuser/direct三个目录的权限,绝大多数Linux发行版默认普通用户家目录/home/myuser权限是700,仅所有者可访问,Nginx用户无权进入。

修复权限

先查看nginx.conf首行user配置确认Nginx运行用户(CentOS/RHEL系默认是nginx,Debian/Ubuntu默认是www-data),以运行用户为nginx为例,执行以下命令授权:

# 给Nginx用户组授予目录执行权限
chgrp nginx /home/myuser /home/myuser/direct
chmod g+x /home/myuser /home/myuser/direct

# 给Nginx用户组授予文件读取权限
chgrp nginx /home/myuser/direct/example.txt
chmod g+r /home/myuser/direct/example.txt

如果不想修改组权限,也可以直接给其他用户添加对应权限:

chmod o+x /home/myuser /home/myuser/direct
chmod o+r /home/myuser/direct/example.txt

步骤2:排查SELinux限制

CentOS/RHEL/AlmaLinux等发行版默认开启SELinux,默认禁止Nginx访问/home目录下的内容,先临时关闭SELinux测试:

setenforce 0

如果测试下载正常,说明是SELinux限制,执行以下命令添加永久规则:

# 允许HTTP服务读取用户家目录内容
setsebool -P httpd_read_user_content 1

# 给下载目录打上Nginx可访问的SELinux标签
semanage fcontext -a -t httpd_sys_content_t "/home/myuser/direct(/.*)?"
restorecon -Rv /home/myuser/direct

步骤3:修复Nginx配置小问题

你当前的location /download配置缺末尾斜杠,可能导致后续路径拼接错误,修改为:

location /download/ {
    internal;
    alias /home/myuser/direct/;
    proxy_max_temp_file_size 0;
}

修改后重启Nginx生效:

systemctl restart nginx

内容的提问来源于stack exchange,提问作者qwerty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:45:05