Nginx与PHP的交互
FastCGI模块模块允许nginx同FastCGI协同⼯作,并且控制哪些参数将被安全传递。
⼀、CGI和FastCGI简介
1、什么是C G I
CGI 是Web 服务器运⾏时外部程序的规范接⼝,按CGI 编写的程序可以扩展服务器功能。CGI 应⽤程序能与浏览器进⾏交互,还可通过数据库API 与数据库服务器等外部数据源进⾏通信,从数据库服务器中获取数据。格式化为HTML⽂档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。⼏乎所有服务器都⽀持CGI,可⽤任何语⾔编写CGI。---引⾃百度
传统CGI接⼝⽅式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执⾏解析,然后将结果返回给HTTP服务器。这在处理⾼并发访问时⼏乎是不可⽤的,另外传统的CGI接⼝⽅式安全性也很差,现在已经很少使⽤了。
2、什么是 F as tC G I
FastCGI是⼀个可伸缩地、⾼速地在HTTP server和动态脚本语⾔间通信的接⼝。多数流⾏的HTTP serv
er都⽀持FastCGI,包括Apache、Nginx和lighttpd等。同时FastCGI也被许多脚本语⾔⽀持,其中就有PHP。FastCGI是从CGI发展改进⽽来的。
FastCGI接⼝⽅式采⽤C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动⼀个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执⾏,然后将得到的结果返回给浏览器。
这种⽅式的优点:可以让HTTP服务器专⼀地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很⼤程度上提⾼了整个应⽤系统的性能。
⼆、Nginx+FastCGI运⾏原理
1、运⾏原理
Nginx不⽀持对外部程序的直接调⽤或者解析,所有的外部程序(包括PHP)必须通过FastCGI接⼝来调⽤。FastCGI接⼝在Linux下是
socket(这个socket可以是⽂件socket,也可以是ip socket)。
wrapper:为了调⽤CGI程序,还需要⼀个FastCGI的wrapper(wrapper可以理解为⽤于启动另⼀个程
序的程序),这个wrapper绑定在某个固定socket上,如端⼝或者⽂件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接⼝,wrapper接收到请求,然后
Fork(派⽣)出⼀个新的线程,这个线程调⽤解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接⼝,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页⾯或者图⽚)发送给客户端。这就是Nginx+FastCGI的整个运作过程,如图1-3所⽰。
所以,我们⾸先需要⼀个wrapper,这个wrapper需要完成的⼯作:
其中php-fpm.sock是⼀个⽂件,由php-fpm⽣成,类型是srw-rw----。
UNIX Domain Socket可⽤于两个没有亲缘关系的进程,是⽬前⼴泛使⽤的IPC机制,⽐如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的。这种通信⽅式是发⽣在系统内核⾥⽽不会在⽹络⾥传播。UNIX Domain Socket和长连接都能避免频繁创建TCP短连接⽽导致TIME_WAIT连接过多的问题。对于进程间通讯的两个程序,UNIX Domain Socket的流程不会⾛到TCP那层,直接以⽂件形式,以stream socket通讯。如果是TCP Socket,则需要⾛到IP层,对于⾮同⼀台服务器上,TCP Socket⾛的就更多了。
三、参考
1、Nginx解析PHP脚本的过程
2、Nginx 配置实现web解析php代码 过程记录
3、Nginx的模块与⼯作原理
4、实战Nginx与PHP(FastCGI)的安装、配置与优化
5、nginx FastCGI模块(FastCGI)配置
6、Nginx HTTP FastCGI 模块
7、Nginx中fastcgi_pass的配置问题
8、Nginx-->进阶-->原理-->Nginx+php+fastcgi的原理与关系
9、Nginx FastCGI的运⾏原理
10、linux系统配置nginx⽀持PHP解析
11、nginx+php的配置与原理
12、Nginx⼯作原理和优化、漏洞
nginx部署前端项目

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。