FastCGI & php-fpm

  1. 搞不清FastCgi与PHP-fpm之间是个什么样的关系
  2. PHP FastCGI (PHP-FPM) Example
  3. Nginx FastCGI的运行原理

wKiom1Zrxh6zrjyeAAConWz_aOc661.png

nginx是支持fastcgi的。然而我们需要下一个fastcgi进程管理器,启动它才能执行fastcgi程序。(这里有几个概念要搞清楚:nginx是nginx,fastcgi是fastcgi,前者支持后者,但是前者本身没有集成后者的功能。对于ngingx,我们要配置conf.nginx来设置如何支持fastcgi。而对于fastcgi,我们写的fastcgi程序需要一个调度者:fastcgi进程管理器。——纯属个人理解。)

  1. nginx+php运行原理(以及nginx和php-fpm)
  2. CGI与JSP联系与区别
  3. https://segmentfault.com/a/1190000008995700

PHP,Python,Perl的解释器都是以FastCGI模式加载到Web服务器. 但JSP代码被编译成Servlet并由Java虚拟机解释执行,这种编译操作仅在对JSP页面的第一次请求时发生。
JSP程序与CGI程序有着相似的功能,但和CGI程序相比,JSP程序有如下优势:

  • 性能更加优越,因为JSP可以直接在HTML网页中动态嵌入元素而不需要单独引用CGI文件。
  • 服务器调用的是已经编译好的JSP文件,而不像CGI/Perl那样必须先载入解释器和目标脚本。
  • JSP基于Java Servlets API,因此,JSP拥有各种强大的企业级Java API,包括JDBC,JNDI,EJB,JAXP等等。
  • JSP页面可以与处理业务逻辑的servlets一起使用,这种模式被Java servlet 模板引擎所支持。
  • 最后,JSP是Java EE不可或缺的一部分,是一个完整的企业级应用平台。这意味着JSP可以用最简单的方式来实现最复杂的应用。
  •   经过fastCGI优化之后,从效率上讲,PHP等脚本语言与java只差一点了,这点就是解释执行,所以php需要预编译,进行代码缓存之后,效率应该可以接近jsp。
  1. php运行原理如何理解
  2. 深入剖析 Web 服务器与 PHP 应用之间的通信机制 - 掌握 CGI 和 FastCGI 协议的运行原理
  3. CGI、FastCGI和PHP-FPM关系图解
  4. nginx、fastCGI、php-fpm关系梳理

总结:

  fastCGI是nginx和php之间的一个通信接口,该接口实际处理过程通过启动php-fpm进程来解析php脚本,即php-fpm相当于一个动态应用服务器, 从而实现nginx动态解析php。因此,如果nginx服务器需要支持php解析,需要在nginx.conf中增加php的配置:将php脚本转发到 fastCGI进程监听的IP地址和端口(php-fpm.conf中指定)。同时,php安装的时候,需要开启支持fastCGI选项,并且编译安装 php-fpm补丁/扩展,同时,需要启动php-fpm进程,才可以解析nginx通过fastCGI转发过来的php脚本

php.ini与php-fpm.conf配置文件的区别

php-fpm.conf是PHP-FPM特有的配置文件

php.ini是所以php模式中必须的配置文件

两者的区别是,php-fpm.conf是PHP-FPM进程管理器的配置文件,php.ini是PHP解析器的配置文件

有的PHP版本的配置文件路径中还有/fpm.d/www.conf配置文件, 这是php-fpm.conf配置的文件的扩展文件,可以打开php-fpm.conf文件查看 

 ; include=fpm.d/*.conf


我们可以使用php-fpm.conf配置慢日志

我们是可以开启慢日志功能的。

slowlog = /usr/local/var/log/php-fpm.log.slow
request_slowlog_timeout = 5s

当某个请求的时间超过了5秒,就会在慢日志中记录相应的记录,注意上面的时间5s,不能忽略了单位,相应的还有其他单位,m分,h时(当然,这这样做太扯淡了)

php-fpm慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长:

  1. [21-Nov-2016 10:30:38] [pool www] pid 11877
  2. script_filename = /var/www/ceshi/c.php
  3. [0xb70fb88c] sleep() /var/www/ceshi/c.php:2

通过日志,我们就可以知道第2行的sleep 函数有点问题,这样我们就能追踪问题了。

猜你喜欢

转载自blog.csdn.net/a19576/article/details/82466175