当前位置: 首页 > 后端技术 > PHP

说说Nginx和php的交互和通信方式

时间:2023-03-30 02:43:02 PHP

Nginx是俄罗斯人开发的最早的Webserver,目前已经风靡全球。相信大家都不陌生。PHP经过20多年的发展也来到了7系列版本,更加注重性能。这对搭档近几年可谓是叱咤风云,基本上LNMP已经成为了现在的标配。但是,你用了这么多年Nginx+PHP的组合,你真的了解它们之间是如何交互和通信的吗?一、普及一下Nginx和Php-fpm相关的知识点什么是Nginx?Nginx(“enginex”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。什么是php-fpm一、cgi和fast-cgi协议的历史cgi早期的web服务器只处理html等静态文件,但随着技术的发展,出现了php等动态语言。webserver无法处理怎么办?然后让php解释器来处理吧!交给php解释器就好了,但是php解释器怎么和webserver通信呢?为了解决不同语言解释器(如php、python解释器)与webserver的通信,出现了cgi协议。只要按照cgi协议编写程序,就可以实现语言解释器与webwerver的通信。比如php-cgi程序。fast-cgi的改进有了cgi协议,解决了php解释器和webserver的通信问题,webserver终于可以处理动态语言了。但是,webserver每次收到请求,都会fork一个cgi进程,请求结束后再kill进程。这样如果有10000个请求,就需要forkkillphp-cgi进程10000次。你觉得这是一种资源浪费吗?于是,出现了cgi的改进版fast-cgi。fast-cgi不会在每次处理完请求后杀掉进程,而是保留进程,让进程可以一次处理多个请求。这样就不用每次都重新fork一个进程,大大提高了效率。2.什么是php-fpm?php-fpm是php-Fastcgi进程管理器。php-fpm是FastCGI的实现,提供进程管理的功能。进程包括master进程和worker进程。master进程只有一个,负责监听端口和接收来自WebServer的请求,而worker进程一般有多个(具体数量根据实际需要配置)。每个进程都嵌入了一个PHP解释器,也就是PHP代码的实际执行。这个地方。2、Nginx如何与Php-fpm结合我们知道Nginx不仅有处理http请求的功能,还可以作为反向代理。因此,Nginx通过反向代理功能将动态请求转发给后端的Php-fpm。我们来配置一个新的Nginx+Php-fpm1,配置nginx.conf文件,进入nginx目录,编辑nginx.conf文件。如图,在nginx.conf的最后一行,添加include文件2,添加对应的server,输入上面的include路径,添加一个server。下面解释一下配置项的含义:server{listen80;#监听80端口,接收http请求server_namewww.example.com;#就是网站地址root/usr/local/etc/nginx/www/huxintong_admin;#准备存放代码项目的路径#路由到网站根目录时的处理www.example.comlocation/{indexindex.php;#Jumptowww.example.com/index.phpautoindexon;}#在网站请求php文件时,反向代理到php-fpm所在位置~\.php${include/usr/local/etc/nginx/fastcgi.conf;#加载nginx的fastcgi模块fastcgi_intercept_errorson;fastcgi_pass127.0.0.1:9000;#nginxfastcgi进程监听IP地址和端口}}简而言之:当我们访问www.example.com时,处理流程如下:www.example.com||Nginx||路由到www.example.com/index.php||加载nginx的fast-cgi模块||fast-cgi监听地址127.0.0.1:9000||www.example.com/index.php请求到达127.0.0.1:9000||待处理。..接下来,我们启用php的php-fpm来处理这个请求。打开php-fpm.conf文件,我们看到如下配置:即:php-fpm模块监听127.0.0.1:9000端口,等待请求到来并处理。3、总结一下nginx和php-fpm的结合,完整的流程如下。www.example.com||Nginx||路由到www.example.com/index.php||加载nginx的fast-cgi模块||fast-cgi监听地址127.0.0.1:9000。||www.example.com/index.php请求到达127.0.0.1:9000||php-fpm监听127.0.0.1:9000||php-fpm收到请求,启动worker进程处理请求||php-fpm处理请求,返回nginx||nginx通过http返回结果给浏览器四、效果展示1、成功启动nginx和php-fpm模块。我们查看php-fpm进程如上图所示。有一个主进程和3个工作进程。2、在网站目录下新建一个文件,我们编辑该文件如下图:3、访问网站更多学习内容,可以访问【媲美大厂】优质PHP架构师教程目录百科,只要你能看完了,你的工资会更上一层楼(持续更新)以上内容希望对大家有所帮助。很多PHPer在进阶的时候总会遇到一些问题和瓶颈。他们写了太多的业务代码,没有方向感。我不知道从哪里开始改进。我整理了一些这方面的资料,包括但不限于:分布式架构、高扩展性、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等知识点,需要进阶进阶干货的可以免费分享给大家。有需要的可以点这里进阶PHP月薪30k>>>架构师成长路线【免费获取视频和面试资料】