php-fpm配置
和LAMP不同的是,在LNMP架构中,php-fpm作为独立的一个服务存在。既然是独立的服务,那么它必然有自己的配置文件。php-fpm的配置文件为/usr/local/php-fpm/etc/php-fpm.conf,它同样也支持include语句,类似于nginx.conf里面的include。
php-fpm的pool
Nginx可以配置多个虚拟主机,php-fpm同样也支持配置多个pool,每一个pool可以监听一个端口,也可以监听一个socket
www pool,可以继续写其他pool
添加一个aming.com pool,并检查有没有语法错误
[root@lizhipenglinux01 etc]# /usr/local/php-fpm/sbin/php-fpm -t
[17-Mar-2018 19:37:34] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful 没有语法错误,reload一下
[root@lizhipenglinux01 etc]# /etc/init.d/php-fpm reload
Reload service php-fpm done
[root@lizhipenglinux01 etc]# ps aux |grep php-fpm
有两个不同的池子。下面该如何使用它们
下面对php-fpm.conf做一个更改
添加第一个框里面的内容,剪切掉2,3框里面的内容,分别编写aming.conf和www.conf
这样就有两个子配置文件,也就是说有两个pool了,第一个pool监听了/tmp/www.sock,第二个pool监听了/tmp/aming.sock。这样,就可以在Nginx不同的虚拟主机中调用不同的pool,从而达到相互隔离的目的,两个pool互不影响。下面来验证配置是否有问题:
[root@lizhipenglinux01 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[17-Mar-2018 20:42:06] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@lizhipenglinux01 php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
[root@lizhipenglinux01 php-fpm.d]# ps aux|grep php-fpm
通过php-fpm的慢执行日志,可以非常清晰地了解到PHP的脚本哪里执行时间长,它可以定位到具体的行
第三行故意休眠2秒
php脚本有问题,打开开关
[root@lizhipenglinux01 php-fpm.d]# vi /usr/local/php-fpm/etc/php.ini
open_basedir的目的就是安全。httpd可以针对每个虚拟主机设置一个open_basedir,php-fpm同样也可以针对不同的pool设置不同的open_basedir。
第一框是test.com在使用,但是第二框却定义的aming.com,有出入,会报错。这只是验证一下
改回正确的路径
[root@lizhipenglinux01 php-fpm.d]# vi /usr/local/php-fpm/etc/php.ini 修改的目的是定义错误日志
这样错误信息不会再浏览器上显示,要把错误信息记录在服务器上的某一个文件里
日志级别定义成all所有,注释掉框里面的。在把test.com改错,改成aming.com
查看错误日志定义的地址
[root@lizhipenglinux01 php-fpm.d]# ls /usr/local/php-fpm/var/log/php_errors.log 没有这个路径或者文件,下面去生成
ls: 无法访问/usr/local/php-fpm/var/log/php_errors.log: 没有那个文件或目录
[root@lizhipenglinux01 php-fpm.d]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
404,然后去查看错误日志信息
第一行,定义php-fpm的子进程启动模式,dynamic为动态模式;一开始只启动少量的子进程,根据实际需求,动态地增加或者减少子进程,最多不会超过pm.max_children定义的数值。另外一种模式为static,这种模式下子进程数量有pm.max_children决定,一次性启动这么多,不会减少也不会增加。
pm.start_servers针对dynamic模式,它定义php-fpm服务在启动服务时产生的子进程数量。pm.min_spare_servers针对dynamic模式,它定义在空闲时段子进程数的最少数量,如果达到这个数量时,php-fpm服务会自动派生新的子进程。pm.max_spare_servers也是针对dynamic模式的它定义在空闲时段子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。pm_max_request针对dynamic模式,它定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程中最多可以处理这么多请求,当达到这个数值时,它会自动退出。
分号注释,改成static模式,一下子开启50个
dynamic模式,默认20个