Nginx 访问 PHP 的 File not found 错误处理

对应在 nginx 的 error.log 里面错误信息为:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

原因

总的来说问题分两种情况:

  • 找不到文件
  • 没权限

解决

找不到文件

脚本路径设置不对,导致 php-fpm 找不到 SCRIPT_FILENAME 里执行的 php 文件

将
fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
改成
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

权限问题

  1. DAC 层面
    脚本所属用户和用户组不对或者脚本权限设置不对

  1. MAC 层面
    开启了 SELinux
    vim /etc/selinux/config 关闭 SELinux,如下图:

    getenforce 可查看 SELinux 当前状态
    setenforce 0 临时且立即生效来关闭SELinux(宽容模式)

有时在工作中遇到“没权限”问题,我们设置了权限(DAC层面)后还是提示“没权限”,比如很多人郁闷的说“我去,我都设置777了,还不行?”,那就大概率是因为开启了SELinux(MAC层面)

你可能感兴趣的:(Nginx 访问 PHP 的 File not found 错误处理)