linux环境下nginx链接不上fpm
Posted ly912790844
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的关系:
Nginx下php解释器使用最多的就是fastcgi。一般情况nginx把php请求转发给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页面
以上是关于linux环境下nginx链接不上fpm的主要内容,如果未能解决你的问题,请参考以下文章
linux下安装tomcat启动后,在浏览器下输入http://localhost:8080。链接不上
【Linux】 ssh链接不上Linux是啥情况,怎么处理?