Nginx+PHP服务器运行原理初探(一)

Nginx服务器起到的作用

服务器分为两类:

  • 前端服务器。负责HTTP请求的解析与转发,或者处理静态请求。轻量级,并发量高,常常用作反向代理、负载均衡等。说白了,就是负责请求发到哪里,或者取现成的文件之类的。
  • 应用服务器。负责调用某一种语言的解释器,或某种语言写的、已经编译好的程序,接收HTTP请求中的各个参数,按照开发者的意图做出动作,并生成结果返回给调用方。

Nginx一般用作前端服务器,解析HTTP请求,并把请求传递到下一个地方(下一台服务器,或者是应用服务器程序,或者是……)。

CGI

早期的webserver只处理html等静态文件,但是随着技术的发展,出现了像php等动态语言。 
webserver处理不了了,怎么办呢?那就交给php解释器来处理吧! 
交给php解释器处理很好,但是,php解释器如何与webserver进行通信呢?

为了解决不同的语言解释器(如php、python解释器)与webserver的通信,于是出现了cgi协议。只要你按照cgi协议去编写程序,就能实现语言解释器与webwerver的通信。如php-cgi程序。

FastCGI

CGI,全称Common Gateway Interface,是应用服务器语言相关的处理程序之间的接口。 
处理程序实现这个接口,应用服务器调用这个接口,传入HTTP中的各参数(方法,URL,表单……),实现动态请求。不过这么做也有个缺点,每次收到请求时,应用服务器都要新建一个进程,调用处理程序,使用完之后就结束这个进程。进程的建立与释放都比较消耗资源,因此这么做的效率并不高。 
FastCGI是对CGI的改进,它随着Nginx服务一同启动并驻留内存,当请求到达时,处理之,处理完之后并不结束这个进程,而是继续等待下一次连接。 

fastcgi特点:

1)是HTTP服务器和动态脚本语言间通信的接口或者工具!

2)优点就是把动态语言解析和HTTP服务器分离了开来!

3)Nginx、Apache、lighttpd以及多数动态语言都支持FastCGI。

4)接口方式采用C/S结构,分为HTTP服务器(客户端)和动态语言解析服务器(服务端)

5)PHP动态语言服务端可以启动多个FastCGI的守护进程例如:php-fpm(fcgi process mangemnt))

6)http服务器通过例(Nginx fastgi_pass)FastCGI客户端和动态语言FastCGI服务端通信(例如:php-fpm)

PHP-fpm与PHP-cgi

PHP-cgi是PHP语言的解释器。按照最初的模式的话,每次请求到达,都要开一个新的进程启动PHP-cgi,重新载入配置、数据结构,初始化运行环境。更新PHP配置之后,需要重启PHP-cgi,配置才能生效。 
而PHP-fpm是PHP一个实现了FastCGI的管理器,常驻内存,负责管理各PHP-cgi进程,可以提升运行效率,并实现平滑重启。 

如何在机器上配置PHP-fpm

nginx.conf文件中,php相关的location块中配置fastcgi_pass,指向php-fpm监听的端口。 
php-fpm的配置文件中,监听某个端口。貌似配置文件中默认都是127.0.0.1:9000

转自 https://blog.csdn.net/u012618959/article/details/50879124

参考 http://blog.51cto.com/runningyongboy/1722299

你可能感兴趣的:(Nginx+PHP服务器运行原理初探(一))