欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-29 22:26:40
...

以前很少使用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即可,修改完成后需要重启下机器。

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

上一篇: kvm

下一篇: KVM基础命令