Nginx与PHP-FPM小结

© Young 2018-05-13 18:16
Welcome to My GitHub

Nginx关闭与重启

    -s signal     : send signal to a master process: stop, quit, reopen, reload

执行nginx -h查看帮助说明时可以看到执行nginx -s+对应命令可以关闭或者启动nginx;

然后我们实际操作时却发现并不是这么简单:

从上图可以很容易看到关闭之后再启动会报错,大致意思是nginx.pid这个文件不存在;

那么nginx.pid是个什么东西呢?

nginx.pid是系统用来存储nginx的主进程相关信息的文件(比如进程号);

    pid        logs/nginx.pid;


    events {
        use epoll;
        worker_connections  2048;
    }

可以通过nginx.conf文件中pid来指定;

启动之后就可以在指定的目录中看到该文件了;

但是关闭nginx之后会发现该文件消失了,然后reopenreload命令需要通过nginx.pid获取进程,如果不存在就会报错了。

    sudo nginx -c /usr/local/etc/nginx/nginx.conf

解决办法是通过nginx -c指定配置文件启动。

PHP-FPM关闭与重启

启动PHP-FPM很简单,只需要执行以下命令即可:

    sudo php-fpm

需要注意的是PHP-FPM默认使用的9000端口,如果该端口已经被其它程序使用,那么启动就会报错,这时需要关闭占用端口的程序;

    lsof -i :9000

先用lsof命令查出占用端口的PID,然后执行KILL命令即可;

除了上述方法外,我们还可以更改PHP-FPM的配置,来解决问题或者进行一些优化,配置文件一般名为php-fpm.conf

部分属性列举如下:

pidnginx类似均是主进程相关信息文件路径;
error_log错误日志;
listen监听端口。

关闭PHP-FPM则需要手动杀掉相关进程了;

    ps -ef | grep php-fpm

上述命令可以查询出所有的PHP-FPM进程,然后执行KILL命令即可。

session_start() failed: Permission denied

这种情况很有可能是写入session文件时有权限问题,因此首先我们需要找到session文件的保存路径;

php.ini文件中存在相关定义:

但是注意这里的定义被注释了,也就是不起作用;

那么还可以去PHP_FPMwww.conf文件中去找:

找到session文件的路径后就可以查看用户、用户组以及其它信息了;

需要注意的是session文件的用户和用户组需要和执行PHP-FPM的用户和用户组相同,否则就会出现上述错误。

查询PHP-FPM进程相关信息可以通过以下命令:

    ps -ef | grep php-fpm.conf

红框中的UID即为该进程用户,其中+号表示省略的意思。

更改session文件的用户和用户组则可以使用以下命令:

    chown -R -v newbieweb:newbieweb session

根据错误日志排查问题

在构建开发环境时我们会遇到各种各样的问题,处理这些的一般方法是分析日志文件;

比如:

Nginx的错误日志文件,定义在nginx.conf配置文件中;

Web服务的错误日志文件,定义在Web服务的相关配置信息中;

PHP-FPM的错误日志文件,定义在php-fpm.conf配置文件中;

PHP的错误日志文件,定义在php.ini文件中。

当然有时候你可能会发现明明有问题,但是这些错误日志文件里边并没有任何内容,遇到这种情况刚开始你可能会很慌,在网上胡乱搜一通,但是并不能解决问题;慢慢你就会冷静下来;想着是不是从头总结一下会比较好,之后东拼西凑凑出了一篇小总结,然而问题并没有解决;实在没办法只能去请教大神了,大神淡定的说了一句不应该啊!要不你重启下电脑试试?;两分钟之后问题荡然无存,此时我恍然大悟果然PHP是世界上最好的语言

发表评论

电子邮件地址不会被公开。 必填项已用*标注