前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >当面试官问你:nginx 如何解析php文件?

当面试官问你:nginx 如何解析php文件?

作者头像
YP小站
发布2020-06-04 15:27:05
1.5K0
发布2020-06-04 15:27:05
举报
文章被收录于专栏:YP小站YP小站

本来想着发布一篇什么样子技术文章,更有意义。考虑之后想起这么一个事情,上次一个伙伴突然问我 nginx 如何解析php 文件,我瞬间懵逼了~~~或许学艺不精、但是这个是知道的,只是当时就是一下子没有想起来,思考了半天才记起来是 php-fpm 。因此、今日选择nginx如何解析php文件分享给大家。

这不、也马上就要过年了。也说明2020年跳槽季也快到了,给大家多分享一些更有意思的干货。希望能帮助到各位,喜欢的朋友可以一直看到文章底部有我联系方式。

那就开始迈入正题吧:

nginx 如何解析php文件php-fpm的解释

首先从 nginx 说起,nginx 的配置文件 ↓

/usr/local/nginx/conf/nginx.conf
location ~ \.php {
            root           /nginx;
            fastcgi_pass   127.0.0.1:9000;  //ip+port方式
            ; fastcgi_pass unix:/tmp/php-cgi.sock;【unxi domain socket形式】  这种是进程之间的访问,比tcp/ip的要快
            fastcgi_index  index.php;
          fastcgi_split_path_info ^(.+\.php)(.*)$;     
         fastcgi_param PATH_INFO $fastcgi_path_info;    
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
           include /usr/local/etc/nginx/fastcgi.conf;
        
        }

从上面可以看出来 ,nginx通过fastcgi_pass命令将请求转发给fastcgi 即php-fpm;

当web server 收到 /index.php 这个请求后,会启动对应的CGI程序,这里就是PHP的解析器。

接下来PHP解析器会解析php.ini文件,(php-fpm 如何解析php.ini 文件的? 新版PHP已经集成php-fpm了,不再是第三方的包了,推荐使用。

只需要在安装的时候

/configure --prefix=/usr/local/php  --enable-fpm

开启支持php-fpm就可以了)初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。

web server再把结果返回给浏览器。

知识填充

CGI是为了保证web server传递过来的数据是标准格式的,标准的CGI对每个请求都会解析php.ini文件,初始化执行环境,所以处理每个时间的时间会比较长。

Fastcgi是用来提高CGI程序性能的,是CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。是优化版的cgi;fastcgi 是一个与平台无关,与语言无关,任何语言只要按照它的接口来实现,就能实现自己语言的fastcgi能力和web server 通讯。

首先,Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对进程的管理。当HTTP服务器遇到动态请求时,会将请求转发给FastCGI进程,FastCGI进程执行动态脚本后再将结果返回给HTTP服务器,

--------------------以上,fastcig ,cgi都是独立于语言的;

php-cgi 就是php的解释器 php-cgi只是个CGI程序,php-cgi是php提供给web serve也就是http前端服务器的cgi协议接口程序,,他自己本身只能解析请求,返回结果,不会进程管理.所以就出现了一些能够调度php-cgi进程的程序,比如说由lighthttpd分离出来的spawn-fcgi。好了PHP-FPM也是这么个东东,

php-fpm是一个实现了FastCGI(协议)的程序,php-fpm是php提供给web serve也就是http前端服务器的fastcgi协议接口程序,管理对象是php-cgi,PHP内核集成了PHP-FPM之后就方便多了,使用--enalbe-fpm这个编译参数即可。

整个过程 nginx接收php文件的请求后,通过fastcgi_pass命令将请求发送给php-fpm---php-cgi的进程管理器(在这中间,必须通过fastCGI进程管理器,是优化后的cgi,通过master主进程和work子进程,其实就是将请求的格式规范化),就是php-cgi的进程管理者,最后还是有php-cgi去完成解析

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 YP小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • nginx 如何解析php文件php-fpm的解释
  • 知识填充
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档