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 ...
随机推荐
- idea必选配置
参考: IDEA配置
- PyQt5Icon图标(Icon)无法显示问题
PyQt5中设置图标无法显示 以下源码来源PyQt5教程http://zetcode.com/gui/pyqt5/firstprograms/ import sys from PyQt5.QtWidg ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- String与StringBuffer,StringBuilder
在java中有3个类来负责字符的操作. 1.Character 是进行单个字符操作的, 2.String 对一串字符进行操作.不可变类. 3.StringBuffer 也是对一串字符进行操作,但是可变 ...
- [luoguP3052] [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper(DP)
传送门 输出被阉割了. 只输出最少分的组数即可. f 数组为结构体 f[S].cnt 表示集合 S 最少的分组数 f[S].v 表示集合 S 最少分组数下当前组所用的最少容量 f[S] = min(f ...
- vue.js 利用组件之间通讯,写一个弹出框例子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [K/3Cloud] K/3 Cloud1.0怎样和2.0共存在一台服务器上
第一步:安装Cloud1.0,创建管理中心,创建业务数据中心,备份管理数据库和业务数据库,并且备份安装目录: 第二步:卸载Cloud1.0,清理安装目录,安装Cloud2.0,创建管理中心,创建业务数 ...
- Luogu P1257 平面上的最接近点对 暴力
这道题数据不大 两点距离用勾股定理求 #include<iostream> #include<cmath> using namespace std; struct node{ ...
- 美河LINUX 内核学习视频
Linux内核从原理到代码详解 培训视频 Linux内核源码研读与实战演练 [7.10][美河资料发布小组@aipepsi][linux内核分析视频教程] 炼数成金Linux内核探秘 [11.23][ ...
- 查看表空间使用率及shrink 表空间
首先,可以通过下面的sql statement来查看表空间的使用情况.注意,该语句是在10g下测试过. SELECT FREE.TABLESPACE_NAME, FREE.FREE_SPACE/TOT ...