解决Nginx出现403 forbidden (13: Permission denied)报错的四种方法

本文介绍了解决Nginx服务器返回403 Forbidden错误的方法,包括检查启动用户、确认默认首页文件存在、调整目录权限及SELinux设置。

我是在在本地用虚拟机中通过yum安装nginx的,安装一切正常,但是访问时报403,

于是查看nginx日志,路径为/var/log/nginx/error.log。打开日志发现报错Permission denied,详细报错如下:

1.    open() "/data/www/1.txt" failed (13: Permission denied), client: 192.168.1.194, server: www.web1.com, request: "GET /1.txt HTTP/1.1", host: "www.web1.com"

没有权限?于是找了不少资料,可以通过下面四步排查解决此问题。你可能只是其中之前配置有问题,不一定四个步骤都用上。


一、由于启动用户和nginx工作用户不一致所致

1.1查看nginx的启动用户,发现是nobody,而为是用root启动的

命令:ps aux | grep "nginx: worker process" | awk'{print $1}'



1.2将nginx.config的user改为和启动用户一致,

命令:vi conf/nginx.conf


二、缺少index.html或者index.php文件,就是配置文件中index index.html index.htm这行中的指定的文件。

1.    server {  

2.      listen       80;  

3.      server_name  localhost;  

4.      index  index.php index.html;  

5.      root  /data/www/;

6.    }

如果在/data/www/下面没有index.php,index.html的时候,直接文件,会报403 forbidden


三、权限问题,如果nginx没有web目录的操作权限,也会出现403错误。

解决办法:修改web目录的读写权限,或者是把nginx的启动用户改成目录的所属用户,重启Nginx即可解决

1.    chmod -777 /data

2.    chmod -777 /data/www/


四、SELinux设置为开启状态(enabled)的原因。

4.1、查看当前selinux的状态。

1.    /usr/sbin/sestatus

4.2、将SELINUX=enforcing 修改为 SELINUX=disabled 状态。

1.    vi /etc/selinux/config

2.     

3.    #SELINUX=enforcing

4.    SELINUX=disabled

4.3、重启生效。reboot

1.    reboot


