php并于nginx整合

nginx本身不能处理php,它只是个web服务器,当接受到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。

nginx一般是把请求发给fastcgi管理进程处理,fastcgi管理进程选择cgi子进程处理结果并返回给nginx。

1、首先,我们先初步认识一下fasetcgi和nginx+fastcgi的运行原理

a、apache+php和nginx+php的区别

apache一般是把php当作自己的一个模块来启动;而nginx则是把http请求变量转发给php进程,即php独立进程,这种方式叫做fastcgi运行方式。

所以,apache所编译的php不能用于nginx。

什么是fastcgi呢?

fastcgi是一个可伸缩地、高速地在HTTP server和动态脚本预言间通信的接口。多数流行的HTTP server都支持fastcgi,包括apache、nginx、lighttpd等。同时,fastcgi也被许多脚本语言支持,其中就有php。

fastcgi是从cgi发展该进而来的。。传统的cgi接口方式主要缺点是性能差,因为每次http服务器遇到动态程序时都需要重新启动脚本解释器来执行解析,然后将接结果返回给http服务器。这在处理高并发访问时几乎时不可用的。另外传统的cgi接口方式安全性也很差,现在已经很少使用了。

fastcgi接口方式采用的时c/s结构,可以将http服务器和脚本解析器分开,同时在脚本解析器服务器上启动一个或者多个脚本解析守护进程。当http服务器每次遇到动态程序时,可以将其直接交付给fastcgi进程来执行,然后将得到的结果返回给浏览器。这种凡是可以让http服务器专一地处理静态请求或者将动态脚本服务器的结果返回费客户端,在这很大程度上提高了整个应用系统的性能。

2、nginx+fastcgi运行原理

nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括php)必须通过fastcgi接口来调用。fastcgi接口在linux下是socket(这个socket可以是文件socket,也可以是ip socket)。

wrapper:为了调用cgi程序,还需要一个fastcgi的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定的docket上,如端口或者文件socket。当nginx将cgi请求发送给这个socket的时候,通过fastcgi接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序脚本并读取返回数据;接着,wrapper再将返回的数据通过fastcgi接口,沿着固定的socket传递给nginx;最后,nginx将返回的数据发送给客户端。这个就是nginx+fastcgi的整个运行过程,所以,我们首先需要一个wrapper,这个wrapper需要完成的工作:

1、通过调用fastcgi(库)的函数通过socket和nginx通信(读写socket是fastcgi内部实现的功能,对wrapper是非透明的)

2、调度thread,进行fork和kill

3、和application(php)经进行通信

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值