网关 php-cgi fastcgi phpfpm
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/88
关于网关的理解,一句话就是:作为一种翻译器,抽象出了一种能够到达资源的方法。
这里指的通过翻译器来到达资源,可以包括通过转换协议(HTTP/FTP)获取网关另一端与客户端使用不同协议的服务器的资源,也可以包括通过网关向数据库发送查询语句来获取动态数据,也可以包括通过网关与不同的网络进行通信。总之就是通过网关获取资源。
理解了网关的宏观概念之后,我们看一下网关的分类:
- 协议网关:在不同协议的网络之间的协议转换。
- 应用网关:将某个服务的一种数据格式转化为该服务的另外一种数据格式,从而实现数据交流。例如两个拥有不同电子邮件协议的主机要通过电子邮件网关进行互相通信。
- 安全网关:最常用的安全网关就是包过滤器,实际上就是对数据包的原地址,目的地址和端口号,网络协议进行授权。通过对这些信息的过滤处理,让有许可权的数据包传输通过网关,而对那些没有许可权的数据包进行拦截甚至丢弃。
以上的网关都是连接客户端和服务器端的网关,即网关位于服务器和客户端的中间。还有一种常用的网关,应用程序服务器,会将目标服务器与网关结合在一个服务器中实现。比如客户端通过HTTP连接服务器,服务器将请求再通过一个网关应用编程接口发送给运行在服务器上的应用程序。
第一个流行的的应用程序网关API就是通用网关接口(Common Gateway Interface,CGI)。CGI是一个标准接口集。比如服务器需要请求网关的资源时,会将所需要的数据传递给它(通常是整条请求,包括url、查询字符串、HTTP请求的header等)。之后网关向服务器返回响应数据,服务器再将数据返回给Client。
所以,CGI的本质是:一个协议,包括了输入请求,转交,响应。

