Thursday, June 1, 2017

nginx fastcgi sent in stderr: "primary script unknown"

今天,几乎是花了一天的时间来解决Centos6下面的Nginx和PHP-FPM不识别PHP的问题:

解决方案:针对Centos6, 其他的环境可以参考!

Thanks To:
https://serverfault.com/questions/406158/nginx-php5-fpm-file-not-found

https://serverfault.com/questions/517190/nginx-1-fastcgi-sent-in-stderr-primary-script-unknown


报错信息:
fastcgi sent in stderr: "primary script unknown"

详细信息:
2017/05/31 22:27:02 [error] 6142#0: *3 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: IP, server: avhades.com, request: "GET /utils/static/auth.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "avHades.com:19999” 


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


网上很多人都说是Nginx配置的问题,但是,我按照他们的方式配置了,但是还是不行:
说的最多的可能就是:

$document_root
fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;


网上建议的配置信息:
    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;
    }

我的配置信息:

server{
......

location ~ \.php$ {
    try_files $uri =404;
    #fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_pass    127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
         }

    ......

}

但是,我的问题不在这个配置文件,其实,文件的配置没有问题。

解决的灵感:
感谢这位小哥:

因为,我的代码路径的权限是 hades用户,然后,PHP-FPM默认的是 user = apache ;  group = apache; 这里的user 和 group 你需要修改成你的项目的路径的用户的名字(这里的权限,当然,你可以修改用户到一个组里面,这个如何处理有你决定)
下面是我的下修改:

找到PHP-FPM的配置文件:
Centos6

cd /etc/php-fpm.d
vim  www.conf


注意:
当你修改完之后,需要重启一下 PHP-FPM 和 Nginx

sudo service php-fpm restart
sudo service nginx restart


以上,已经基本解决完了,nginx  fastcgi sent in stderr: "primary script unknown" 这个问题了。 但是,涉及到权限。

当我,访问的PHP文件的时候。log日志出现了新的错误:
"/var/lib/nginx/tmp/fastcgi/1/00/0000000001" failed (13: Permission denied) while reading upstream



解决方案很简单:
只需要将 /var/lib/nginx/ 目录的用户的权限修改成你代码用户的权限,之前默认的权限是 nginx:nginx
 
我的修改的方式:
sudo chown hades:hades -R  /var/lib/nginx/ 


sudo service nginx restart 


OK , Now You can visit the php code!


No comments:

Post a Comment