1 php-fpm的pool
支持多个pool的运行网站:隔离站点资源和独立配置
增加一个pool:
[root@linux01 ~]# vim /usr/local/php/etc/php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www]
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
[alan]
listen = /tmp/alan-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
重新加载配置文件:
[root@linux01 etc]# /usr/local/php-fpm/sbin/php-fpm -t
[25-Nov-2018 12:05:38] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@linux01 ~]# /etc/init.d/php-fpm reload
Reload service php-fpm done
查看启动的pool:
[root@linux01 ~]# ps aux | grep php
将另外default站点使用php的alan-pool:(alan-pool与www-pool隔离的,互不影响)
[root@linux01 ~]# vim /usr/local/nginx/conf/vhost/default.conf
server
{
listen 80 default_server;
server_name aaa.com;
index index.html index.htm index.php;
root /data/wwwroot/default;
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/alan-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/data/wwwroot/default$fastcgi_script_name;
}
}
重新加载配置文件:
[root@linux01 ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@linux01 ~]# /usr/local/nginx/sbin/nginx -s reload
创建测试文件1.php:
[root@linux01 wwwroot]# vim /data/wwwroot/default/1.php
<?php
echo "hello world.";
?>
curl测试:
[root@linux01 ~]# curl -x 127.0.0.1:80 aaa.com/1.php
hello world.
php也支持类型nginx的vhost模式:
include = etc/php-fpm.d/*.conf
//支持类型nginx的vhost模式,可以独立配置文件
[root@linux01 ~]# vim /usr/local/php-fpm/etc/php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
include = etc/php-fpm.d/*.conf
创建目录php-fpm.d:
[root@linux01 ~]# mkdir /usr/local/php-fpm/etc/php-fpm.d/
添加www
和alan
的pool
的配置文件:
[root@linux01 ~]# cd /usr/local/php/etc/php-fpm.d/
[root@linux01 php-fpm.d]# vim www.conf //内容如下
[www]
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
[root@linux01 php-fpm.d]# vim alan.conf
[alan]
listen = /tmp/alan-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
重新加载配置文件:
[root@linux01 php-fpm.d]# /usr/local/php-fpm/sbin/php-fpm -t
[25-Nov-2018 12:28:07] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@linux01 php-fpm.d]# /etc/init.d/php-fpm reload
Reload service php-fpm done
查看php的pool:
[root@linux01 php-fpm.d]# ps aux | grep php
2 php-fpm慢执行日志
针对网站的访问慢,可以进行查找原因
修改配置文件:
[root@linux01 ~]# 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
重新加载配置文件;
[root@linux01 ~]# /usr/local/php-fpm/sbin/php-fpm -t
[25-Nov-2018 12:34:19] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@linux01 ~]# /etc/init.d/php-fpm reload
Reload service php-fpm done
查看慢执行日志:
[root@linux01 ~]# ls /usr/local/php-fpm/var/log/www-slow.log
/usr/local/php-fpm/var/log/www-slow.log
[root@linux01 ~]# vim /data/wwwroot/test.com/sleep.php//写入如下内容
<?php echo “test slow log”;sleep(2);echo “done”;?>
curl测试:
[root@linux01 ~]# curl -x 127.0.0.1:80 test.com/sleep.php
test slow logdone
查看慢执行日志:
[root@linux01 ~]# cat /usr/local/php-fpm/var/log/www-slow.log
[25-Nov-2018 12:38:19] [pool www] pid 5034
script_filename = /data/wwwroot/test.com/sleep.php
[0x00007f7aac5ac280] sleep() /data/wwwroot/test.com/sleep.php:1
提示了sleep.php文件里第一行有语句执行大于1秒
配置nginx的虚拟主机test.com.conf,把unix:/tmp/php-fcgi.sock
改为unix:/tmp/www.sock
如果出现语法错误:
vim /usr/local/php-fpm/etc/php-fpm.ini
打开display_errors = Off
display_errors = On
/etc/init.d/php-fpm reload
3 open_basedir
(在php.ini里有定义open_basedir,但是一个公司里有多个网站,就不能这样定义了,可以在Apache的虚拟主机vhost定义,或者在php-fpm/etc/php-fpm.d/
定义)
编辑php配置文件:
[root@linux01 ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下内容
[www]
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
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/
重新加载配置文件:
[25-Nov-2018 12:48:36] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@linux01 ~]# /etc/init.d/php-fpm reload
Reload service php-fpm done
curl测试:
[root@linux01 ~]# curl -x 127.0.0.1:80 test.com/1.php -I
HTTP/1.1 200 OK
Server: nginx/1.15.5
Date: Sun, 25 Nov 2018 04:54:14 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.32
返回状态码200
,成功访问
定义错误日志输出配置
[root@linux01 ~]# vim /usr/local/php-fpm/etc/php.ini
error_log = /usr/local/php-fpm/var/log/php_errors.log //定义错误日志路径
display_errors = On //在实际生产环境当中需要改为off,不直接在浏览器输出信息
error_reporting = E_ALL //测试使用E_ALL参数;生产环境中使用E_ALL & ~E_NOTICE
重启php服务:
[root@linux01 ~]# /etc/init.d/php-fpm restart
查看错误日志的路径:
[root@linux01 ~]# 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 = /usr/local/php-fpm/var/log/php_errors.log
;error_log = syslog
; OPcache error_log file name. Empty string assumes "stderr".
;opcache.error_log=
创建错误日志文件:
[root@linux01 ~]# touch /usr/local/php-fpm/var/log/php_errors.log
[root@linux01 ~]# chmod 777 /usr/local/php-fpm/var/log/php_errors.log
先修改一下配置文件:
[root@linux01 ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
[www]
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
request_slowlog_timeout = 1
slowlog = /usr/local/php-fpm/var/log/www-slow.log
php_admin_value[open_basedir]=/data/wwwroot/ttest.com:/tmp/ //ttest.com是不存在的目录
curl测试:
[root@linux01 ~]# curl -x 127.0.0.1:80 test.com/1.php -I
HTTP/1.1 404 Not Found
Server: nginx/1.15.5
Date: Sun, 25 Nov 2018 05:05:37 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.32
状态码返回404
,页面不存在
查看错误日志文件:
[root@linux01 ~]# cat /usr/local/php-fpm/var/log/php_errors.log
[25-Nov-2018 05:05:37 UTC] PHP Warning: Unknown: open_basedir restriction in effect. File(/data/wwwroot/test.com/1.php) is not within the allowed path(s): (/data/wwwroot/ttest.com:/tmp/) in Unknown on line 0
[25-Nov-2018 05:05:37 UTC] PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0
日志记录/data/wwwroot/ttest.com:/tmp/
这个路径有问题
修改配置文件:
[root@linux01 ~]# vim /usr/local/php-fpm/etc/php-fpm.d/www.conf
php_admin_value[open_basedir]=/data/wwwroot/ttest.com:/tmp/
修改为:
php_admin_value[open_basedir]=/data/wwwroot/test.com:/tmp/
[root@linux01 ~]# /usr/local/php-fpm/sbin/php-fpm -t
[25-Nov-2018 13:08:49] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@linux01 ~]# /etc/init.d/php-fpm reload
Reload service php-fpm done
curl测试:
[root@linux01 ~]# curl -x 127.0.0.1:80 test.com/1.php -I
HTTP/1.1 200 OK
Server: nginx/1.15.5
Date: Sun, 25 Nov 2018 05:10:16 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.32
状态码返回200
,成功访问
实验过程中出现的错误:
[root@worker1 etc]# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm [20-Oct-2018 18:38:02] NOTICE: PHP message: PHP Deprecated: Comments starting with '#' are deprecated in Unknown on line 1 in Unknown on line 0
[20-Oct-2018 18:38:02] NOTICE: PHP message: PHP Deprecated: Comments starting with '#' are deprecated in Unknown on line 1 in Unknown on line 0
原因是定义错误日志文件的路径错了:
error_log = /usr/log/php-fpm/var/log/php_errors.log
应该是
error_log = /usr/local/php-fpm/var/log/php_errors.log
4 php-fpm进程管理
pm = dynamic
//动态进程管理,也可以是static
pm.max_children = 50
//最大子进程数,ps aux可以查看
pm.start_servers = 20
//启动服务时会启动的进程数
pm.min_spare_servers = 5
//定义在空闲时段,子进程数的最少数量,如果达到这个数值时,php-fpm服务会自动派生新的子进程。
pm.max_spare_servers = 35
//定义在空闲时段,子进程数的最大值,如果高于这个数值就开始清理空闲的子进程。
pm.max_requests = 500
//定义一个子进程最多处理的请求数,也就是说在一个php-fpm的子进程最多可以处理这么多请求,当达到这个数值时,它会自动退出。
如果是设置为静态的时候,启动就是50个进程数