php-fpm的pool

监听多个sock

1、首先进入php.conf的存放路径

# cd /usr/local/php-fpm/etc

2、备份原来的php-fpm.conf文件

# cp php-fpm.conf  php-fpm.conf.bak

3、编辑php-fpm文件

其余的删除只留下这三行文件

//增加一个以下配置:

//include的这一行比较特殊,请注意等号后面的路径,必须写上etc目录,然后需要创建配置文件目录和子配置文件

#include = etc/php-fpm.d/*.conf

image.png

4、新建单独php-fpm.conf文件存放地址

# mkdir /usr/local/php-fpm/etc/php-fpm.d/

5、进入单独php-fpm.conf文件存放地

# cd /usr/local/php-fpm/etc/php-fpm.d/

新建一个test.conf的配置文件

# vi test.conf
[test]
listen = /tmp/test.sock
listen.mode=666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024

新建第二个www.conf配置文件

#vi www.conf
[www]
listen = /tmp/www.sock
listen.mode=666
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024

验证配置文件是否正确

# /usr/local/php-fpm/sbin/php-fpm -t
[01-May-2018 22:23:34] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful

重新启动服务

# /etc/init.d/php-fpm restart

验证模块是否监听

# ps aux |grep php-fpm.

image.png

php-fpm慢执行日志

[root@ahao-01 php-fpm.d]# vi www.conf   编辑配置文件

加上
request_slowlog_timeout = 1     设置执行超过几秒就记录日志
slowlog = 日志路径

接下来我们来模拟php慢执行

配置nginx的虚拟主机test.com.conf,把unix:/tmp/php-fcgi.sock改为unix:/tmp/www.sock

image.png

接着重启服务

/etc/init.d/nginxd restart

/etc/init.d/php-fpm restart

测试

vim /data/wwwroot/test.com/sleep.php
//写入如下内容
<?php echo “test slow log”;sleep(2);echo “done”;?>

curl测试

[root@ahao-01 logs]#  curl -x127.0.0.1:80 test.com/sleep.php -I 
HTTP/1.1 500 Internal Server Error
Server: nginx/1.12.1
Date: Tue, 01 May 2018 15:04:41 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30

如出现500报错可以开启php的报错看下开启具体如下

# vi /usr/local/php-fpm/etc/php.ini

找到display_error,改为On,然后访问有错误主就会有输出信息

display_errors = Off 改成display_errors = On  //显示php详细报错

# /etc/init.d/php-fpm restart  重启服务

这个时候我们看到如下详细报错,报错信息,因符号问题导致

[root@ahao-01 logs]#  curl -x127.0.0.1:80 test.com/sleep.php
<br /><b>Parse error</b>:  syntax error, unexpected 'slow' (T_STRING), expecting ',' or ';' in <b>
/data/wwwroot/test.com/sleep.php</b> on line <b>1</b><br />提示语法错误,改完之后我们来看下日志记录

# cat  /usr/local/php-fpm/var/log/www-slow.log

image.png

他会告诉你第三行执行慢

image.png

open_basedir

open_basedir的目的就是安全,只要在对应的Nginx虚拟主机配置文件中调用对应的pool,就可以使用open_basedir来物理隔离多个站点,从而达到安全目的。

1.配置虚拟主机文件

[root@ahao-01 php-fpm.d]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf增加如下配置内容:
php_admin_value
[open_basedir]=/data/wwwroot/test.com:/tmp/

测试

[root@ahao-01 vhost]# curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Tue, 01 May 2018 16:07:53 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30

增加错误路径

# vim /usr/local/php-fpm/etc/php.ini //增加错误日志路径及定义日志级别,如下图

增加一行

error_log=/usr/local/php-fpm/var/log/php-errors.log

image.png

注释掉上面那行,添加一行新的,写E_ALL

# /etc/init.d/php-fpm restart 重启服务

[root@ahao-01 vhost]# grep error_log /usr/local/php-fpm/etc/php.ini     //查看日志路径; 
server-specific log, STDERR, or a location specified by the error_log; Set maximum length of log_errors. In error_log information about the source is;error_log = php_errors.log;error_log = syslog
error_log=/usr/local/php-fpm/var/log/php-errors.log  //日志路径; 
OPcache error_log file name. Empty string assumes "stderr".;
opcache.error_log=

进入到www.conf配置文件里面把test.com改为ahao.com,再次测试,查看错误日志

# vi /usr/local/php-fpm/etc/php-fpm.d/ 
# touch /usr/local/php-fpm/var/log/php-errors.log  //手动建立一个日志文件
# chmod 777 /usr/local/php-fpm/var/log/php-errors.log  //更改成所有权限,防止不能写入日志
# /etc/init.d/php-fpm restart 重启服务
[root@ahao-01 vhost]#  curl -x127.0.0.1:80 test.com/3.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.12.1
Date: Tue, 01 May 2018 16:19:17 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.30

结果

[root@ahao-01 vhost]# cat /usr/local/php-fpm/var/log/php-errors.log
[01-May-2018 16:19:17 UTC] PHP Warning:  Unknown: open_basedir restriction in effect. File(/data/wwwroot/test.com/3.php) is not within the allowed path(s): (/data/wwwroot/ahao.com:/tmp/) in Unknown on line 0
[01-May-2018 16:19:17 UTC] PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0

//因为open_basedir限制的地址写错了,所有就会报错,访问出现404

php-fpm进程管理

pm = dynamic //定义php-fpm的子进程启动模式,dynamic为动态进程管理,一开始只启动少量的子进程,根据实际需求,动态地增加或者减少子进程,最多不会超过pm.max_children定义的数值。另外一种模式是static,这种模式下子进程数量由pm.max_children决定,一次性启动这么多,不会减少也不会增加。

pm.max_children = 50 //最大子进程数,ps aux可以查看

pm.start_servers = 20 //针对dynamic模式,它定义php-fpm服务在启动服务时产生的子进程服务时产生的子进程数量。

pm.min_spare_servers = 5 //针对dynamic模式,定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程。

pm.max_spare_servers = 35 //针对dynamic模式,定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。

pm.max_requests = 500 //针对dynamic模式,定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。