linux学习lesson53



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/

添加wwwalanpool的配置文件:

[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个进程数

猜你喜欢

转载自blog.csdn.net/InfiniteIdea_Go/article/details/84641629