Nginx出现403 Forbidden

今天遇到了一个特别奇怪的问题,通过Nginx访问某个资源的时候,突然报403 Permission denied,但是整个服务都是正常的,排查了半天,没找到原因,查阅了一些资料,大致会出现以下四种可能性情况:

  1. 文件没有访问权限

    解决办法很简单,修改文件或文件夹的读写权限即可,或者使用目录的所属用户重新启动Nginx

    1
    chmod -R 777 /data/www/html
  2. 缺少index指定的文件

    1
    2
    3
    4
    5
    6
    server{
    listen 80;
    server_name localhost;
    index index.php index.html;
    root /data/www/html
    }

    如果在目录/data/www/html中没有index.phpindex.html文件,则会报403错误

  3. SELinux为开启状态

    SELinux是一组内核修改和用户空间工具,其提供了访问控制安全策略机制,包括了强制访问控制。

    • 查看SELinux状态

      1
      /usr/sbin/sestatus

      image-20200701221145777

    • 将SELINUX=enforcing 修改为 SELINUX=disabled 状态

      1
      vim /etc/selinux/config

      image-20200701221409168

    • 重启机器后生效

      1
      reboot now
  4. Nginx启动用户和工作用户不一致

    我遇到的就是这个情况,通过命令ps -ef | grep nginx查看nginx进程信息

    image-20200701221629953

    或者通过ps aux | grep "nginx: worker process" | awk '{print $1}'查看

    image-20200701221732763

    /etc/nginx/nginx.conf文件中将修改为何启动用户一样,然后重新启动nginx即可

    image-20200701221913666

    user nginx修改为user root,然后重启nginx进程。