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

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

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

你可能感兴趣的:(LINUX,计算机应用)