微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux环境下nginx链接不上fpm

背景:

Nginx是通过源码安装,PHP环境和PHP-fpm是通过apt-get自动安装。

以下记录下出现的几个问题及方法

一、访问PHP文件无法识别

安装Nginx和fpm完成之后,通过在Nginx的容器中添加一个PHP的测试页面为test.PHP代码只写

<?PHP
PHPinfo();
?>

其中通过页面访问方式如图所示

解决办法:

找到Nginx安装路径,找到Nginx.conf,每个人的Nginx安装目录位置不一样,我的Nginx.conf在/usr/local/Nginx/conf/下面。将已经注释掉对PHP的解析记录启用

location ~ \.PHP$ {
root html;
fastcgi_pass http://127.0.0.1:9000;
fastcgi_index index.PHP;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

但是因为我安装PHP-fpm是认安装的,有进程,但是并无监听端口9000,此时如果Nginx要这样子设置,页面是会报502错误

所以正确方法最好是修改Nginx.conf为下面的代码,通过soker的方式进行访问。

 

location ~ \.PHP$ {


fastcgi_pass unix:/run/PHP/PHP7.0-fpm.sock;

fastcgi_index index.PHP;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

 

解释:fastcgi_pass unix的值并不是固定的,要根据自己的按照路径来。

需要与/etc/PHP/7.0/fpm/pool.d/www.conf  中listen的值保持一致。

 二、Nginx日志提示Permission denied

按照一的操作之后,本以为就算可以了,可是访问页面还是502错误。于是通过查看Nginx的日志提示下面的错误

2019/02/18 17:23:36 [crit] 1745#0: *1 connect() to unix:/run/PHP/PHP7.0-fpm.sock Failed (13: Permission denied) while connecting to upstream, client: 192.168.83.1, server: localhost, request: "GET /PHPinfo.PHP HTTP/1.1", upstream: "fastcgi://unix:/run/PHP/PHP7.0-fpm.sock:", host: "192.168.83.130:8090"

 

错误中可以看出Permission denied,意思是权限拒绝,意思是要访问run/PHP/PHP7.0-fpm.sock,但是权限不够被拒绝。

Nginx和fpm的关系:

NginxPHP解释器使用最多的就是fastcgi。一般情况NginxPHP请求转发给fastcgi管理进程处理,fastcgi管理进程选择cgi子进程进行处理,然后把处理结果返回给Nginx

在这个过程中就牵涉到两个用户一个Nginx运行的用户一个PHP-fpm运行的用户。如果访问的是一个静态文件的话,则只需要Nginx运行的用户文件具有读权限或者读写权限。

而如果访问的是一个PHP文件的话,则首先需要Nginx运行的用户文件有读取权限,读取到文件后发现是一个PHP文件,则转发给PHP-fpm,此时则需要PHP-fpm用户文件具有有读权限或者读写权限。

Nginx和fpm的之间的关系可以参考更详细的解释    https://www.cnblogs.com/zrp2013/p/4183546.html

查看思路:

1、用命令:ps -ef| grep Nginx查看Nginx拥有者

2、用命令;ps -ef| grep fpm查看PHP-fpm的拥有者

 

此时发现Nginx的拥有者为nobody,PHP-fpm的拥有者为www-data,如遇到了Nginx用户要访问PHP文件,则此时却是就没有了权限。

解决办法:将Nginx的拥有者和fpm的拥有者保持一致,并添加权限可以访问

1、Nginx的拥有者在/usr/local/Nginx/conf下的开头查看,认是注释掉,切用户为nobody

2、查看fpm的用户,在/etc/PHP/7.0/fpm/pool.d/www.conf查看

user和group的值即是用户fpm的值

 

 

 listen.owner的值认是注释的,也可以去掉注释,与上面保持一致、

 

 以上都是将Nginx和fpm的用户设置成了www-data

3、给www-data赋予访问run/PHP/PHP7.0-fpm.sock 权限

 

chmod 0660 /run/PHP/PHP7.0-fpm.sock

chown www-data:www-data /run/PHP/PHP7.0-fpm.sock

最后把Nginx和fpm都重启一遍,此时再访问,成功访问PHP页面

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