网关 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的本质是:一个协议,包括了输入请求,转交,响应。

image

但是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

转载于:https://www.cnblogs.com/zhangyachen/p/8030296.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值