1.什么什么叫做PHP-FPM呢?
FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。 它的功能包括:
支持平滑停止/启动的高级进程管理功能 可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini
配置文件(可取代 safe_mode 的设置); stdout 和 stderr 日志记录; 在发生意外情况的时候能够重新启动并缓存被破坏的
opcode; 文件上传优化支持; “慢日志” - 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以使用
ptrace或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢; fastcgi_finish_request() -
特殊功能:用于在请求完成和刷新数据后,继续在后台执行耗时的工作(录入视频转换、统计处理等); 动态/静态子进程产生; 基本 SAPI
运行状态信息(类似Apache的 mod_status); 基于 php.ini 的配置文件。
我们传统的PHP开发都是以FPM多进程工作模式进行运行。
工作流程:
通常一个请求会转发到Nginx,把Nginx会把这个请求转发到FMP监听的9000端口,FMP的Master进程接收到请求会把接收到的请求交给Master进程下面的woker进程进行处理,进程处理完把处理结果返回给Nginx,Nginx把处理结果返回给客户端。FPM的一个worker进程只能处理一个请求,这也是FMP性能不好的原因。
Nginx配置
server {
listen 80;
server_name zq.com;
root /home/zq2020/php;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
查看9000端口,PHP-FPM是否正常工作
netstat -tln | grep 9000
查找php-fpm所在路径
启动php-fpm
./usr/local/php/sbin/php-fpm
启动失败,解决方案
/usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
解决办法:
cd /usr/local/php/etc/php-fpm.d
sudo cp www.conf.default www.conf
启动php-fpm
php-fpm在正常工作
文件找不到
nginx配置做出调整
user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
server_name zq.com;
root /home/zq2020/php;
index index.php index.html index.htm;
location / {
try_files $uri $uri/index.php?$query_string;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/zq2020/php$fastcgi_script_name;
include fastcgi_params;
}
}
}
问题解决,访问成功