<think> 我们正在解决Nginx报错:`/home/vue/cskh/index.html` is forbidden (13: Permission denied) 这个错误通常是由于Nginx进程对目标文件或目录没有足够的访问权限引起的。 我们将按照以下步骤进行排查和修复: 1. **确认Nginx运行用户**: 在Nginx配置文件中(通常是`/etc/nginx/nginx.conf`),查看`user`指令指定的用户,例如: user www-data; 2. **检查文件/目录的所有权和权限**: - 确保Nginx运行用户(如www-data)对文件`/home/vue/cskh/index.html`及其父目录有读取权限。 - 对于目录,需要执行权限(x)才能进入;对于文件,需要读取权限(r)。 3. **修复权限**: - 修改文件所有权:`chown -R www-data:www-data /home/vue/cskh` - 修改目录权限:`chmod -R 755 /home/vue/cskh` 4. **检查SELinux(如果启用)**: - 临时禁用:`setenforce 0`(测试是否权限问题) - 永久禁用:修改`/etc/selinux/config`中`SELINUX=disabled`,然后重启 - 或添加SELinux规则:`chcon -R -t httpd_sys_content_t /home/vue/cskh` 5. **检查父目录权限**: 确保Nginx用户对路径中的每个目录(/home, /home/vue, /home/vue/cskh)都有执行权限。 6. **检查文件路径是否正确**: 确认配置中指定的路径是否存在,特别是检查大小写和拼写。 7. **重启Nginx服务**: 修改后重启Nginx:`systemctl restart nginx` 注意:如果`/home`是用户主目录,可能默认权限较严格,需确保其他用户有执行权限(例如`chmod o+x /home/vue`)。 下面详细展开每一步: </think> ### 解决 Nginx 报错 `'/home/vue/cskh/index.html' is forbidden (13: Permission denied)` 的方法 该错误表明 Nginx 进程对指定文件或目录缺乏访问权限。以下是系统性的排查和解决方案: --- #### 1. **检查文件权限** ```bash # 查看文件权限 ls -l /home/vue/cskh/index.html # 查看目录权限 ls -ld /home/vue/cskh /home/vue /home ``` - **问题特征**: Nginx 运行用户(如 `www-data` 或 `nginx`)需要对以下路径有权限: - 文件:至少 `r--` (读取权限) - 目录:至少 `r-x` (读取+执行权限) - **解决方案**: ```bash # 授予文件读取权限 chmod 644 /home/vue/cskh/index.html # 授予目录读取+执行权限 chmod 755 /home/vue/cskh chmod 755 /home/vue chmod 755 /home # 如果 /home 权限严格 # 递归修复整个目录树 chmod -R 755 /home/vue/cskh ``` --- #### 2. **检查文件所有权** ```bash # 查看文件所有者 ls -l /home/vue/cskh/index.html # 查看Nginx进程用户 ps aux | grep nginx | grep -v grep ``` - **问题特征**: 文件所有者与 Nginx 进程用户不匹配(常见用户:`www-data`, `nginx`, `nobody`) - **解决方案**: ```bash # 将文件所有权赋予Nginx用户(以www-data为例) chown -R www-data:www-data /home/vue/cskh # 或添加到Nginx用户组 usermod -aG www-data vue # 假设vue是目录拥有者 ``` --- #### 3. **检查SELinux限制** ```bash # 查看SELinux状态 sestatus # 检查SELinux文件标签 ls -Z /home/vue/cskh/index.html ``` - **问题特征**: 输出显示 `unconfined_u:object_r:user_home_t:s0` 而非 Web 文件应有的 `httpd_sys_content_t` - **解决方案**: ```bash # 临时修复(重启失效) chcon -R -t httpd_sys_content_t /home/vue/cskh # 永久修复 semanage fcontext -a -t httpd_sys_content_t "/home/vue/cskh(/.*)?" restorecon -Rv /home/vue/cskh ``` --- #### 4. **验证父目录权限** ```bash # 检查路径中所有父目录权限 namei -l /home/vue/cskh/index.html ``` - **关键点**: 输出示例: ``` f: /home/vue/cskh/index.html dr-xr-xr-x root root / drwxr-xr-x root root home drwx------ vue vue vue ❌ 问题!缺少其他用户执行权限 drwxr-xr-x vue vue cskh -rw-r--r-- vue vue index.html ``` - **解决方案**: ```bash chmod o+x /home/vue # 添加其他用户执行权限 ``` --- #### 5. **检查Nginx配置** 检查 `/etc/nginx/nginx.conf` 或站点配置文件: ```nginx server { location / { root /home/vue/cskh; # 确保路径正确 index index.html; } # 禁用敏感操作保护(谨慎使用) disable_symlinks off; autoindex off; } ``` --- #### 6. **排查AppArmor限制(Ubuntu特有)** ```bash # 查看AppArmor日志 grep nginx /var/log/kern.log # 临时禁用测试 sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.nginx ``` - **解决方案**: 编辑 `/etc/apparmor.d/usr.sbin.nginx` 添加: ``` /home/vue/cskh/** r, /home/vue/cskh/ r, ``` --- #### 验证流程 ```bash # 1. 切换到Nginx用户测试读取 sudo -u www-data cat /home/vue/cskh/index.html # 2. 测试目录访问 sudo -u www-data ls /home/vue/cskh # 3. 重启Nginx systemctl restart nginx ``` > **注意**:修改权限后若仍报错,检查 Nginx 错误日志精确定位: > `tail -f /var/log/nginx/error.log` --- ### 常见原因总结 | 原因 | 检查命令 | 解决方案 | |---------------------|---------------------------|----------------------------| | 文件无读取权限 | `ls -l index.html` | `chmod 644 index.html` | | 目录无执行权限 | `ls -ld /home/vue/cskh` | `chmod 755 /home/vue/cskh` | | 父目录权限链断裂 | `namei -l index.html` | 修复每级目录执行权限 | | SELinux 标签错误 | `ls -Z index.html` | `chcon` 修改安全上下文 | | 用户所有权不匹配 | `ls -l ; ps aux` | `chown www-data:www-data` |
评论 42
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值