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 运行
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 ...
随机推荐
- java解析从接口获取的json内容并写到excle(只写与标题匹配的值,并非把所有的接口返回值都写进去)
需求:从接口中获取的一个json数组中有多个对象,每个对象中的值并非都需要,只需查出标题中的几项对应的值即可.且还需要按某个字段排序后依次写到excel 实现方法如下: package jansonD ...
- Python学习第二阶段Day2,模块time/datetime、random、os、sys、shutil
1.Time. Datetime(常用) UTC时间:为世界标准时间,时区为0的时间 北京时间,UTC+8东八区 import time print(time.time()) # timestamp ...
- java导出word的6种方式(转发)
来自: http://www.cnblogs.com/lcngu/p/5247179.html 最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. 目前 ...
- 介绍一个比较酷东西:HTML5 桌面通知(Notification API)
Notification API 是 HTML5 新增的桌面通知 API,用于向用户显示通知信息.该通知是脱离浏览器的,即使用户没有停留在当前标签页,甚至最小化了浏览器,该通知信息也一样会置顶显示出来 ...
- Inversion
Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4176 Accepted: 1857 Description The i ...
- FreeMarker与Servlet结合示例
一.最原始示例 1.引入POM依赖 <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker --> <de ...
- VM Workstation 虚拟机下如何安装VMtools
不同版本Linux原理类似,这里以Debian为例. 1 根据提示点击Install Tools,CDROM中出现VmwareTools的安装包,在你的主文件夹下新建一个文件夹(随便叫什么都行,我新建 ...
- BZOJ 3439 Kpm的MCpassword Trie树+可持久化线段树
题目大意:给定n个字符串,对于每一个字符串求以这个字符串为后缀的字符串中第k小的编号 首先将字符串反转 那么就变成了对于每一个字符串求以这个字符串为前缀的字符串中第k小的编号 然后考虑对字符串排序 那 ...
- android 请求网络异步载入
/** * 封装ProecssDialog对话框 * */ public class LoadDialog extends ProgressDialog { private String title ...
- leetcode笔记:Wiggle Sort
一. 题目描写叙述 Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nu ...