Nginx与PHP如何协同工作
要说Nginx与PHP如何协同工作,首先得说CGI和FastCGI两个协议。
CGI是Web Server与后台语言交互的协议,有了这个协议,开发者可以使用任何语言处理Web Server发来的请求,动态的生成内容。但CGI有个致命缺点,那就是每处理一个请求都需要fork一个全新的进程,这样低效的方式明显不能满足需求,这样FastCGI诞生了。FastCGI顾名思义为更快的CGI。它允许在一个进程内处理多个请求,而不是一个请求处理完毕就直接结束进程,性能上有了很大的提升。
FPM就是FastCGI的实现,任何实现了FastCGI协议的Web Server都能够与之通信。
FPM是一个PHP进程管理器,包含master进程和worker进程两种:master只有一个,负责监听端口,接收来自Web Server的请求,而worker则一般有多个,每个worker内部都嵌入一个PHP解释器,是PHP代码真正执行的地方。
FPM接收到请求,到处理完毕,具体流程如下:
1.FPM的master进程接收到请求
2.master进程根据配置指派特定的worker进程进行请求处理,如果没有可用进程,返回错误,这也是配合Nginx遇到502错误的原因。
3.worker进程处理请求,如果超时,返回504
4.请求处理结束,返回结果。
为了能使Nginx理解FastCGI协议,Nginx提供了FastCGI模块来将http请求映射为对应FastCGI请求。
Nginx的FastCGI模块提供了fastcgi_param指令来主要处理这些映射关系,主要完成的工作是将Nginx中的变量翻译成PHP中能够理解的变量。
除此之外,非常重要的就是fastcgi_pass指令了,用来指定FPM进程监听的地址,Nginx会把所有的PHP请求翻译成FastCGI请求后再发送到FPM地址
Nginx与PHP如何协同工作的更多相关文章
- nginx学习(四):nginx处理web请求机制
worker抢占机制 如下图所示,如果有一个请求,各个work进程会进行争锁.谁抢到是谁的.需要注意Nginx 所有worker进程协同工作的关键(共享内存). [accept_mutex的介绍] 当 ...
- 在 Ubuntu 上配置高性能的 HHVM 环境
HHVM全称为 HipHop Virtual Machine,它是一个开源虚拟机,用来运行由 Hack(一种编程语言)和 PHP 开发应用.HHVM 在保证了 PHP 程序员最关注的高灵活性的要求下, ...
- OpenResty 最佳实践 (2)
此文已由作者汤晓静授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. lua 协程与 nginx 事件机制结合 文章前部分用大量篇幅阐述了 lua 和 nginx 的相关知识,包 ...
- 二十三.Subversion基本操作、使用Subversion协同工作、制作nginx的RPM包
1.Subversion基本操作 web1 1.1 安装Subversion服务器 ]# yum -y install subversion 1.1.1 创建版本库 ]# mkdir /var/svn ...
- 高级运维(七):Subversion基本操作、使用Subversion协同工作、制作nginx的RPM包
一.Subversion基本操作 目标: 本案例要求先快速搭建好一台Subversion服务器,并测试该版本控制软件: 1> 创建版本库 2> 导入初始化数据 3> 检出 ...
- windows下配置nginx+php环境
刚看到nginx这个词,我很好奇它的读法(engine x),我的直译是"引擎x",一般引"擎代"表了性能,而"x"大多出现是表示" ...
- windows下配置nginx+php
[转] http://www.cnblogs.com/fengyuqing/p/php_nginx.html 1.首先需要准备的应用程序包. nginx:nginx/Windows-1.0.4 php ...
- (转)windows下配置nginx+php环境
原文地址 http://www.cnblogs.com/huayangmeng/archive/2011/06/15/2081337.html 刚看到nginx这个词,我很好奇它的读法(engine ...
- 转:Nginx RTMP 功能研究
看点: 1. Nginx 配置信息与使用. (支持 rtmp与HLS配置) 2. 有ffmpeg 编译与使用, 命令行方式来测试验证客户端使用. 转自:http://blog.cs ...
随机推荐
- Miller Rabin 算法简介
0.1 一些闲话 最近一次更新是在2019年11月12日.之前的文章有很多问题:当我把我的代码交到LOJ上,发现只有60多分.我调了一个晚上,尝试用{2, 3, 5, 7, 11, 13, 17, 1 ...
- C++入门经典-例4.11-名称空间的定义和使用
1:名称空间,也成为名字空间.命名空间,关键字为namespace.我们经常使用这样一条语句: using namespace std: 我们要使用标准输入输出流,除了包含它们所在的头文件外,还必须使 ...
- c++使用openssl操作秘钥相关
PEM_write_bio_RSAPublicKey(pub, keypair);//生成-----BEGIN RSA PUBLIC KEY-----类型的公钥 PEM_write_bio_RSA_P ...
- DeepFaceLab: 可视化交互式合成功能简介!
DeepFaceLab在沉寂了几个月后(目测Iperov同志讨生活去了),在8月下旬又迎来了重大更新.我总结了一下,主要是更新了三大功能. 新增Avatar模型 交互式转换器 半脸模型支持FAN ...
- 方差分析(python代码实现)
python机器学习-乳腺癌细胞挖掘(欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章) https://study.163.com/course/introduction ...
- gromacs2018使用踩坑记--insert-molecules
1] gmx插入分子[ -f [<.gro / .g96 / ...>] ] [ -ci [<.gro / .g96 / ...>] ] [ -ip [<.dat> ...
- Orchestrator MySQL主库故障切换的几种类型
Orchestrator 对MySQL主库的故障切换分为自动切换和手动切换. 手动切换又分为recover.force-master-failover.force-master-takeover以及g ...
- [flask_sqlalchemy ]插入数据时发生错误后如何处理
示例代码: def add_supplier(): form = request.form if request.method == 'POST': print(form) supplier = Su ...
- LinkedHashSet 的实现原理
原文:http://wiki.jikexueyuan.com/project/java-collection/linkedhashset.html LinkedHashSet 概述 思考了好久,到底要 ...
- 非GUI运行Jmeter,jtl文件没有响应数据的解决办法
一.问题 Jmeter官方一直强调要在非GUI模式下运行Jmeter:Run your JMeter test in command-line non-GUI mode. 但在非GUI模式下运行生成的 ...