但是CGI有一个明显的问题:为每条CGI请求引发一个新进程,这样的开销会限制那些使用CGI服务器的性能。所以出现了一种新型CGI——fastcgi。
Fastcgi接口模拟了CGI,但是是以持久守护进程运行的。首先,Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。
上面说的cgi与fastcgi都是协议,与特定语言无关的。
那么php-cgi是什么?网上主要有2种说法:
- PHP的解释器是php-cgi,php-cgi只是个CGI程序,不会进行进程管理。
- PHP-CGI是PHP自带的FastCGI管理器。
个人理解的是:php-cgi是php自带的fastcgi管理器,管理的进程名称是php-cgi,应该是凑巧名字一样吧。
但是php-cgi的不足是:
- php-cgi变更php.ini配置后需重启php-cgi才能让新的php.ini生效,不可以平滑重启。
- 直接杀死php-cgi进程,php就不能运行了。(PHP-FPM没有这个问题,守护进程会平滑重新生成新的子进程。)
综上,诞生了php-fpm,也是一个实现了fastcgi协议的程序。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。
参考资料:如何通俗地解释 CGI、FastCGI、php-fpm 之间的关系?
概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM
HTTP权威指南8.1 8.2 8.3
网关 php-cgi fastcgi phpfpm的更多相关文章
- cgi fast-cgi php-fpm区别
php-cli 是php在系统执行的程序,直接执行php文件: cgi和fast-cgi的区别1.cgi和fast-cgi都是php解析协议,负责解析服务器分发过来的php动态文件:cgi程序就会去解 ...
- CGI fastCgi php-fpm PHP-CGI 辨析
CGI fastCgi php-fpm PHP-CGI 辨析 LNMP环境中的nginx是不支持php的,需要通过fastcgi插件来处理有关php的请求.而php需要php-fpm这个组件提供该功能 ...
- CGI,FAST-CGI,PHP-FPM的区别
http://blog.csdn.net/xsgnzb/article/details/52875331 CGI全称Common Gateway Interface即公共网关接口,它遵循cgi规范,定 ...
- 详解php的安装模式---CGI,FASTCGI,php-fpm,mod_php,mod_cgi,mod_fcgid
1. CGI CGI是通用网关接口,HTTP服务器使用这样的接口程序来和“其他程序”(比如PHP的解释器程序)通讯,这个“其他程序”可以使用任何计算机语言来编写,它通过CGI这个接口从HTTP服务器取 ...
- CGI FASTCGI php-fpm
CGI(Common Gateway Interface) CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工 ...
- 《PHP - CGI/Fastcgi/PHP-FPM》
先说下我最近看到的一篇文章,哈哈哈,特别好玩. 一步步教你编写不可维护的 PHP 代码 之前一直知道 PHP 在 CGI 模式下运行.命令行下在 CLI 模式下运行. 但是 FPM 和 nginx 配 ...
- CGI,FastCGI,PHP-FPM,PHP-CLI,modPHP
This might give you a broader understanding of their difference: CGI: (common gateway interface) It ...
- CGI FastCGI php-FPM 分别是什么
1.CGI协议用于php解析器跟webserver之间的通信(效率低,浪费资源) 2.FastCGI 可以一次性处理多个进程,是CGI的改良版本 3.php-FPM 是FastCGI 的进程管理器(产 ...
- php-fpm cgi fast-cgi
基础 在整个网站架构中,Web Server(如Apache)只是内容的分发者.举个栗子,如果客户端请求的是 index.html,那么Web Server会去文件系统中找到这个文件,发送给浏览器,这 ...
随机推荐
- C++11 标准新特性: 右值引用与转移语义
文章出处:https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ 新特性的目的 右值引用 (Rvalue Referene) ...
- Servlet之过滤器(Filter)和监听器(Listener)
过滤器 过滤器是一个java组件,可以拦截发送至某个servelet,jsp页面或静态页面的请求,可以在响应发送到客户之前进行拦截 工作原理: 过滤器类必须实现 Filter 接口,包含的方法如下: ...
- 【转】Nginx反向代理和负载均衡
原文链接:http://www.cnblogs.com/shuoer/p/7820899.html Nginx反向代理和负载均衡 环境说明 由于我使用的是windows系统,所以我用虚拟机虚拟出来了3 ...
- 大道至简第一章Java伪代码读后感
import.java.大道至简.*; //周爱民 import.java.读后感*; public class shawanyia { //1. 编程的精义 while(山没有消失) {if(愚公没 ...
- 工厂模式(Factory Method)
1.工厂方法模式(Factory Method) 工厂方法模式分为三种: 1-1.普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 举例如下:(我们举一个发送邮件和短信的例子 ...
- centos 下安装pptp (vpn) 的方法
废话少说 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3 ...
- NOIP2017普及组解题报告
刚参加完NOIP2017普及,只考了210,于是心生不爽,写下了这篇解题报告...(逃 第一次写博,望dalao们多多指导啊(膜 第一题score,学完helloworld的人也应该都会吧,之前好多人 ...
- How to support comparators in our sort implementations?
上图是普林斯顿算法课part1.Mergesort章节给出的参考代码,可以发现这个代码有三处警告.造成的隐患就是我们无法在类型检查时发现送入sort()函数的数组元素类型和Comparator的泛型不 ...
- SSIS中循环遍历组件[Foreach Loop Container]
背景 每月给业务部门提取数据,每个分公司都要提取一般,先跑SQL,再粘贴到Excel中,然后发邮件给相关的人员.费时费力,还容易粘贴错位.因此,需要通过一个程序完成这些步骤.我首先想到的是通过SSIS ...
- tomcat线程初探
博主:handsomecui,希望路过的各位大佬留下你们宝贵的意见,在这里祝大家冬至快乐. 缘由: 初探缘由,在业务层想要通过(当前线程的栈)来获取到控制层的类名,然后打日志,可是发现并不能通过当前线 ...