一、关于nginx

  • 1.1 简单认知
我们都知道nginx 是web服务器。
也知道 用户访问时通过ip和端口访问 nginx。
那么nginx 是如何 通过php 获取数据并返回数据的呢?
  • 1.2 代理与反向代理

    • 1.2.1 正向代理 : 访问google.com

        如上图,因为google 被墙,我们需要vpn翻墙才能访问google.com
    
        vpn 对于“我们”来说,是可以被感知的(我们连接了vpn)
    vpn 对于“google服务器”来说,是不可感知的(google 只知道有http 请求过来)。
    • 1.2.2 反向代理

        如上图 ,我们访问baidu.com 的时候,baidu有一个代理服务器,通过这个代理服务器,可以做负载均衡,路由到不同的server
    
        代理服务器 对于 “我们” 来说,是不可感知的(我们只能感知到访问的是百度的服务器,不知道中奖还有代理服务器来在负载均衡)。
    代理服务器,对于“server1,server2 server3” 是可感知的(代理服务器负载均衡路由到不同的server)
    • 1.2.3 总结
        说白了:“正向”、“反向” 是相对于人的感知来说的。
    人能感受到的就是正向代理,人感受不到的就是反向代理。

二、php-fpm

  • 2.1 cgi 协议

    `在说php-fpm 之前,先了解一下,什么的是cgi

    • 2.1.1 cgi
        百度百科的解释:
    cgi 即 通过网关接口
    cgi 是 协议
    CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。
    CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。
    CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
    • 2.1.2 cgi 历史
        早期的webserver 只能处理HTML等静态文件,但是随着技术的发展,出现了php等动态语言,
    此时的webserver 已处理不了,那怎么办的,那就交给PHP解释器处理吧
    交给解释器处理很好,但是如何使得解释器与webserver 之间通讯呢?
    • 2.1.3 cgi 的出现
        cgi协议 的出现是为了解决webserver 和 解释器(php,java,python)之间的通讯问题,
    只要你按照cgi协议编写程序,就能实现语言解释器与webserver之间的通讯。如php-cgi程序
    • 2.1.4 cgi 程序 结合webserver 的运行方式
        webserver 接收到请求,会fork(创建) 一个cgi 程序,处理请求,处理完成后 kill cgi程序。
    
        问题: 如果有10000 次请求 就会创建 10000 个cgi 程序。是不是很浪费资源?
  • 2.2 fastcgi 协议

    为了解决cgi 程序 执行浪费资源的问题

    2.2.1 fastcgi

        百度百科的解释:
    FastCGI全称 快速通用网关接口(FastCommonGatewayInterface)。

    2.2.2 fastcgi 的出现

        为了改良cgi 程序运行时资源的浪费,出现了fastcgi 协议。

    2.2.3 fastcgi 程序

        fastcgi 程序, 每次处理完请求后,不会kill 掉这个进程,而是保留这个进程,
    使这个进程可以一次处理多个请求。这样不用每次重新fork一个进程了,大大提高了效率
  • 2.3 php-fpm (fastcgi 进程管理器)

    php-fpm即php-Fastcgi Process Manager.
php-fpm是 FastCGI 的实现,并提供了进程管理的功能。 进程包含 master 进程和worker 进程两种进程。
master 进程只有一个,负责监听端口,接收webserver的转发,而worker 进程,一般有多个(具体根据配置),
每个进程内部都嵌入了一个php解释器,是php代码执行的地方。 执行操作:
master进程监听端口,接收webserver的请求,交友worker进程执行。

三、nginx 与 php-fpm 结合

上面我们说过nginx不只有http请求的功能,还能做反向代理。

nginx 通过反向代理功能将动态请求转向后端php-fpm.

  • 3.1 nginx.conf 配置

  • 3.2 添加对应的server

 解释一下上面的配置

 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地址和端口
} }
  • 3.3 php-fpm.conf

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

  • 3.5 php-fpm worker 运行原理

原文出自https://segmentfault.com/a/1190000007322358?utm_source=tag-newest

如果大家喜欢看小说可以到,183小说网

nginx + php-fpm 运行原理的更多相关文章

  1. Nginx与PHP-FPM运行原理详解

    目录 1. 代理与反向代理 1. 正向代理:访问google.com 2. 反向代理:通过反向代理实现负载均衡 2. 初识Nginx与PHP-FPM 1. Nginx是什么 2. CGI与FastCG ...

  2. Nginx FastCGI的运行原理

    http://www.cnblogs.com/yinshoucheng-golden/p/6474034.html

  3. nginx如何调用PHP(nginx+php运行原理)

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

  4. Nginx+FastCGI运行原理(一)

    1 实战Nginx与PHP(FastCGI)的安装.配置与优化 1.1 什么是 FastCGI FastCGI是一个可伸缩地.高速地在HTTP server和动态脚本语言间通信的接口.多数流行的HTT ...

  5. (转)Apache和Nginx运行原理解析

    Apache和Nginx运行原理解析 原文:https://www.server110.com/nginx/201402/6543.html Web服务器 Web服务器也称为WWW(WORLD WID ...

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

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

  7. CGI 和 FastCGI 协议的运行原理

    目录 介绍 深入CGI协议 CGI的运行原理 CGI协议的缺陷 深入FastCGI协议 FastCGI协议运行原理 为什么是 FastCGI 而非 CGI 协议 CGI 与 FastCGI 架构 再看 ...

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

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

  9. 【转】CGI 和 FastCGI 协议的运行原理

    介绍 深入CGI协议 CGI的运行原理 CGI协议的缺陷 深入FastCGI协议 FastCGI协议运行原理 为什么是 FastCGI 而非 CGI 协议 CGI 与 FastCGI 架构 再看 Fa ...

随机推荐

  1. 51nod 1285 山峰和分段

    [题解] 枚举n的各个因数作为段长,O(n)判断每一段内是否有山峰即可. #include<cstdio> #include<cstring> #include<algo ...

  2. HDU 5217 Brackets

    [题意概述] 给出一个有左括号和右括号的序列,左边的左括号和右边的右括号可以合并.现在要求你维护这个序列,支持两种操作: 1,翻转某个位置的括号: 2,查询区间[L,R]合并后第k个括号在原序列中的位 ...

  3. RequestMapping_请求方式

    [映射请求参数.请求方法或请求头] 1.@RequestMapping 除了可以使用请求URL 映射请求外,还可以使用请求方法.请求参数及请求头映射请求. 2.@RequestMapping 的val ...

  4. SGU - 321 - The Spy Network

    先上题目: 321. The Spy Network Time limit per test: 0.5 second(s)Memory limit: 65536 kilobytes input: st ...

  5. Windows中更新python模块的命令

    最近写爬虫,突然发现自己的动态的User-Agent用不了了,所以想可能是新版本出来了,旧的版本用不了了,坏掉了. 一时间想不起用什么命令了,网上查了一下,发现很简单,所以记录一下方便以后忘了的时候快 ...

  6. 邮票(codevs 2033)

    题目描述 Description 已知一个 N 枚邮票的面值集合(如,{1 分,3 分})和一个上限 K —— 表示信封上能够贴 K 张邮票.计算从 1 到 M 的最大连续可贴出的邮资. 例如,假设有 ...

  7. dubbo 学习1

    1.高性能优秀的服务框架,应用可通过高性能的RPC实现服务的输出和输入功能,可以和spring框架无缝集成. 2.主要核心部件 a.remoting 网络通信框架 实现了sync-over-asnc ...

  8. 基本的文件I/O

    基本的文件 I/O 抽象基类 Stream 支持读取和写入字节. Stream 集成了异步支持. 其默认实现根据其相应的异步方法来定义同步读取和写入,反之亦然. 所有表示流的类都是从 Stream 类 ...

  9. shell中的四种模式匹配

    POSIX为shell为进行模式匹配提供了四种参数替换结构(老版本的shell可能不支持),每种结构有两个参数:变量名(或变量号)及模式. 第一种模式:    ${variable%pattern}, ...

  10. springMVC和ckeditor图片上传

    springMVC和ckeditor图片上传 http://blog.csdn.net/liuchangqing123/article/details/45270977 修正一下路径问题: packa ...