linux中nginx报错:403 forbidden(13: Permission denied)

本文介绍了一位初学者在Linux环境下配置Nginx时遇到的403 Forbidden问题及解决过程。作者试图更改Nginx的根目录,但导致无法访问。经过排查,最终确定问题是由于SELinux的限制,并给出了两种解决方案。

以前很少使用linux,也少接触服务器,对于一些服务器的配置不太熟悉。如果需要使用服务器了,windows下就直接安装个集成的环境,mac就找朋友帮忙,帮搭个环境,能用了即可,基本没怎么学习过服务器配置的东西。

近段时间来,由于工作需要,把工作台搬到了linux,我本地的环境是在windows下的虚拟机中安装了centos 7.4,安装好了nginx后,一切正常使用。但是我安装 好后的nginx的网站根目录是在/usr/share/nginx/html下,感觉很不习惯,我想在根目录下面直接建立一个data目录专门放我的代码,然后把我的代码在这个目录下进行管理,或者在其他目录下创建一个目录,我创建好后,按照以前在windows上的习惯和mac上的习惯,我只要修改下nginx的配置文件就可以了,更改下server的root目录,如下:

server {
    listen       80;
    server_name  localhost;
    location / {
    root  /data/www;
        index  index.html index.htm index.php;
    }
}

我想的是只要改下root目录地址就可以了,结果悲剧了,改了这里后重启nginx,结果来了,提示403 forbidden了。很少使用linux,出了问题,一直以为只是权限问题,在网上查了下,也有说是权限问题的,我就查找我文件目录的权限以及默认的nginx根目录的权限进行对比,最后从根目录到具体文件的权限和nginx的默认目录以及文件的权限都一致了。到这里,我学会了centos中的权限操作,但是我的403 forbidden问题还是没哟解决。

最后想起来了nginx的日志,就开始翻看nginx的error.log,结果发现了相应的错误记录:4511#4511: *11 "/data/www/index.html" is forbidden (13: Permission denied), client: 192.168.152.1(以前没有重视过log,现在发现它真是个好东西),直接将错误信息粘贴到百度。

查询到引起nginx 403 forbidden通常有3种情况:缺少索引文件、权限问题、SELinux状态。

至于前2个,我这肯定是没有这个问题了,因为权限问题可以排除,我用新创建的目录和nginx默认的文件根目录进行了长时间的对比,从服务器的根目录一直到index.html文件为止权限都是完全相同;至于索引未见,可以从上面的配置文件中看到,已经添加了index.html、index.htm、index.php,我只配置静态的html文件,所以这些对我来说足够了,那么问题就只能出在SELinux上了。

具体原因就是服务器的SELinux设置为了开启(enabled)状态。

具体的解决办法如下:

1.临时的解决办法,不需要重启服务器

直接执行下面的命令:

setenforce 0

这种方法我没有尝试,不知道有效性。

2.修改配置文件/etc/selinux/config

将配置文件中的SELINUX=enforcing修改为SELINUX=disabled即可,修改完成后需要重启下机器。

这种方法应该是有效的,至少在我的机器中是通过该方式解决了问题。

<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` |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值