阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx+Php-fpm运行原理详解

401次阅读
没有评论

共计 3559 个字符,预计需要花费 9 分钟才能阅读完成。

一、代理与反向代理

现实生活中的例子

1、正向代理:访问 google.com

Nginx+Php-fpm 运行原理详解

如上图,因为目前 google 已被和谐,我们需要 vpn 才能科学访问 google.com。

vpn 对于“我们”来说,是可以感知到的(我们连接 vpn)vpn 对于”google 服务器”来说,是不可感知的(google 只知道有 http 请求过来)。

对于人来说可以感知到,但服务器感知不到的服务器,我们叫他正向代理服务器。

2、反向代理:通过反向代理实现负载均衡

Nginx+Php-fpm 运行原理详解

如上图,我们访问 baidu.com 的时候,baidu 有一个代理服务器,通过这个代理服务器,可以做负载均衡,路由到不同的 server。

此代理服务器, 对于“我们”来说是不可感知的(我们只能感知到访问的是百度的服务器,不知道中间还有代理服务器来做负载均衡)。

此代理服务器,对于”server1 server2 server3”是可感知的 (代理服务器负载均衡路由到不同的 server)
对于人来说不可感知,但对于服务器来说是可以感知的,我们叫他反向代理服务器

总结

说白了:“正向”、“反向”是相对于人的感知来说的。人能感受到的代理就是正向代理,人感受不到的代理就是反向代理。

二、初识 Nginx 与 Php-fpm

Nginx 是什么

Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 服务器。

Php-fpm 是什么

1、cgi、fast-cgi 协议

cgi 的历史

早期的 webserver 只处理 html 等静态文件,但是随着技术的发展,出现了像 php 等动态语言。
webserver 处理不了了,怎么办呢?那就交给 php 解释器来处理吧!
交给 php 解释器处理很好,但是,php 解释器如何与 webserver 进行通信呢?

为了解决不同的语言解释器 (如 php、python 解释器) 与 webserver 的通信,于是出现了 cgi 协议。只要你按照 cgi 协议去编写程序,就能实现语言解释器与 webwerver 的通信。如 php-cgi 程序。

fast-cgi 的改进

有了 cgi 协议,解决了 php 解释器与 webserver 通信的问题,webserver 终于可以处理动态语言了。但是,webserver 每收到一个请求,都会去 fork 一个 cgi 进程,请求结束再 kill 掉这个进程。这样有 10000 个请求,就需要 fork、kill php-cgi 进程 10000 次。

有没有发现很浪费资源?

于是,出现了 cgi 的改良版本,fast-cgi。fast-cgi 每次处理完请求后,不会 kill 掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。这样每次就不用重新 fork 一个进程了,大大提高了效率。

2、php-fpm 是什么

php-fpm 即 php-Fastcgi Process Manager.
php-fpm 是 FastCGI 的实现,并提供了进程管理的功能。
进程包含 master 进程和 worker 进程两种进程。
master 进程只有一个,负责监听端口,接收来自 Web Server 的请求,而 worker 进程则一般有多个(具体数量根据实际需要配置),每个进程内部都嵌入了一个 PHP 解释器,是 PHP 代码真正执行的地方。

三、Nginx 如何与 Php-fpm 结合

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

下面我们来配置一个全新的 Nginx+Php-fpm

1、配置 nginx.conf 文件

进入 nginx 目录下,编辑 nginx.conf 文件。
如图,在 nginx.conf 最后一行,添加 include 文件

Nginx+Php-fpm 运行原理详解

2、添加对应的 server

进入上面 include 的路径,添加一个 server.

Nginx+Php-fpm 运行原理详解

下面我们解释一下配置项的含义:

server {listen       80; # 监听 80 端口,接收 http 请求
    server_name  www.example.com; # 就是网站地址
    root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径
    # 路由到网站根目录 www.example.com 时候的处理
    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 地址和端口
    }
}

总而言之:当我们访问 www.example.com 的时候,处理流程是这样的:

  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 的 php-fpm 来处理这个请求

打开 php-fpm.conf 文件,我们看到如下配置:

Nginx+Php-fpm 运行原理详解

即:php-fpm 模块监听 127.0.0.1:9000 端口,等待请求到来去处理。

四、总结

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 返回给浏览器

五、效果展示

1、启动 nginx 与 php-fpm 模块

Nginx+Php-fpm 运行原理详解

启动成功,我们查看 php-fpm 进程

Nginx+Php-fpm 运行原理详解

如上图,有一个 master 进程,3 个 worker 进程。

2、在网站目录下建立文件

我们编辑文件如下图:

Nginx+Php-fpm 运行原理详解

3、访问网站

Nginx+Php-fpm 运行原理详解

下面关于 Nginx 的文章您也可能喜欢,不妨参考下:

Nginx 403 forbidden 的解决办法  http://www.linuxidc.com/Linux/2017-08/146084.htm

CentOS 7 下 Nginx 服务器的安装配置  http://www.linuxidc.com/Linux/2017-04/142986.htm

CentOS 上安装 Nginx 服务器实现虚拟主机和域名重定向  http://www.linuxidc.com/Linux/2017-04/142642.htm

CentOS 6.8 安装 LNMP 环境(Linux+Nginx+MySQL+PHP)http://www.linuxidc.com/Linux/2017-04/142880.htm

Linux 下安装 PHP 环境并配置 Nginx 支持 php-fpm 模块  http://www.linuxidc.com/Linux/2017-05/144333.htm

Nginx 服务的 SSL 认证和 htpasswd 认证  http://www.linuxidc.com/Linux/2017-04/142478.htm

Ubuntu 16.04 上启用加密安全的 Nginx Web 服务器  http://www.linuxidc.com/Linux/2017-07/145522.htm

Linux 中安装配置 Nginx 及参数详解  http://www.linuxidc.com/Linux/2017-05/143853.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

CentOS 7.2 下 Nginx+PHP+MySQL+Memcache 缓存服务器安装配置  http://www.linuxidc.com/Linux/2017-03/142168.htm

CentOS6.9 编译安装 Nginx1.4.7  http://www.linuxidc.com/Linux/2017-06/144473.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/148105.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3559字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7993677
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...