一、fastcgi & php-fpm
1、静态网站
所见即所得,不会随着用户的交互而改变
nginx 服务器能处理的是静态元素 .html .jpg .mp4 .css
2、动态网站
(1) 页面具有自动更新和交互性,由用户生成的网站:填写的信息、发表的评论
(2) ngx_fastcgi_module
fastcgi:快速公共网关接口协议,nginx 处理动态请求的接口。nginx 通过ngx_fastcgi_modul 模块,链接 php-fpm处理动态请求。
3、php
(1) php-fpm:FastCGI Process Manager 快速通用网关进程管理器
php 通过 php-fpm 接收 nginx 的动态访问请求,将查询结果返回给 nginx。
(2) php-mysql
php 连接 mysql 的接口程序,php 通过 php-mysql 可以与MySQL数据库进行交互,实现数据的查询、更新等操作。
4、FastCGI + php-fpm 的运行原理
① Nginx 充当前端 Web 服务器,接收来自客户端的 HTTP 请求;
② 当 Nginx 收到动态内容的请求(通常是以 .php 扩展名的文件),它会查找与请求匹配的 FastCGI 处理程序,这里就是 php-fpm。Nginx 将请求的 HTTP 头和正文通过 FastCGI 接口发送给 php-fpm 进程;
③ php-fpm 接收到请求后,会执行 PHP 脚本并生成响应的 HTTP 头和正文,再将响应通过 FastCGI 发送回 Nginx,然后 Nginx 将响应返回给客户端。
二、php-fpm 初始化配置
1、php-fpm 相关配置文件
(1) 核心配置文件 /etc/php.ini
① date.timezone = PRC:在 php 中设置默认时区为中国
② open_basedir:open_basedir 是一个用于限制 PHP 脚本文件操作范围的指令,它的作用是限制PHP脚本只能访问指定的目录及其子目录。设置了 open_basedir 后,程序打开文件时会先检查文件的位置,当文件在指定目录之外,程序将拒绝打开。
(2) 全局配置文件 /etc/php-fpm.conf
① pid = /run/php-fpm/php-fpm.pid:设置pid文件的位置
PID文件是指进程标识文件(Process Identifier File),用于记录当前进程的进程号(PID)
② error_log = log/php-fpm.log:错误日志的的位置
③ log_level = notice:记录日志的等级
日志等级:
● Alert(必须立即处理): Alert 级别表示非常严重的问题,需要立即采取行动来解决,通常用于表示系统崩溃或无法继续运行的情况。
● Error(错误情况): Error 级别表示应用程序遇到了一个错误,但仍然可以继续执行。
● Warning(警告情况): Warning 级别表示潜在的问题或不太严重的错误,需要引起注意,但不会中断应用程序的正常运行。
● Notice(一般重要信息): Notice 级别表示一般重要的信息,用于跟踪应用程序的正常运行。
● Debug(调试信息): Debug 级别用于记录详细的调试信息,通常在开发和调试阶段启用。
④ daemonize = yes:
php-fpm 作为守护进程运行,php-fpm 将在后台一直运行,除非手动停止或重启该进程。
(3) 扩展配置文件 /etc/php-fpm.d/www.conf
① Start a new pool named 'www':php 开启的进程池命名为 www
每一个动态的请求都需要一个独立的程序去完成
② pm = dynamic:开启动态模式进程管理
● pm.start_servers = 5:最初开启的进程,意味着 php-fpm 启动时,将5个 php 工作进程,等待 Web 服务器发送请求。
● pm.min_spare_servers = 5:最小空闲进程数,用于指定 php-fpm 进程池中最小的空闲进程数量。当来访用户数量超过5时(start_servers),php 服务器会尽可能开更多的进程处理用户请求,同时保证至少有5个空闲进程,等待其他用户请求。
● pm.max_children = 50:这个配置选项定义了 php-fpm 进程池中可以同时存在的最大子进程数量,这个值设置为50时,意味着 php-fpm 进程池最多可以同时运行50个子进程来处理请求。如果有更多的请求到达,它们将排队等待处理,直到有可用的子进程。
这个配置项的值需要根据服务器性能和资源限制来进行调整(一般一个 php 请求占用内存10M - 40M)。如果设置得太小,可能会导致无法处理所有请求,从而影响网站的性能;如果设置得太大,可能会消耗过多的内存和CPU资源,导致服务器负载过高。
● pm.max_spare_servers = 35:指定 php-fpm 进程池中允许的最大空闲进程数量。当最多空闲进程数超过35时,立即杀死空闲进程,只保留35个。
min_spare_servers 应用于高负载场景 ;max_spare_servers 应用于低负载场景。
● pm.max_requests = 500:用于指定每个 php-fpm 子进程可以处理的最大请求数。当这个值设置为500时,表示每个子进程在处理了500个请求之后将被重新启动。
● user = nginx:设置用户为 nginx
● listen.allowed_clients = 127.0.0.1 ;listen = 127.0.0.1:9000
listen.allowed_clients:允许 fastcgi 进程访问的 ip,设置为any表示不限制 ip
listen = 127.0.0.1:9000 php-fpm 监听的 IP 地址和端口
融合部署可以将客户端和服务器的 ip 都设为 127.0.0.1。
分离部署:
2、php-fpm 初始化配置
生产环境下常用数值:
pm = dynamic
pm.start_servers = 32
pm.max_children = 512
pm.min_spare_servers = 32
pm.max_spare_servers = 64
pm.max_requests = 1500
配置后要重启 php-fpm
3、php-fpm 状态监控页面
(1) 简介:
php-fpm 状态监控页面用于查看 php-fpm 运行状况和性能统计信息,可以实时监控 php-fpm 进程池的活动。
(2) 启动 php 监控状态页面
① pm.status_path = /status
这条指令用于指定查看 php-fpm 进程池状态的 URL 路径,可以通过访问 /status 路径来查看 php-fpm 进程池的状态信息。
② nginx 配置页面转发
vim /etc/nginx/conf.d/default.con
location = /status {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
}
③ 访问监控页面