nginx+php运行原理(以及nginx和php-fpm)

原创 2017年09月08日 09:23:16

nginx服务器作用

1,前端服务器:负责http请求解析转发,或者处理静态请求。轻量级,并发量高,可以作为反向代理,负载均衡。
应用服务器:负责调用某种语言的解释器,或则某某种语言写的程序,接受http请求,按照开发者意图做出动作,把结果返回给请求。

Fastcgi

cgi:全称common gateway interface 是应用服务器与语言相关的处理程序之间的接口。
处理程序调用这个接口,应用服务器调用这个接口。传入http中各参数,实现动态请求。每次收到请求时,应用服务器都要新建一个进程,调用处理程序,使用完之后就结束这个进程。进程的建立与释放都比较消耗资源,因此这么做的效率并不高。
fastcgi是对cgi的改进。它随着nginx启动一并驻留内存中,当请求到达时,处理之,处理完之后并不结束这个进程,而是继续等待下一次连接。
首先,Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对进程的管理。

PHP-fpm与PHP-cgi

php-cgi是语言的解释器。之前是请求到来时候,都要新开一个进程启动php-cgi,重新载入配置、数据结构,初始化运行环境.更新PHP配置之后,需要重启PHP-cgi,配置才能生效。
php-fpm实现了fastcgi的管理器。常驻内存,负责管理各个php-cgi进程。可以提升运行效率,实现平滑重启。

在机器上配置PHP-fpm

在nginx.conf文件中,php相关的location块中配置fasecgi_pass,指向php-fpm监听的端口。php-fpm的配置文件中,监听某个端口。貌似配置文件中默认都是127.0.0.1:9000

备注:

php-fpm是什么?
全称: php-fastcgi process manager
php-fpm是fastcgi的实现,并提供了进程管理功能。进程包含了master和worker两种进程。
master进程只有一个,负责监听端口,接收webserver请求;然而worker进程有多个,每个进程都嵌入了php解释器,是php代码真正执行的地方。

Nginx如何与Php-fpm结合

Nginx不只有处理http请求的功能,还能做反向代理。Nginx通过反向代理功能将动态请求转向后端Php-fpm。

以下看下nginx.conf的配置文件server{}
server{
listen 80;
server_name www.explame.com;
root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径
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地址和端口
}
}
nginx与php-fpm结合
整个执行流程如下:
www.example.com
|
|
Nginx
|
|
路由到www.example.com/index.php
|
|
加载nginx的fast-cgi模块
|
|
fast-cgi监听127.0.0.1:9000地址
|
|
www.example.com/index.php请求到达127.0.0.1:9000
|
|
php-fpm 监听127.0.0.1:9000
|
|
php-fpm 接收到请求,启用worker进程处理请求
|
|
php-fpm 处理完请求,返回给nginx
|
|
nginx将结果通过http返回给浏览器

查看php-fmp进程

sudo nginx -s reload
sudo php-fpm
查看下:
ps -ef | grep fpm

Nginx+PHP服务器运行原理初探

Nginx+PHP服务器运行原理初探
  • u012618959
  • u012618959
  • 2016年03月13日 17:58
  • 2256

nginx+php的配置与原理

采用nginx+php作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如同调用一个静态文件那么直接简单,是...
  • dengjiexian123
  • dengjiexian123
  • 2016年11月26日 23:29
  • 36352

Nginx+Php-fpm运行原理详解

代理与反向代理现实生活中的例子1、正向代理:访问google.com如上图,因为google被墙,我们需要vpn翻墙才能访问google.com。 vpn对于“我们”来说,是可以感知到的(我们连接...
  • u013474436
  • u013474436
  • 2016年10月30日 16:31
  • 13849

mysql、nginx、php-fpm、php配置优化

这里只列出了少数参数,根据工作中实际使用到的和结果,间断更新。 php.inizlib.output_compression=On; zlib.output_compression_level=3; ...
  • Ligongxiang123
  • Ligongxiang123
  • 2017年05月25日 16:20
  • 265

NGINX+PHP(FASTCGI)好,还是NGINX+APACHE+PHP好?

http://www.oschina.net/question/1047141_151910?sort=default&p=2#tags_nav GINX+PHP(FASTCGI)好,还是N...
  • loongwong2011
  • loongwong2011
  • 2016年09月30日 11:46
  • 2272

Nginx + PHP(php-fpm) 安装以及配置

这篇文章写了两次,真悲催,保存提示成功,刷新页面后,啥都找不着了原来在草稿箱。 一、虚拟机Linux(CentOS7)的安装以及网络设置 1.新建虚拟机的网络设置,采用桥接模式,分配局域网内的独立ip...
  • redvesper
  • redvesper
  • 2017年02月20日 11:48
  • 641

ANMPP 12已经发布,安卓上的php环境 - Android NGINX MYSQL PGSQL PHP-FPM

http://www.linuxdiyf.com/viewarticle.php?id=536782 ANMPP是Android NGINX MYSQL PGSQL PHP-FPM的缩写 ANM...
  • ztguang
  • ztguang
  • 2016年05月04日 11:27
  • 685

WIN10配置NGINX+PHP环境

WIN10配置NGINX+PHP环境本文配置基于 nginx-1.11.8 php-7.1.0-nts-Win32-VC14-x64 修改配置 修改php.ini 去掉注释cgi.fix_pathin...
  • yfj300
  • yfj300
  • 2017年01月18日 12:44
  • 828

Nginx解析PHP的原理 | CGI、FastCGI及php-fpm的关系

Nginx解析PHP的原理,CGI/FastCGI以及PHP-Fpm的关系. 一、PHP+Nginx应运而生的场景. 随着互联网的发展,用户对此接受面广,数据流的增大使得Web端的运行承载压力日益...
  • qq_36031499
  • qq_36031499
  • 2016年12月28日 18:50
  • 1525

php 、cgi 、fastcgi 、php-fpm之间的运行原理和机制分享二

FASTCGI:WEB服务器与处理程序之间通信的一种协议,是CGI的改进方案。  FASTCGI是常驻型的CGI,它可以一直运行,在请求到达时,不会花费时间去fork一个进程来处理。 Fastcg...
  • ahjxhy2010
  • ahjxhy2010
  • 2016年01月12日 16:36
  • 1122
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nginx+php运行原理(以及nginx和php-fpm)
举报原因:
原因补充:

(最多只允许输入30个字)