一、关于nginx
- 1.1 简单认知
我们都知道nginx 是web服务器。 也知道 用户访问时通过ip和端口访问 nginx。 那么nginx 是如何 通过php 获取数据并返回数据的呢?
-
1.2 代理与反向代理
- 1.2.1 正向代理 : 访问google.com
如上图,因为google 被墙,我们需要vpn翻墙才能访问google.com vpn 对于“我们”来说,是可以被感知的(我们连接了vpn) vpn 对于“google服务器”来说,是不可感知的(google 只知道有http 请求过来)。
- 1.2.2 反向代理
如上图 ,我们访问baidu.com 的时候,baidu有一个代理服务器,通过这个代理服务器,可以做负载均衡,路由到不同的server 代理服务器 对于 “我们” 来说,是不可感知的(我们只能感知到访问的是百度的服务器,不知道中奖还有代理服务器来在负载均衡)。 代理服务器,对于“server1,server2 server3” 是可感知的(代理服务器负载均衡路由到不同的server)
- 1.2.3 总结
说白了:“正向”、“反向” 是相对于人的感知来说的。 人能感受到的就是正向代理,人感受不到的就是反向代理。
- 1.2.1 正向代理 : 访问google.com
二、php-fpm
-
2.1 cgi 协议
`在说php-fpm 之前,先了解一下,什么的是cgi
- 2.1.1 cgi
百度百科的解释: cgi 即 通过网关接口 cgi 是 协议 CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。 CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。 CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
- 2.1.2 cgi 历史
早期的webserver 只能处理HTML等静态文件,但是随着技术的发展,出现了php等动态语言, 此时的webserver 已处理不了,那怎么办的,那就交给PHP解释器处理吧 交给解释器处理很好,但是如何使得解释器与webserver 之间通讯呢?
- 2.1.3 cgi 的出现
cgi协议 的出现是为了解决webserver 和 解释器(php,java,python)之间的通讯问题, 只要你按照cgi协议编写程序,就能实现语言解释器与webserver之间的通讯。如php-cgi程序
- 2.1.4 cgi 程序 结合webserver 的运行方式
webserver 接收到请求,会fork(创建) 一个cgi 程序,处理请求,处理完成后 kill cgi程序。 问题: 如果有10000 次请求 就会创建 10000 个cgi 程序。是不是很浪费资源?
-
2.2 fastcgi 协议
为了解决cgi 程序 执行浪费资源的问题
2.2.1 fastcgi百度百科的解释: FastCGI全称 快速通用网关接口(FastCommonGatewayInterface)。
2.2.2 fastcgi 的出现
为了改良cgi 程序运行时资源的浪费,出现了fastcgi 协议。
2.2.3 fastcgi 程序
fastcgi 程序, 每次处理完请求后,不会kill 掉这个进程,而是保留这个进程, 使这个进程可以一次处理多个请求。这样不用每次重新fork一个进程了,大大提高了效率
-
2.3 php-fpm (fastcgi 进程管理器)
php-fpm即php-Fastcgi Process Manager. php-fpm是 FastCGI 的实现,并提供了进程管理的功能。 进程包含 master 进程和worker 进程两种进程。 master 进程只有一个,负责监听端口,接收webserver的转发,而worker 进程,一般有多个(具体根据配置), 每个进程内部都嵌入了一个php解释器,是php代码执行的地方。 执行操作: master进程监听端口,接收webserver的请求,交友worker进程执行。
三、nginx 与 php-fpm 结合
上面我们说过nginx不只有http请求的功能,还能做反向代理。
nginx 通过反向代理功能将动态请求转向后端php-fpm.
-
3.1 nginx.conf 配置
-
3.2 添加对应的server
解释一下上面的配置 server { listen 80; #监听80端口,接收http请求 server_name www.example.com; #就是网站地址 root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径 #路由到网站根目录www.example.com时候的处理 location / { index index.php; #重定向到www.example.com/index.php autoindex on; } #当请求网站下php文件的时候,反向代理到php-fpm location ~ \.php$ { include /usr/local/etc/nginx/fastcgi.conf; #加载nginx的fastcgi模块 fastcgi_intercept_errors on; fastcgi_pass 127.0.0.1:9000; #nginx fastcgi进程监听的IP地址和端口 } }
- 3.3 php-fpm.conf
即:php-fpm模块监听127.0.0.1:9000端口,等待请求到来去处理。
-
3.4 运行
-
3.5 php-fpm worker 运行原理
原文出自https://segmentfault.com/a/1190000007322358?utm_source=tag-newest
如果大家喜欢看小说可以到,183小说网
来源:https://www.cnblogs.com/xiaobaiskill/p/10899060.html