一个Nginx服务器可能运行多个站点,那么php-fpm使用同一个pool资源,当一个站点资源耗尽以后,就有可能会影响全部站点都不能访问。每一个站点使用独立的pool,就可以避免这种状况发生。php
编辑php-fpm.conf配置文件:在[global]中增长一个pool [lgs.com]nginx
[lgs.com] //pool名 listen = /tmp/lgs.sock //每一个pool监听的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
验证:ps一下就能看到有两个php-fpm的pool:vim
php-fpm 6115 0.0 0.4 226640 4716 ? S 16:10 0:00 php-fpm: pool www php-fpm 6116 0.0 0.4 226640 4712 ? S 16:10 0:00 php-fpm: pool lgs.com
而后须要到nginx的虚拟主机配置文件里去配置php-fpm指定的pool服务器
location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/lgs.sock; //这里指定pool的sock fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name; //代理服务器的ip }
咱们还能够像nginx的虚拟主机配置文件同样,把php-fpm的pool独立出来单独一个配置文件:例如lgs.com的pool配置文件为lgs.confphp-fpm
先在php-fpm.conf增长include 配置行测试
include = etc/php-fpm.d/*.conf
再编辑www和lgs.com的pool配置文件分别为 www .conf 和 lgs.conf:网站
[www] //www .conf 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 [lgs.com] //lgs.conf listen = /tmp/lgs.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
Nginx有一个很好的特性就是慢执行日志。能够定义php执行超过指定时间,就会记录到慢执行日志中去,记录那个文件那行代码执行过程慢。spa
在pool的配置文件里配置代理
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf request_slowlog_timeout = 2 //php执行超过2秒 记录日志 slowlog = /usr/local/php-fpm/var/log/www-slow.log //存放日志的目录
验证测试:编辑一个php 的sleep脚本:unix
vim /data/wwwroot/test.com/sleep.php <?php echo "test slow log"; sleep(3); echo "done"; ?>
查看日志:
tail /usr/local/php-fpm/var/log/www-slow.log script_filename = /data/wwwroot/test.com/sleep.php [0x00007fe02657e3e0] sleep() /data/wwwroot/test.com/sleep.php:3
当服务器运行多个站点时,php-fpm能够使用open_basedir来指定每一个站点的目录范围,不能在php.ini中去只能指定一个目录。
vim /usr/local/php-fpm/etc/php-fpm.d/www.conf //在pool的配置文件中增长一行配置 php_aming_value[open_basedir]=/data/wwwroot/test.com:/tmp/ //指定该站点的网站目录
php-fpm的pool配置文件中的关于进程的配置行的说明
vim www.conf [www] listen = /tmp/php-fcgi.sock listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic //定义进程启动方式(dynamic表示动态,static表示静态) //只有pm设置为dynamic,下面的配置才生效 pm.max_children = 50 //最多启动的子进程数量 pm.start_servers = 20 //开始启动的子进程数量 pm.min_spare_servers = 5 //空闲时最少有几个子进程,到5个就会自动增长 pm.max_spare_servers = 35 //空闲时最多有几个子进程,到35个就会自定清理 pm.max_requests = 500 //一个子进程最多可接受多少个请求,到达500就会自动退出子进程 rlimit_files = 1024 //每一个子进程打开的文件句柄个数