跳至正文

Nginx报错汇总

内容目录

Nginx报错汇总

该文档记录一下nginx使用过程中遇到报错,善用nginx的日志,其中记录了一些比较关键的信息可以帮助定位错误,若修改配置后请重启nginx或重新加载nginx配置文件以使其生效

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost"

现象:

访问页面时,可能显示“file not found”

原因:

可能是未能正确地找到php文件

解决方法:

尝试前往Nginx配置文件查看传递给php解释器的规则,确认是否正确的传递php文件

可以尝试从以下几方面解决:

  • 确认传递给php解释下的root路径

  • 尝试修改fastcgi_param配置为如下,$document_root为当前root路径下值

    • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

kevent() reported that connect() failed (61: Connection refused)

现象:

访问页面时,可能显示“file not found”

原因:

可能是php-fpm未启动,文件未能传送给php-fpm编译

解决方法:

启动php-fpm

Nginx 403 Forbidden

现象:

访问页面时,可能显示“403 FORBIDDEN”

原因:

可能的原因如下

  • nginx启动用户与工作用户不一致
  • 在nginx配置文件中未指定默认索引文件index
  • nginx没有对文件操作权限

解决方法:

  1. 查看nginx配置文件,修改user选项,e.g.
user root;
  1. 确认nginx配置文件中index是否设置正确,e.g.

    server {  
    listen       8080;  
    server_name  localhost;
    index  index.html;
    root  /usr/local/nginx/www/html/;
    }
  2. 确认nginx是否具有对应权限,若无需要赋予权限,e.g.

    chmod -R 777 /usr/local/nginx/www/html/

    除此以外也可能是linux下权限管理机制SELINUX阻拦,可以修改配置禁用SELINUX,e.g.

    vi /etc/selinux/config #请自行确认SELINUX配置所在目录,一般为这个目录
    
    SELINUX=disabled #修改该项为disabled
    
    reboot #重启使其生效

    也可通过下列方式关闭selinux,但可能重启时仍开启,可以修改配置永久禁用selinux

    sestatus #可以通过此命令查看selinus状态
    setenforce 0 #可以通关此命令关闭selinus

nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges

现象:

尝试对nginx配置作相关操作(重新加载配置,关闭,重启nginx等),提示上述信息

原因:

启动nginx用户不具有超级用户权限

解决方法:

以最高权限运行nginx,可执行以下命令:

sudo nginx
  • 此为临时解决方案,后续重新启动nginx可能仍不具有较高权限
  • 一些解决方案,提出前往nginx的sbin文件夹下在nginx程序目录下亦sudo启动,暂未考证其正确性

长期解决方案可能如下-

chown root:root nginx
chmod 755 nginx
chmod u+s nginx

chown root.root nginx将文件或目录 nginx 的所有者修改为 root,并将所属的组也修改为 root。所有者,归属者可自行修改

chmod 755 nginx设置文件或目录 nginx 的权限。表示所有者具有读 (r)、写 (w) 和执行 (x) 权限,而所属组和其他用户仅具有读和执行权限,没有写权限。具体权限设置可自行修改

chmod u+s nginx设置了文件或目录 nginx 的 SUID (Set User ID) 权限位。当一个文件被设置了 SUID 权限,当任何用户执行该文件时,它都会以文件所有者的身份来执行。在这种情况下,当用户执行 nginx 时,它将以 root 用户的身份来执行,即使执行者不是 root 用户也是如此。