现在的位置: 首页 > 编程语言 > 正文

apache+PHP和ngnix+php的区别有哪些?Nginx+FastCGI运行原理有哪些

2020年04月27日 编程语言 ⁄ 共 1493字 ⁄ 字号 评论关闭

  Nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,假如是php请求,则发给php解释器处理,并把结果返回给客户端。Nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx。下面学步园小编来讲解下apache+PHP和ngnix+php的区别有哪些?Nginx+FastCGI运行原理有哪些?

  apache+PHP和ngnix+php的区别有哪些

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

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

  什么是FastCGI呢

  FastCGI是一个可伸缩地、高速地在HTTPserver和动态脚本语言间通信的接口。多数流行的HTTPserver都支持FastCGI,包括Apache、Nginx和lighttpd等。同时,FastCGI也被许多脚本语言支持,其中就有PHP。

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

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

  Nginx+FastCGI运行原理有哪些

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

  wrapper:为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页面或者图片)发送给客户端。这就是Nginx+FastCGI的整个运作过程。

  所以,我们首先需要一个wrapper,这个wrapper需要完成的工作:

  通过调用fastcgi(库)的函数通过socket和ningx通信(读写socket是fastcgi内部实现的功能,对wrapper是非透明的)调度thread,进行fork和kill和application(php)进行通信。

  以上就是关于“apache+PHP和ngnix+php的区别有哪些?Nginx+FastCGI运行原理有哪些”的内容,希望对大家有用。更多资讯请关注学步园。学步园,您学习IT技术的优质平台!

抱歉!评论已关闭.