用了这么的php和nginx,习惯于nginx的配置文件和ip的映射就能完成网站的部署,我就没有深入思考过php和nginx之间的联系,还是昨天被提到我才想起来之前转载过一篇我看不懂的文章是关于php-fpm的
https://blog.youkuaiyun.com/Anglry/article/details/101674530 一年前的小白,每想到我居然错过了这些,闭门造车不如广开言路
先说说nginx和PHP的交互过程,这边文章也是一边学一边理解一边记
1> 用户先将域名或IP形式的http或https请求发送给部署好的nginx服务器,也就是客户端(这个可以是浏览器也可以是其他)和nginx服务器进行三次握手最终建立TCP连接的过程
2>nginx服务器接收到用户访问的URI(协议加主机,不含端口)和后缀,服务器对该请求进行判断和处理
3>如果用户请求的是动态内容,nginx会将请求交给fastcgi客户端,通过fastcgi_pass将用户的请求发送给php-fpm,(对于CGI的了解可以看一下我 上面的 链接)如果用户访问的是静态资源,那么nginx就不用做其他的工作了,将直接返回用户请求的静态资源返回给用户。当然静态请求地话用户和nginx服务器的交互流程就结束了,下面的是动态继续。
4>当php-fpm接收到CGI发送过来的请求时对接收到的消息进行封装(php-fpm.conf配置)到wrapper(FastCGI触发器),wrapper会产生一个新的线程调用php动态程序解析服务器(php.ini 这个是php的核心),执行php业务
即:Nginx -> FastCGI -> php-fpm -> FastCGI Wrapper -> php解析器
所以一个服务器的请求是一个单独的线程,多个请求就会产生多个FastCGI进程
补充说明:
CGI是通用网关协议,FastCGI则是一种常驻进程的CGI模式程序。我们所熟知的PHP-FPM的全称是PHP FastCGI Process Manager,即PHP-FPM会通过用户配置来管理一批FastCGI进程,例如在PHP-FPM管理下的某个FastCGI进程挂了,PHP-FPM会根据用户配置来看是否要重启补全,PHP-FPM更像是管理器,而真正衔接Nginx与PHP的则是FastCGI进程。
5>php将查询到结果返回给nginx
6>nginx服务器构造一个响应报文将结果返回给用户
通过上面的流程,我能看出来,nginx服务器实际上就一个转接器,或者说中间件,负责传递和发送数据,而nginx服务器和php之间联系是通过CGI完成的。第四步:fastcgi_pass将动态资源交给php-fpm后,php-fpm会将资源转给php脚本解析服务器的wrapper
https://blog.youkuaiyun.com/qq_32595453/article/details/80563142 URI和URL的区别
https://blog.youkuaiyun.com/wuhuagu_wuhuaguo/article/details/83032578 本文借鉴来源
https://www.jb51.net/article/18209.htm web搭建
https://www.jb51.net/article/83926.htm nginx+php 配置