nginx + php-fpm 运行原理
一、关于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 运行
.png)
3.5 php-fpm worker 运行原理

原文出自https://segmentfault.com/a/1190000007322358?utm_source=tag-newest
如果大家喜欢看小说可以到,183小说网
nginx + php-fpm 运行原理的更多相关文章
- Nginx与PHP-FPM运行原理详解
目录 1. 代理与反向代理 1. 正向代理:访问google.com 2. 反向代理:通过反向代理实现负载均衡 2. 初识Nginx与PHP-FPM 1. Nginx是什么 2. CGI与FastCG ...
- Nginx FastCGI的运行原理
http://www.cnblogs.com/yinshoucheng-golden/p/6474034.html
- nginx如何调用PHP(nginx+php运行原理)
采用nginx+php作为webserver的架构模式,在现如今运用相当广泛.然而第一步需要实现的是如何让nginx正确的调用php.由于nginx调用php并不是如同调用一个静态文件那么直接简单,是 ...
- Nginx+FastCGI运行原理(一)
1 实战Nginx与PHP(FastCGI)的安装.配置与优化 1.1 什么是 FastCGI FastCGI是一个可伸缩地.高速地在HTTP server和动态脚本语言间通信的接口.多数流行的HTT ...
- (转)Apache和Nginx运行原理解析
Apache和Nginx运行原理解析 原文:https://www.server110.com/nginx/201402/6543.html Web服务器 Web服务器也称为WWW(WORLD WID ...
- Nginx 解析PHP的原理 | CGI、FastCGI及php-fpm的关系
Nginx解析PHP的原理,CGI/FastCGI以及PHP-Fpm的关系. 一.PHP+Nginx应运而生的场景.随着互联网的发展,用户对此接受面广,数据流的增大使得Web端的运行承载压力日益增大, ...
- CGI 和 FastCGI 协议的运行原理
目录 介绍 深入CGI协议 CGI的运行原理 CGI协议的缺陷 深入FastCGI协议 FastCGI协议运行原理 为什么是 FastCGI 而非 CGI 协议 CGI 与 FastCGI 架构 再看 ...
- Nginx解析PHP的原理 | CGI、FastCGI及php-fpm的关系
Nginx解析PHP的原理,CGI/FastCGI以及PHP-Fpm的关系. 一.PHP+Nginx应运而生的场景.随着互联网的发展,用户对此接受面广,数据流的增大使得Web端的运行承载压力日益增大, ...
- 【转】CGI 和 FastCGI 协议的运行原理
介绍 深入CGI协议 CGI的运行原理 CGI协议的缺陷 深入FastCGI协议 FastCGI协议运行原理 为什么是 FastCGI 而非 CGI 协议 CGI 与 FastCGI 架构 再看 Fa ...
随机推荐
- [Python3网络爬虫开发实战] 1.1-Python3的安装
既然要用Python 3开发爬虫,那么第一步一定是安装Python 3.这里会介绍Windows.Linux和Mac三大平台下的安装过程. 1. 相关链接 官方网站:http://python.org ...
- python爬取豆瓣小组700+话题加回复啦啦啦python open file with a variable name
需求:爬取豆瓣小组所有话题(话题title,内容,作者,发布时间),及回复(最佳回复,普通回复,回复_回复,翻页回复,0回复) 解决:1. 先爬取小组下,所有的主题链接,通过定位nextpage翻页获 ...
- 分金币 (UVA 11300)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33899 思路:推公式,发现可以转化为求给定n个数,求到所有点距离之和最小的点 ...
- lucas定理和组合数学
自湖南长沙培训以来的坑...一直未填,今天把这个问题解决掉. 参考: 1.http://www.cnblogs.com/Var123/p/5523068.html 2.http://blog.csdn ...
- 3.3.3 char 类型
char类型原本用于表示单个字符.不过,现在情况已经有所变化.如今,有些Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个 char 值. char类 ...
- MVC系统学习2—MVC路由
在MVC下不是通过对物理文件的映射来实行访问的,而是通过定义后的路由Url来实现访问的.在前一篇讲到我们是在全局文件下进行路由配置. routes.MapRoute( & ...
- [K/3Cloud]调用动态表单时,传递自定义参数
插件中在调用动态表单时,通过DynamicFormShowParameter的CustomParams,增加自定义的参数. private void ShowMaterialStock() { obj ...
- 网线切割&切绳子
题目描述 Wonderland居民决定举行一届地区性程序设计大赛.仲裁委员会志愿负责这次赛事并且保证会组织一次有史以来最公正的比赛.为此,所有参赛者的电脑和网络中心会以星状网络连接,也就是说,对每个参 ...
- 在代码动态设置RelativeLayout的属性,比如layout_below
( (RelativeLayout.LayoutParams)holder.ivLvDivider.getLayoutParams()).addRule(RelativeLayout.BELOW, R ...
- [bzoj1507][Usaco2009 Hol]Transmission Delay 传输谍延时_动态规划
Transmission Delay 传输谍延时 bzoj-1581 Usaco-2009 Hol 题目大意:题目链接. 注释:略. 想法: 动态规划. 首先我们考虑从后往前dp.(最近好多题都是从后 ...