加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

一文带你深入详解PHP-FMP

发布时间:2022-07-16 15:45:50 所属栏目:PHP教程 来源:互联网
导读:什么是php-fpm 在了解php-fpm之前,请大家先思考一个问题,一个用户发起了一个web(niginx服务器)请求,在php代码里面,那么我们怎么样才可以通过 $_POST,$_GET,$_SERVER获取一些请求信息呢?我们应该参照什么格式去组装数据呢? 好了,既然有了CGI,那么针对
  什么是php-fpm
  在了解php-fpm之前,请大家先思考一个问题,一个用户发起了一个web(niginx服务器)请求,在php代码里面,那么我们怎么样才可以通过 $_POST,$_GET,$_SERVER获取一些请求信息呢?我们应该参照什么格式去组装数据呢?
 
  好了,既然有了CGI,那么针对这些解释性语言,比如php phython,都要根据自己的语言做一个适配吧。那么php官方就弄出来了PHP-CGI,php定制版的CGI。
但是随着使用,大家发现了PHP-CGI的问题
 
  1.修改php.ini 后必须重启PHP-CGI才可以生效,而不能实现平滑重启 2.直接干掉PHP-CGI,php就不能运行了,这显然是不能接受的 3.这玩意不会自己管理进程,它只能解析请求,返回结果
 
  那么FastCGI都已经到来了,php的FastCGI还会远吗,当然不会,到 2004年一个叫 Andrei Nigmatulin的屌丝发明了PHP-FPM,PHP-FMP 全名叫做PHP-FASTCGI Process Manager,说白了就是php定制版的FastCGI(这里强调一下,不管是PHP-CGI 还是 PHP-FPM都是为了实现CGI协议,而不是一种新的协议),其实有一句话刚才我没说,网上很多人说PHP-CGI 就是 php管理FAST-CGI的一种程序,那你现在知道了PHP-FMP 全名叫做PHP-FASTCGI Process Manager之后,你可以理直气壮的跟他们说no,并给他们普及一下这个知识点了。
   2.png
 
  3.png
 
  接收来自服务器的请求
  work进度 看名字就知道了,就是真正的打工阶级,代码真正执行的地方
  4.png
 
  再来看看php-fmp和nignx是怎么通信的
  以socker通信为栗子,nginx的conf文件里面,可以看到下面这段信息
 
 
  location ~ [^/].php(/|$)
 
  {
 
      try_files $uri =404;
 
      fastcgi_pass  unix:/tmp/php-cgi.sock;
 
      fastcgi_index index.php;
 
      include fastcgi.conf;
 
  fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
 
  fastcgi_param  QUERY_STRING       $query_string;
 
  fastcgi_param  REQUEST_METHOD     $request_method;
 
  fastcgi_param  CONTENT_TYPE       $content_type;
 
  fastcgi_param  CONTENT_LENGTH     $content_length;
 
 
  
 
  fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
 
  fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
 
  
 
  fastcgi_param  REMOTE_ADDR        $remote_addr;
 
  fastcgi_param  REMOTE_PORT        $remote_port;
 
  fastcgi_param  SERVER_ADDR        $server_addr;
 
  fastcgi_param  SERVER_PORT        $server_port;
 
  fastcgi_param  SERVER_NAME        $server_name;
 
  
 
  # PHP only, required if PHP was built with --enable-force-cgi-redirect
 
  fastcgi_param  REDIRECT_STATUS    200;
 
  fastcgi_param PHP_ADMIN_VALUE "open_basedir=NULL";
 
  我们看到了一些熟悉的,比如REMOTE_ADDR,REQUEST_URI,现在你应该明白了,我们通过$_SERVER获取到的信息就是这个配置文件里面指定的
 
  [www]
 
  listen = /tmp/php-cgi.sock
 
  listen.backlog = -1
 
  listen.allowed_clients = 127.0.0.1
 
  listen.owner = www
 
  listen.group = www
 
  listen.mode = 0666
 
  user = www
 
  group = www
 
  # 如何控制子进程,选项有static和dynamic
 
  #区别:
 
  #如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开#启设置数量的php-fpm进程。
 
  #如果dm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效。
 
  pm = dynamic
 
  # 静态方式下开启的php-fpm进程数量
 
  pm.max_children = 20
 
  # 动态方式下的起始php-fpm进程数量
 
  pm.start_servers = 10
 
  # 动态方式下的最小php-fpm进程数
 
  pm.min_spare_servers = 10
 
  # 动态方式下的最大php-fpm进程数量
 
  pm.max_spare_servers = 20
 
  # php-fpm子进程能处理的最大请求数
 
  pm.max_requests = 1024
 
  pm.process_idle_timeout = 10s
 
  request_terminate_timeout = 100
 
  request_slowlog_timeout = 0
 
  slowlog = var/log/slow.log

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读