背景:
Nginx是通过源码安装,PHP环境和PHP-fpm是通过apt-get自动安装。
以下记录下出现的几个问题及方法
安装Nginx和fpm完成之后,通过在Nginx的容器中添加一个PHP的测试页面为test.PHP,代码只写
其中通过页面访问方式如图所示
解决办法:
找到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的值保持一致。
按照一的操作之后,本以为就算可以了,可是访问页面还是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页面
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。