修改PHP服务时使用IP和端口 为 使用 socket
fastcgi_pass 记录的就是php服务的IP和端口
如果没填对PHP服务的IP和端口,访问PHP的网站的时候就会显示502。
查看nginx的错误日志 tail /var/log/nginx/error.log 会有记录。
/usr/local/php-fpm/etc/php-fpm.conf 打开php服务主配置文件,大部分语句是 ; 注释的,最后一行有个include 指明补充配置目录。
在include路径下,有个一开始配置时候拷贝的www.conf ,最后生效的是这个配置文件。
编辑这个补充配置文件www.conf
[www]是我们自定义的池名,叫做pool name 。就是叫做 www 的这个php池
pool name会出现在查询进程里面
ps aux最左边显示的就是服务的用户名。
www.conf 里user和group是php-fpm服务启动的用户名和组名 ,
www.conf 里 listen 写的是php=fpm 服务监听的IP和端口
这个监听也可以改成是socket文件的形式,
(PHP配置文件里注释用 ;
nginx配置文件里注释用 # )
PHP也支持 -t 验错
PHP restart 重启
PHP reload 重载
重载以后可见socket文件存在了,是粉红色的,文件类型是 s
文件权限660 : rw- rw- - - -
修改nginx配置文件去使用socket文件
nginx配置文件是用 # 注释, PHP配置文件是用 ; 注释
保存后刷新网页仍然显示502,重新查看错误日志,出错原因是 permission denied 意思是没有权限。这种情况 文件没权限,服务没权限
vi /usr/local/php-fpm/etc/php-fpm.d/www.conf 修改 php补充配置文件 中的对于socket文件设置。
(可以在vi一般模式中用 /mode 快速搜索定位)
listen.mode 设置socket文件的监听权限
listen.owner 设置socket文件的监听属主
listen.group 设置socket文件的监听属组
socket的监听权限改为0666 ,实际上权限一直是4位数,但是一般第一位是目录的权限大部分都是0,所有之前我们写的都是3位。
restart 重启PHP刷新socket文件
可见重新生成以后的 www.socket 变了权限
这次刷新页面则可以显示了。
为什么listen.mode = 0660时候会显示失败?
现在php的 fastcgi_pass 已经是变成 www.socket文件 了,所以必须要有读写这个文件的权限。
socket文件权限是0660则表示:
0对应目录 6对应属主 6对应属主 0对应其他用户 。
而nginx需要用 php 这个服务,可以看见nginx的进程的用户名是nginx
socket文件现在有读写权限的是root用户和root组,并没有nginx,所以nginx被认为是属于在其他用户里,而其他用户改之前的权限是0 。
通过这个道理可以明白,
或者把www.conf 中的 listen.owner 和 listen.group 改成 nginx 也能实现读写权限
(虽然他们现在写的是php-fpm但是是被注释情况,实际上默认的是root)
修改后
ls查看 , www.socket 属主和属组,已变成了nginx
刷新网页,可以显示。