这里是普通文章模块栏目内容页
dnmp环境下php-fpm以root权限执行

一、问题描述

最近在做连接二维码扫描机心跳连接时,发现二维码扫描机有固定IP,无固定端口,服务器无法主动发送心跳。。。想了很多办法搞定连接,试过swoole,wokerman,都觉得没必要,最终使用exec()方法模拟ping连接最有效,本地调试好放服务器上发现无法执行,怀疑是无权限,一番找资料后,美滋滋的把一切改好,问题来了,访问各种502.。。。

二、排错

一脸黑线后,开始排错。环境是dnmp,遵循docker初衷,各个服务分离,每个服务单独运行在独立容器内。进入容器内查找问题,发现命令不全,无法使用sudo命令,这给排错带来了不小的麻烦,只能修改配置文件。修改之前,/etc/local/nginx.conf中user是nginx,改回nginx后依旧报错,继续修改php-fpm,将user和group修改回apache后,再次访问,网页正常访问,exec()该访问不通还是不通。

nginx报错如下

2019/04/14 18:22:22 [crit] 24#24: *585 SSL_do_handshake() failed (SSL: error:1417D0A0:SSL routines:tls_process_client_hello:length too short) while SSL handshaking, client: 108.178.16.154, server: 0.0.0.0:443

php报错如下

ERROR: [pool www] please specify user and group other than root
ERROR: FPM initialization failed

在nginx和php无法定位错误的情况下,查看进程

ps -le | grep php-fpm

发现所有进程都是以root进程在运行,并无错误。后来查阅资料发现,

 

 

pool是影响这个问题的关键,解决办法是

php-fpm -R

输入命令,重启容器,everything be ok!!!!