apache默认是用自带的mod_php模块运行php,现在我们介绍使用fastcgi来执行php脚本。...模块装载代码: LoadModule fastcgi_module modules/mod_fastcgi.so 安装php5.2 wget http://us2.php.net/get/php-5.2.17.../configure –prefix=/usr/local/php –enable-fastcgi –disable-cli make && make install 配置apache支持php 编辑httpd.conf...文件,加入如下代码: ### fastcgi ### ScriptAlias /fcgi-bin/ “/usr/local/php/bin/” AddHandler php-fastcgi .php Action...php-fastcgi /fcgi-bin/php-cgi AddType application/x-httpd-php .php AddHandler fcgid-script. .php .fcgi
讲到PHP开发,就一定会提到fastcgi和php-fpm,这两个东西对PHP的性能有着至关重要的作用。...mod_fastcgi模式 PHP的sapi的另一种方式就是提供cgi模式,现在cgi已经被fastcgi取代。...后者是将fastcgi作为中间过程,PHP和Web服务器只通过fastcgi来完成请求与响应。...fastcgi是一种与平台无关,与语言无关的接口实现,只需要不同语言按照规定方式实现即可完成与Web服务器的通信。上图所示的php-cgi就是PHP自带的fastcgi管理器。...网上看到的php-cgi的问题主要有两点: 1.php-cgi变更php.ini陪之后需要重启php-cgi才能使新的php.ini生效,不能平滑重启。
这里有个缺点:客户端浏览器的请求多了,apache创建的子进程会特别多,并且每次都重新读取 php.ini 配置文件。 FastCgi就是为了解决cgi的问题,制定的协议。...这个 FastCgi协议程序 就是PHP-fpm,它就是 FastCgi协议 的具体实现。 cgi和FastCgi是什么 它们都是协议,FastCgi解决了cgi的一些缺点。...fastcgi_index index.php; fastcgi_split_path_info ^((?...PHP-fpm 这个就是 FastCgi进程管理器 ,它的概念并不模糊!它启动服务监听端口,通过nginx反向代理给它,并且它自己内置php解释器。...参考 搞不清FastCgi与PHP-fpm之间是个什么样的关系 PHP 连接方式介绍以及如何攻击 PHP-FPM php-cgi和php-fpm有什么关系?
PHP-FPM && PHP-CGI && FASTCGI CGI 早期的Web服务器,只能响应浏览器发来的HTTP静态资源的请求,并将存储在服务器中的静态资源返回给浏览器。...但环境变量的作用不仅是填充_SERVER数组,也是告诉fpm:“我要执行哪个PHP文件”。 PHP-FPM拿到fastcgi的数据包后,进行解析,得到上述这些环境变量。...PHP-CGI PHP-CGI和上面的PHP-FPM差不多,不过不同在于PHP-FPM解析的是fastcgi协议而PHP-CGI解析的是cgi协议 一些PHP-FPM漏洞 还有一些PHP-FPM的漏洞在...WHOAMI大佬的文章浅入深出 Fastcgi 协议分析与 PHP-FPM 攻击方法都有讲到使用方法,以下是文章中收集的内容目录 PHP-FPM 未授权访问漏洞 SSRF 中对 FPM/FastCGI.../浅入深出-Fastcgi-协议分析与-PHP-FPM-攻击方法/
网上对于FastCGI与mod_php的知识比较杂乱而不全面,故在此整理一下,以便入门学习者查阅方便。...mod_fastcgi模式 我们先看PHP-FPM官网的说明: PHP-FPM - A simple and robust FastCGI Process Manager for PHP PHP-FPM...PHP-FPM是一个PHP的FastCGI进程管理器,解释的非常简单。这说明PHP-FPM是辅助mod_fastcgi模式进行工作的,然而FastCGI又是个什么东西?管理着什么进程?...当FastCGI子进程关闭连接时,请求便告处理完成,FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接,在CGI模式中,php-cgi在此便已经退出...PHP-FPM PHP-FPM就是针对于PHP的FastCGI的一种实现,他负责管理一个进程池,来处理来自Web服务器的请求。
可以同时处理多个请求 长期占用内存 php-cgi php官方自带的FastCGI 进程管理器 php.ini修改之后,必须kill掉php-cgi再启动php.ini 才生效。...不可以平滑的重启 内存不能动态分配 php-fpm 非官方fastCgi进程管理器,后来php5.4开始,被官方收录了,编译php的时候只需要–enable-fpm 就可以开启php-fpm 可以平滑重启...都打不开链接了 我的理解是,web服务器启动,自动启动fastCgi模块 并且长期驻留在内存里, 用户访问 fastCgi程序,开启的fastCgi模块 ,直接处理请求,并返回结果. php-cgi 启动...worker的进程数量,用户访问php文件, php-fpm 处理请求,返回结果 关系 cgi是最初始的网关接口,随着互联网的发展,大量的请求,衍生而来很多的问题,fastCgi开始出现了,取代了cgi...技术 php是动态脚本语言 , php5.3以前 用php-cgi 来实现 fastCgi web请求,php 5.4开始,php-fpm 取代了php-cgi ,主要原因是 不能平滑重启php ,内存不能进行动态分配
而且,把php当做一个模块加载到apache中,出问题时很难定位是php的问题还是apache的问题。 ...(3)当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。...FastCGI子进程接着等待,并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。在CGI模式中,php-cgi在此便退出了。...3、PHP-FPM 首先要说的是:fastcgi是一个协议,php-fpm实现了这个协议。 大家都知道,PHP的解释器是php-cgi。...它克服了php-cgi变更php.ini配置后,需重启php-cgi才能让新的php-ini生效,不可以平滑重启,直接杀死php-cgi进程,php就不能运行了的问题。
一.php和php-fpm 当客户端访问web服务器,比如nginx,那请求为/index.html,web服务器会到本地区找,但如果是/index.php呢,他会找php解析器来处理,那么他会把这个请求简单处理后交给...php是什么呢,如果机器安装php了,那php index.php将会解释这个脚本,然后给出结果,但是nginx显然无法这么去调用php这个命令所以需要一个中转 当web server收到/index.php...那fastcgi又是什么呢?Fastcgi是用来提高CGI程序性能的。...这就是fastcgi的对进程的管理。 二.php-fpm和fastcgi 那PHP-FPM又是什么呢?是一个实现了Fastcgi的程序,被PHP官方收了。 大家都知道,PHP的解释器是php-cgi。...总结: php可以解析php脚本,nginx运行php-fpm可以间接去解析脚本,fastcgi就是设置去传那些参数给php-fpm。
从http://php-fpm.org/downloads/下载与当前PHP版本对应的PHP-FPM源码包,例如:php-5.2.17-fpm-0.5.14.diff.gz tar zxvf php-5.2.17...with-jpeg-dir –with-png-dir –with-libxml-dir –with-freetype-dir –with-iconv=/usr/local –with-mcrypt –enable-fastcgi...php.ini 注意:上面配置PHP编译参数中的–enable-fastcgi是必须开启的。...创建站点目录并设置权限 mkdir -p /htdocs/www chmod +w /htdocs/www chown -R www:www /htdocs/www 4....$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; }
而且,把php当做一个模块加载到apache中,出问题时很难定位是php的问题还是apache的问题。...FastCGI子进程接着等待,并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。在CGI模式中,php-cgi在此便退出了。...3、PHP-FPM 首先要说的是:fastcgi是一个协议,php-fpm实现了这个协议。 大家都知道,PHP的解释器是php-cgi。...它克服了php-cgi变更php.ini配置后,需重启php-cgi才能让新的php-ini生效,不可以平滑重启,直接杀死php-cgi进程,php就不能运行了的问题。...如果要搭建一个高性能的PHP WEB服务器,目前最佳的方式是Apache/Nginx + FastCGI + PHP-FPM(+PHP-CGI)方式了。
if (function_exists('fastcgi_finish_request')) { fastcgi_finish_request();...} 当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法.按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行
当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。...PHP-CGI是PHP自带的PHP FastCGI管理器。...( PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程 ) 什么是PHP-FPM PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http:...PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。...强制终止php的fastcgi进程 --quit 平滑终止php的fastcgi进程 --restart 重启php的fastcgi进程 --reload 重新平滑加载php的php.ini --logrotate
PHP-FPM(FastCGI Process Manager):FastCGI进程管理器,是 PHP(Web Application)对 Web Server 提供的 FastCGI 协议的接口程序,...(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。) 四、FastCGI 从根本上来说,FastCGI是用来提高CGI程序性能的。...FastCGI子进程接着等待,并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。...五、PHP-FPM PHP-FPM 是对于 FastCGI 协议的具体实现,他负责管理一个进程池,来处理来自Web服务器的请求。目前,PHP5.3版本之后,PHP-FPM是内置于PHP的。...技术的升级过程: 所以,如果要搭建一个高性能的PHP WEB服务器,目前最佳的方式是Apache/Nginx + FastCGI + PHP-FPM(+PHP-CGI)方式了。
讲Fastcgi之前需要先讲CGI,CGI是为了保证web server传递过来的数据是标准格式的,它是一个协议。 ? 什么是FastCGI?...Fastcgi是CGI的更高级的一种方式,是用来提高CGI程序性能的 ? 什么是php-fpm?...在没有php-fpm之前,每当我们修改了php.ini的配置信息,都会面临着下面的几个问题: 1.需要重启php-cgi程序,才能使配置文件生效,同时php-cgi不支持平滑重启。...因此就可以把php-fpm理解为,是一个实现了Fastcgi协议的程序,用来管理Fastcgi启动的进程的,即能够调度php-cgi进程的程序。...接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以CGI规定的格式返回处理后的结果,退出进程。 CGI与FastCGI相比较 两者的主要差距在于性能瓶颈。
环境: 操作系统:Windows 2003 Server SP2 PHP 版本:php-5.2.6-Win32 1.下载 FastCGI For IIS6 http://www.iis.net...FastCGI Handler。...2.下载 PHP5.2.14 Windows 版 http://www.php.net/downloads.php 下载 .zip 格式的版本,下载后解压至 c:\PHP 目录,并给 IIS 启动帐户组或用户赋予读取和运行权限...注册 PHP 到 FastCGI 打开 C:\WINDOWS\system32\inetsrv\fcgiext.ini 文件。...-Win32\php.ini,修改: extension_dir = "C:\PHP\php-5.2.14-Win32\ext" fastcgi.impersonate = 1 其它的根据实际需要对
php FastCGI模式如何理解 说明 1、是一种让交互程序与 Web 服务器通信的协议。FastCGI 是早期通用网关接口(CGI)的增强版本。...原理 在FastCGI过程管理器启动后,首先解析php.ini文件,初始化执行环境,然后启动多个CGI协议解释器守护过程(在过程管理中可以看到多个php-cig或php-cgi.exe),等待WEB服务器的连接...;当客户端要求到达WEB服务器时,FastCGI过程管理器会选择并连接到一个CGI解释器,WEB服务器会将CGI环境变量和标准输入发送到FastCGI的子过程php-cgi;php-cgi子过程处理完成后...,将标准输出和错误信息返回WEB服务器;此时,php-cgi子过程将关闭连接,此请求将关闭,然后继续等待和处理FastCGI过程管理器的下一个请求连接。...以上就是php FastCGI模式的理解,希望对大家有所帮助。更多php学习指路:php教程 推荐操作系统:windows7系统、PHP5.6、DELL G3电脑
} location ~ \.php$ { include fastcgi_params; fastcgi_param...#fastcgi_pass unix:/var/run/php5-fpm.sock; try_files $uri =404; } location...修改php.ini支持fastCGI: 搜索“extension_dir”,找到: e;xtension_dir = "ext" 先去前面的分号再改为 extension_dir = "D:\php\ext...启动fastCGI服务 什么是fastCGI?它有什么用?...可以参考另一篇文章:php中fastcgi和php-fpm是什么东西 打开cmd命令: C:\Users\Administrator>D:/php/php-cgi.exe -b 127.0.0.1:9000
CGI的英文全称为Common Gateway Interface(公共网关接口),是Nginx和动态脚本程序的桥梁,Nginx通过FastCGI接口将动态请求发送给FastCGI,FastCGI中的Wrapper...这样web服务器和解释程序之间完全可以独立开发,这样避免了解释程序直接调用服务器的接口而导致的出错和崩溃以及安全性问题。...php-fpm进程的配置文件为/usr/local/php/etc/php-fpm.conf 可以对php-fpm进行相应的配置。...Nginx配置支持fastcgi: location ~ \.php${ root html; fastcgi_pass unix:/tmp/fastcgi.soke //通过套接字文件和cgi...建立联系,该文件在php-fpm.conf中设置 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME html$SCRIPT_FILE_NAME
php-fpm是进程管理器 , 属于master-worker多进程的模式 当请求xxx.php文件时 , 每一个子worker进程都是在读取和回应FastCGI协议的内容 fastcgi的方式是,fpm...启动运行后 , 会常驻内存监听端口(默认9000) , 当web服务器收到一个请求时,他不会重新fork一个进程,web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用tcp方式通信发送数据到...9000端口),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出. strace $(pidof 'php-fpm'|sed 's/\([0-9]*\).../-p \1/g') -e read,write -s 102400 下图就是在读取FastCGI协议的内容 image.png 使用tcpdump查看9000端口的数据传递 , 也能看到fastcgi