SO有很多文章都提到了这个错误代码:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream...
这可能意味着此错误消息或多或少无用。
消息告诉我们FastCGI处理程序不喜欢它出于某种原因发送的任何内容。问题是有时我们不知道原因是什么。
所以我重新陈述了这个问题 - 我们如何 调试 这个错误代码?
考虑一下我们有一个非常简单的网站,只有phpinfo.php文件的情况。另外,还有一个非常简单的nginx配置,如下所示:
server {
server_name testsite.local;
root /var/local/mysite/;
location / {
index index.html index.htm index.php;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass fastcgi_backend;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
我们怎样才能看到输出/日志究竟是什么fastcgi_params被发送到脚本?
我们如何看到实际的错误消息?在我的情况下,我使用的是php-fpm。它在日志中没有关于此错误的信息。日志不会为此错误附加任何行。 php-fpm有详细模式吗?
/var/log/php-fpm/error.log
/var/log/php-fpm/www-error.log
我试过在php-fpm.conf文件中设置它
log_level = notice
,这在php-fpm.d / www.conf文件中:
catch_workers_output = yes
答案 0 :(得分:51)
设置access.log条目:
access.log = /var/log/$pool.access.log
重启php-fpm服务。
尝试访问您的网页
cat /var/log/www.access.log,您将看到以下访问日志:
- - 10/Nov/2016:19:02:11 +0000 "GET /app.php" 404
- - 10/Nov/2016:19:02:37 +0000 "GET /app.php" 404
如果你看到没有正确的php文件名的“GET /”,那么这就是你的nginx conf问题。
如果你看到带有404的“GET /app.php”,则意味着nginx正确传递了脚本文件名,但php-fpm无法访问此文件(用户“php-fpm:php-fpm”don无法访问你的文件,这使我陷入困境3小时)
希望我的回答有所帮助。
答案 1 :(得分:1)
对我来说,这是一个权限问题,我不得不在php-fpm/www.conf
中更改用户和组
将值更改为您的用户名和_www组
user = aqib
group = _www
答案 2 :(得分:0)
检查根的位置以及它下面的文件,由于根路径TYPO ,我遇到了此错误。
答案 3 :(得分:0)
由于请求是由 php worker 处理的,你可以通过跟踪 php worker 来获取原因。
为了方便定位处理请求的worker,在php-fpm的conf文件中只设置一个worker。
pm.max_children = 1
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 1
使用 $ps -aef | grep -v grep | grep php
获取 php 工作 pid
root 28879 1 0 Apr12 ? 00:00:02 php-fpm: master process (/etc/php-fpm.conf)
www 28880 28879 0 Apr12 ? 00:00:24 php-fpm: pool www
然后用$ sudo strace -p 28880
跟踪工作过程,然后做请求,你会看到如下图的跟踪输出
strace: Process 28880 attached
accept(10,
{sa_family=AF_UNIX}, [112->2]) = 4
poll([{fd=4, events=POLLIN}], 1, 5000) = 1 ([{fd=4, revents=POLLIN}])
times({tms_utime=1388, tms_stime=1099, tms_cutime=0, tms_cstime=0}) = 1336709044
read(4, "\1\1\0\1\0\10\0\0", 8) = 8
read(4, "\0\1\0\0\0\0\0\0", 8) = 8
read(4, "\1\4\0\1\4U\3\0", 8) = 8
read(4, "\17DSCRIPT_FILENAME/data/HQ/SC_Edu"..., 1112) = 1112
read(4, "\1\4\0\1\0\0\0\0", 8) = 8
lstat("/data/www/public/st/mn/dst.php", 0x7ffce98d7170) = -1 ENOENT (No such file or directory)
stat("/data/www/public/st/mn", 0x7ffce98d9580) = -1 ENOENT (No such file or directory)
stat("/data/www/public/st", 0x7ffce98d9580) = -1 ENOENT (No such file or directory)
stat("/data/www/public", {st_mode=S_IFDIR|0774, st_size=4096, ...}) = 0
...
从跟踪输出中,它显示脚本文件 /data/www/public/st/mn/dst.php
not exit
答案 4 :(得分:-1)
对于MacOs用户,万一有人遇到我的情况:
我用:
启动了php服务sudo brew start php72
因为我使用“sudo”权限是不同的。我需要在没有sudo的情况下停止并启动php服务。
sudo brew stop php72
brew start php72
希望对某人有帮助。