我在使用 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 用户 && 用户组
我现在测试成功。