NGINX根目录内子目录文件无法访问,报403 Forbidden错误求助
解决Nginx访问子目录PHP文件返回403 Forbidden的问题
1. 优先排查文件与目录权限
这是触发403错误最常见的原因——Nginx的运行用户(www-data)没有足够权限读取目标文件,或者无法遍历父级目录。
查看权限详情
先执行以下命令,确认目录和文件的权限状态:
# 查看folder目录的权限与归属 ls -ld /var/www/html/folder # 查看file.php文件的权限与归属 ls -l /var/www/html/folder/file.php
正常情况下需要满足:
folder目录至少拥有**rx(读+执行)**权限(权限值推荐755),且所有者/组包含www-datafile.php文件至少拥有**r(读)**权限(权限值推荐644),且所有者/组包含www-data
修复权限配置
如果权限不达标,执行以下命令修正:
# 递归将目录和文件的所有者设置为www-data sudo chown -R www-data:www-data /var/www/html/folder # 递归设置目录权限为755(所有者读写执行,其他用户读+执行) sudo chmod -R 755 /var/www/html/folder # 设置PHP文件权限为644(所有者读写,其他用户只读) sudo chmod 644 /var/www/html/folder/file.php
2. 验证Nginx配置是否存在访问限制
从你提供的配置来看,当前的server块中没有针对/folder/目录的禁止规则,且location ~ \.php$规则会匹配所有.php后缀的请求(包括子目录中的文件),理论上是生效的。
如果之前修改过配置,记得重启Nginx使变更生效:
sudo systemctl restart nginx
3. 排查SELinux(针对RHEL/CentOS类系统)
如果你使用的是RHEL、CentOS这类默认启用SELinux的系统,可能是SELinux上下文限制了Nginx访问文件。可以先临时关闭SELinux测试:
sudo setenforce 0
如果关闭后能正常访问,再永久调整SELinux上下文:
sudo chcon -R -t httpd_sys_content_t /var/www/html/folder
4. 通过错误日志定位深层问题
如果以上步骤都未解决,查看Nginx错误日志获取更精准的报错信息:
sudo tail -f /var/log/nginx/error.log
再次访问http://localhost/folder/file.php后,日志会明确标注403错误的具体原因(比如权限不足、配置禁止访问等),根据日志内容进一步排查即可。
内容的提问来源于stack exchange,提问作者Amin
相关产品推荐
相关产品推荐

