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
- nginx+php运行原理(以及nginx和php-fpm)
- Nginx+Php-fpm运行原理详解
- Nginx+Php-fpm运行原理详解
- Nginx+Php-fpm运行原理详解
- Nginx+Php-fpm运行原理详解
- Nginx+Php-fpm运行原理详解
- Nginx+Php-fpm运行原理详解
- Nginx+Php-fpm运行原理详解
- Nginx+Php-fpm运行原理详解
- Nginx+Php-fpm运行原理详解
- Nginx+Php-fpm运行原理详解
- Nginx+Php-fpm运行原理详解
- Nginx+Php-fpm运行原理详解
- Nginx+Php-fpm运行原理详解
- 修改php-fpm和nginx运行用户
- Nginx + PHP(php-fpm) 安装以及配置
- nginx和php-fpm配置
- Nginx + PHP 运行原理
- HTML&CSS基础篇之十七:补充
- HaDoop_Kafka_常用命令
- 窗口组件
- 条件对抗网络
- F蚂蚁走杆问题
- nginx+php运行原理(以及nginx和php-fpm)
- Ruby中操作字符串的一些基本方法
- c# 对DataTable各种常用操作的源代码DataTableHelper
- ArcGIS Runtime for .Net Quartz开发探秘(二):构建第一个ArcGIS Runtime WPF应用程序
- jquery的安装引用地址和替代方式
- android adb命令实践研究
- Android APP常用的图标尺寸
- 某t社区培训的真相
- 选择排序