php,php-cgi,php-fpm,nginx之间的关系

1、HTTP服务器
监听IP:PORT,接收并解析HTTP协议及数据,向客户端响应HTTP协议及数据。
php程序使用socket就可以实现一个HTTP服务器,配合IO多路复用也可以达到不错的并发,比如walkman。

2、fastcgi与cgi
cgi (common gateway interface)通用网关接口,主要用在web服务器与后端应用程序的通讯,fastcgi是cgi的优化版本。

3、php程序
php,php-cgi,php-fpm 都可以解释php脚本,但是调用方式不一样,前者是cli模式直接调用,后两个是需要符合fastcgi协议来通讯。

windows下:1、php.exe是cli模式下的php解释器;2、php-cgi是实现了fastcgi协议的php解释器,一般监听9000端口,php-cgi不具备管理进程的能力,所以一个端口只有一个进程来服务。php-cgi -h 查看帮助。可以使用命令来开启一个fastcgi监听程序 php-cgi.exe -b 127.0.0.1:9001 -c D:\phpStudy\PHPTutorial\php\php-7.2.1-nts\php.ini
其实phpstudy软件也是这样来启动并管理php-cgi的。

Linux下:1、php是cli模式下的php解释器;2、php-cgi同上,3、php-fpm分为master(管理进程)和worker(实现了fastcgi协议的php解释器进程),它比php-cgi要优秀很多,最初php-fpm是需要调用php-cgi来解释php代码的,php-fpm只起到进程管理的作用,但是因为php-fpm这个民间第三方写的工具实在比php-cgi好太多了,php官方在php5.4时就把它集成到了php官方发布的包中,并且php-fpm不需要再依赖php-cgi,直接把php解释器的功能集成进php-fpm了。win不支持php-fpm,因为php-fpm是使用Linux的fork()来做的,所以win下面基本上还是使用php-cgi。

4、为什么PHP要使用fastcgi模式?
因为nginx具有强悍的并发能力,远远高于PHP自己实现的HTTP服务器,于是PHP实现了fastcgi接口,来和nginx通讯,就有了php-cgi/php-fpm程序,解析fastcgi,解析php脚本。

5、nginx服务器
通常作为web服务器,起到反向代理的作用,负责接收请求,管理请求,通过fastcgi转发到后端应用程序,响应给客户端。具有很高的并发连接能力,号称单机百万并发长链接,实际上任何后端语言都可以实现fastcgi协议来与nginx通讯。nginx调用php-cgi/php-fpm可以用“fastcgi_pass 127.0.0.1:9000;”这样调用,其中的“127.0.0.1”你完全可以换成非本机ip,比如你在B服务器(ip为23.45.67.78)的9000上运行了一个php-fpm,那么你A服务器的nginx可以用“fastcgi_pass 23.45.67.78:9000;”这样去调用B服务器的php-cgi/php-fpm。

额外参考:https://www.xiebruce.top/606.html

fastcgi模式对比java servlet
https://www.runoob.com/servlet/servlet-intro.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值