php-fpm的pool

blob.png

(在之前实验中我之定义了一个pool

blob.png

 /usr/loacl/php-fpm/etc/php-fpm.conf

)

Nginx中可以定义多个虚拟主机,也可以定义多个pool,每个pool可以监听一个端口,也可以监听一个socket。


因此在Nginx中如果有多个站点,则每个站点可以使用一个pool,这样就可以避免单独的一个站点耗尽php资源导致其他站点也访问有误。


定义多个pool:

cd /usr/local/php-fpm/etc/php-fpm.conf

添加多一个pool

blob.png

修改完配置文件后:

(1)测试配置文件是否正确:

 /usr/local/nginx/sbin/nginx -t

(2)加载一下配置文件:

 /usr/local/nginx/sbin/nginx -s reload

(/etc/init.d/php-fpm reload)

blob.png


怎么使用我们的pool

cd /usr/local/nginx/conf/vhost/

进入到虚拟主机配置文件,站点的配置文件:

针对

location ~ \.php$

    {

        include fastcgi_params;

        fastcgi_pass unix:/tmp/php-fcgi.sock;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /data/wwwroot/test.com$fastcgi_script_name;

    }


blob.png

修改完配置文件后:

(1)测试配置文件是否正确:

 /usr/local/nginx/sbin/nginx -t




把/usr/local/php-fpm/etc/php-fpm.conf 配置文件中配置的pool拆分到

单独的一个文件,只需在此配置文件中使用:include = etc/php-fpm.d/*.conf

再创建相应的目录把拆分的pool放置该目录下就可以include到配置文件中。

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


1.修改/usr/local/php-fpm/etc/php-fpm.conf 配置文件

blob.png


2.创建目录:mkdir /usr/local/php-fpm/etc/php-fpm.d/


3.创建相应pool文件

vim www.conf

[www]

#listen =127.0.0.1:9000 

listen = /tmp/php-fcgi.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

vim cansheng.conf

[cansheng.com]

#listen =127.0.0.1:9000 

listen = /tmp/cansheng.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



修改完配置文件后:

(1)测试配置文件是否正确:

 /usr/local/nginx/sbin/nginx -t

(2)加载一下配置文件:

 /usr/local/nginx/sbin/nginx -s reload

(/etc/init.d/php-fpm reload)




                 php-fpm慢执行日志

(很实用)

 php-fpm慢执行日志可以帮助我们快速地追踪到问题,清晰的了解到php脚本哪里执行时间长,它可以定位到具体的行。

实验针对www.conf这个pool文件操作:

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下内容

    request_slowlog_timeout = 1

    slowlog = /usr/local/php-fpm/var/log/www-slow.log

blob.png

修改完配置文件后:

(1)测试配置文件是否正确:

 /usr/local/nginx/sbin/nginx -t

(2)加载一下配置文件:

 /usr/local/nginx/sbin/nginx -s reload

(/etc/init.d/php-fpm reload)



查看慢行日志是否已经创建成功:

blob.png



测试:

(因为我们的www.conf这个pool文件监听的是 /tmp/php-fcgi.sock,

而/usr/local/nginx/conf/vhost/test.com.conf这个虚拟主机配置文件就是引用 /tmp/php-fcgi.sock文件,且是/data/wwwroot/test.com这个站点。


所以在/data/wwwroot/test.com站点下创建测试脚本:

vim sleep.php

添加内容

 <?php echo "test slow log";sleep(2);echo "done";?>

blob.png

 curl -x127.0.0.1:80 test.com/sleep.php

blob.png

(执行成功)

查看慢行日志是否记录信息:

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


(记录了慢行记录)

blob.png



                    open_basedir

(open_basedir的目的是安全。httpd可以针对每个虚拟主机设置一个

open_basedir;php-fpm针对每个包不同的pool设置不同的open_basedir)

open_basedir 的作用是限制php在指定的目录里活动。

nginx添加open_basedir

(针对www.conf的pool文件实验/usr/local/php-fpm/etc/php-fpm.d/www.conf)

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf 添加内容:

  php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/


blob.png

(定义open_basedir的路径一定要和引用该pool文件的虚拟主机配置文件的站点路劲一致)


修改完配置文件后:

(1)测试配置文件是否正确:

 /usr/local/nginx/sbin/nginx -t

(2)加载一下配置文件:

 /usr/local/nginx/sbin/nginx -s reload

(/etc/init.d/php-fpm reload)



测试:

curl -x127.0.0.1:80 test.com/test.php -I

blob.png


配置错误日志

1.vim /usr/local/php-fpm/etc/php.ini

搜索/display_errors

blob.png

2.搜索:

/log_errors =

blob.png


3.搜索:

error_log = 指定错误日志文件路径

blob.png

( /usr/local/php-fpm/var/log/php_errors.log)


4.搜索:

error_reporting  定义日志级别

blob.png


手动生成错误日志文件,并修改权限777

touch /usr/local/php-fpm/var/log/php_errors.log

chmod 777 /usr/local/php-fpm/var/log/php_errors.log


故意改错open_basedir 做测试:

blob.png

重新启动php-fpm服务:/etc/init.d/php-fpm restart

blob.png


测试:

 curl -x127.0.0.1:80 test.com/test.php -I

blob.png


查看错误日志是否有信息:

cat  /usr/local/php-fpm/var/log/php_errors.log

blob.png



                    php-fpm进程管理

blob.png

就是在pool定义的。

blob.png