本文同时发表在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的更多相关文章

  1. cgi fast-cgi php-fpm区别

    php-cli 是php在系统执行的程序,直接执行php文件: cgi和fast-cgi的区别1.cgi和fast-cgi都是php解析协议,负责解析服务器分发过来的php动态文件:cgi程序就会去解 ...

  2. CGI fastCgi php-fpm PHP-CGI 辨析

    CGI fastCgi php-fpm PHP-CGI 辨析 LNMP环境中的nginx是不支持php的,需要通过fastcgi插件来处理有关php的请求.而php需要php-fpm这个组件提供该功能 ...

  3. CGI,FAST-CGI,PHP-FPM的区别

    http://blog.csdn.net/xsgnzb/article/details/52875331 CGI全称Common Gateway Interface即公共网关接口,它遵循cgi规范,定 ...

  4. 详解php的安装模式---CGI,FASTCGI,php-fpm,mod_php,mod_cgi,mod_fcgid

    1. CGI CGI是通用网关接口,HTTP服务器使用这样的接口程序来和“其他程序”(比如PHP的解释器程序)通讯,这个“其他程序”可以使用任何计算机语言来编写,它通过CGI这个接口从HTTP服务器取 ...

  5. CGI FASTCGI php-fpm

    CGI(Common Gateway Interface) CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工 ...

  6. 《PHP - CGI/Fastcgi/PHP-FPM》

    先说下我最近看到的一篇文章,哈哈哈,特别好玩. 一步步教你编写不可维护的 PHP 代码 之前一直知道 PHP 在 CGI 模式下运行.命令行下在 CLI 模式下运行. 但是 FPM 和 nginx 配 ...

  7. CGI,FastCGI,PHP-FPM,PHP-CLI,modPHP

    This might give you a broader understanding of their difference: CGI: (common gateway interface) It ...

  8. CGI FastCGI php-FPM 分别是什么

    1.CGI协议用于php解析器跟webserver之间的通信(效率低,浪费资源) 2.FastCGI 可以一次性处理多个进程,是CGI的改良版本 3.php-FPM 是FastCGI 的进程管理器(产 ...

  9. php-fpm cgi fast-cgi

    基础 在整个网站架构中,Web Server(如Apache)只是内容的分发者.举个栗子,如果客户端请求的是 index.html,那么Web Server会去文件系统中找到这个文件,发送给浏览器,这 ...

随机推荐

  1. ecshop根据订单号查询物流信息

    目标:订单详情页可以根据订单查询当前物流信息. 效果图: 思路:点击后异步请求快递查询api,接受返回信息,拼接. 代码: admin下:order_info.htm //一:顶部插入jquery,在 ...

  2. oracle 物化视图 job

    在oracle数据库里边,创建物化视图之后,系统在DBMS_jobs文件夹下,会自动创建相应的job,右键执行job的时候报错如下: 问题:ORA-12012: 自动执行作业 198 出错 ORA-1 ...

  3. 十三、Hadoop学习笔记————Hive安装先决条件以及部署

    内嵌模式,存储于本地的Derby数据库中,只支持单用户 本地模式,支持多用户多会话,例如存入mysql 下载解压hive后,进到conf路径,将模板拷贝 出现该错误表示权限不够 该目录未找到 新建一个 ...

  4. ASP.NET Core 一步步搭建个人网站(持续更新中~~~)

    摘要 ASP.NET Core2.0发布有一阵子了,这是.NET 开源跨平台的一个重大里程碑, 也意味着比1.0版本要更加成熟.目前.net core具有开源.跨平台.灵活部署.模块化架构等等特性,吸 ...

  5. js学习笔记<拷贝传值,引用传址和匿名函数>

    拷贝传值:把一个变量的值拷贝一份,传给了另外一个变量拷贝传值中,两个变量之间没有任何联系,修改其中一个一个变量的值,原来的变量不变. 例: var arr1 = ["张三",24, ...

  6. sql server 2008 r2 登陆时显示无法打开默认的数据库

    解决! 第一步: 远程其他服务器的数据库能连上,本地的数据库某个用户名就是打不开,一开始以为是用户名或者密码错误, 后来用sqlcmd dos命令 -S . -U an -P sa 的方式登陆时可以的 ...

  7. 51Nod 2006 飞行员配对(二分图最大匹配)

    链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=2006 思路: 二分匹配 注意n m的关系 代码: #include ...

  8. HTTP协议之URL

    1.什么是URL URL的全称是Uniform Resoure Locator,统一资源定位器.URL是浏览器寻找信息时所需的资源位置.当一个人将浏览器指向一个URL,浏览器就会在幕后发送适当的协议报 ...

  9. staticmethod、classmethod的使用

    staticmethod 首先要明白两个概念 绑定方法:但凡是定义在类的内部,并且没有被任何装饰器修饰过的方法,就是绑定方法,并且有自动传值功能.类直接调用该方法时,改方法叫做类的函数属性:对象在调用 ...

  10. CSS3学习笔记--media query 响应式布局

    语法:@media screen and (min-width: 320px) and (max-width : 479px) media属性后面跟着的是一个 screen 的媒体类型(上面说过的十种 ...