Nginx + php5-fpm =“找不到文件”

Nginx + php5-fpm =“找不到文件”

我在使用 nginx / fpm 设置网站时遇到了麻烦。页面显示“文件未找到”,并且以下内容出现在 nginx error.log 中:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

我对 nginx 和 fpm 都很陌生,这个错误消息对我来说毫无意义(甚至谷歌机器也没有帮助!)。有人能解释一下可能发生了什么吗?

答案1

您应该有一个location部分来处理与此类似的配置的 PHP 请求:

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include         fastcgi_params;
    }

(额外的try_files解决了安全漏洞这可能导致任意文件以 PHP 形式执行。)

此外,你应该在配置文件的部分root中定义,server不是部分location。这是最常见的nginx 配置错误

答案2

这是乘客安装的注意事项。

我刚刚通过 Passenger 从源代码安装了 nginx,这导致 php5-fpm 出现问题。默认的 nginx.conf 利用了 Michael Hampton 描述的问题。解决方案是删除 root 和 index 指令周围的块,因此:

location / {
    root html
    index index.html index.htm
}

变成:

root html
index index.html index.htm

此外,php 块设置不正确。请参阅 Michael Hamptons 的回答以了解正确的方法。

另外要注意的是,如果 php5-fpm 设置为使用套接字,则将 nginx.conf 中 php 块中的 fastcgi_pass 参数指向 /etc/php5/fpm/pool.d/www.conf 中的套接字设置。

答案3

我刚刚在新版本的 nginx 中遇到了这个问题。(配置取自旧版本)

我所要做的就是将include fastcgi_params;我的习惯放在上面SCRIPT_FILENAME,如下所示:

location @web {
        try_files $uri =404;
        include         fastcgi_params;
        fastcgi_pass    127.0.0.1:9000;
        fastcgi_param   SCRIPT_FILENAME  $document_root/index.php;
}

因为正在SCRIPT_FILENAME被覆盖。

答案4

sudo vim /etc/php-fpm.conf

关于第 149 行,更改 php 用户 && 用户组

我现在测试成功。

相关内容