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 ...
随机推荐
- react 的className动态修改
https://blog.csdn.net/suwyer/article/details/81481507(copy) <div style={{display: (index===this.s ...
- POJ 2299 Ultra-QuickSort (树状数组 && 离散化)
题意 : 给出一个数n(n<500,000), 再给出n个数的序列 a1.a2.....an每一个ai的范围是 0~999,999,999 要求出当通过相邻两项交换的方法进行升序排序时需要交换 ...
- 分治NTT:我 卷 我 自 己
感觉这种东西每次重推一遍怪麻烦的,就写在这里了. 说白了就是根据分治区间左端点是否为\(0\)分类讨论一下,一般是如果不是\(0\)就要乘\(2\),不过还是需要具体问题具体分析一下才好(就比如下面的 ...
- Spring Boot教程(二十八)通过JdbcTemplate编写数据访问
数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. 首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置: <depende ...
- H5 video全屏与取消全屏兼容
H5 video全屏与取消全屏各浏览器兼容, requestFullscreen()全屏方法,exitFullscreen()退出全屏方法.兼容各个浏览器与css3兼容一样加个前缀即可. // 全屏 ...
- 分布式-网络通信-线程(socket)
package OIO; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; i ...
- redis在分布式中的使用
作者:孤独烟 来自:http://rjzheng.cnblogs.com/ 为什么要用redis:为了并发和性能,使用redis做为缓冲 使用redis有什么缺点 主要是四个问题 (一)缓存和数据库双 ...
- linux如何查看所有的用户和组信息(转载)
[步骤一]cat /etc/passwdcat /etc/passwd查看所有的用户信息,详情如下图 [步骤二]cat /etc/passwd|grep 用户名 cat /etc/passwd|gre ...
- js style.display = "" 和style.display="none" 区别
style.display = "":是清除display样式,display将使用默认值(块元素会变成block,内联元素会变成inline)style.display=&quo ...
- Linux环境快速搭建elasticsearch6.5.4集群和Head插件
https://blog.csdn.net/boling_cavalry/article/details/86358716