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

来源:互联网 发布:java开源app 编辑:程序博客网 时间:2024/06/07 19:25

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

原创粉丝点击