Nginx 虚拟主机 + PHP-FPM

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个PHPFastCGI管理器。它提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。日常运维中,我们主要将PHP-FPM 的配置文件分为主配置文件和 pool配置文件(每个pool配置文件通常对应一个Nginx虚拟主机)。

配置位置

只可在业务逻辑层上配置,主要使用nginx的ngx_http_fastcgi_module模块。七层代理层不配置。

PHP-FPM 主配置文件
主配置文件 php-fpm.conf,常用配置如下:

[global]
pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log
process_control_timeout = 0
# 动态方式下开启的php-fpm进程的最大数量
process.max = 2048
# 设置 fpm 在后台运行
daemonize = yes
# 设置进程可以打开的文件描述符数量
rlimit_files = 65535
# 设置core dump 的大小
rlimit_core = 67108864
# 设置FPM 的事件处理机制
events.mechanism = epoll
# emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过
emergency_restart_threshold个,php-fpm就会优雅重启
emergency_restart_threshold = 10
emergency_restart_interval = 5
# 加载pool 配置
include = /etc/fpm.d/*.conf

 PHP-FPM pool 配置文件

PHP-FPM pool 配置文件,常用配置如下(example test.xqwin.com.conf):

[test.xqwin.com]
user = www
group = www
listen = 127.0.0.1:9000
# 允许监听的客户端
listen.allowed_clients = 127.0.0.1
# 设置动态进程池
pm = dynamic
pm.max_children = 512
pm.start_servers = 32
pm.min_spare_servers = 32
pm.max_spare_servers = 64
# 设置每个进程可处理的请求数,当进程达到这个请求数量后会自动释放在重新生成新的进程。避免内存泄漏等情况
pm.max_requests = 1500
# FPM 的监控设置
pm.status_path = /xqwin_monitor_page
# PHP-FPM 的慢请求日志位置。$pool 这里为 test.xqwin.com
slowlog = /data0/www/logs/$pool-slow_log
# 设置请求时间达到多少位慢请求
request_slowlog_timeout = 3
# 终止请求超时时间。一个请求若处理大于20s ,则会自动kill 掉。避免进程堆积
request_terminate_timeout = 20
catch_workers_output = no
# 限制 FPM 允许解析的脚本扩展名. 这里不限制,FPM可以解析任何扩展名的文件
security.limit_extensions = ""

 虚拟主机结合PHP-FPM pool

PHP-FPM pool 配置

[test.xqwin.com]
user = www
group = www
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 512
pm.start_servers = 32
pm.min_spare_servers = 32
pm.max_spare_servers = 64
pm.max_requests = 1500
pm.status_path = /xqwin_monitor_page
slowlog = /data0/www/logs/$pool-slow_log
request_slowlog_timeout = 3
request_terminate_timeout = 20
catch_workers_output = no
security.limit_extensions = ""

虚拟主机配置

server {
    listen 80;
    server_name test.xqwin.com;
    root /data0/www/htdocs/test.xqwin.com;
    access_log /var/log/nginx/test.xqwin.com-acess.log;
    error_log /var/log/nginx/test.xqwin.com-error.log;
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|html)$ {
        expires 1d;
}

location / {
    # 确保 fastcgi.conf 中存在 SCRIPT_FILENAME 配置
    # fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi.conf;
    # 使用了PHP-FPM 9000 端口的POOL 配置。
    fastcgi_pass 127.0.0.1:9000;
    }
}

测试

在test.xqwin.com 的虚拟主机root 目录中创建一个today.php 的脚本。

# cat today.php
<?php
echo "today is " . date("Y-m-d") . "\n";
?>
# curl http://127.0.0.1/today.php -H "HOST: test.xqwin.com"
pool: test.xqwin.com
process manager: dynamic
start time: 02/Jun/2018:08:59:15 -0400
start since: 129
accepted conn: 6
listen queue: 0
max listen queue: 0
listen queue len: 128
idle processes: 31
active processes: 1
total processes: 32
max active processes: 1
max children reached: 0
slow requests: 0

 注释如下

# PHP-FPM 的POOL名字
pool: test.xqwin.com
# 这个POOL中进程管理方式,这里是动态管理方式。相反还有静态管理方式。
process manager: dynamic
# POOL从什么时间开始启动
start time: 02/Jun/2018:08:59:15 -0400
# POOL 从启动到现在已经存活了多久
start since: 129
# 当前POOL接受的请求数
accepted conn: 6
# 请求等待队列当前长度,如果这个值不为0,那么说明你的请求处理已经开始有挤压了,应该注意系统状态。
listen queue: 0
# 从启动到现在,请求等待队列历史最大长度
max listen queue: 0
# 请求队列长度大小
listen queue len: 128
# 目前空闲进程数
idle processes: 31
# 目前工作进程数
active processes: 1
# 目前总进程数
total processes: 32
# 从启动到现在,最大的活跃进程数量
max active processes: 1
# 达到进程最大数量限制的次数,如果这个数量不为0,那说明设置的最大进程数量(pm.max_children)太小了,或者进
程挤压了。
max children reached: 0
# 慢请求的数量
slow requests: 0

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值