一、关于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. Rsync远程同步工具使用

    rsync远程同步工具使用 Rsync(remote synchronize) 是一个远程数据同步工具,可以使用"Rsync算法"同步本地和远程主机之间的文件.Rsync的好处是只 ...

  2. Python 开发面试题

    Python部分 将一个字符串逆序,不能使用反转函数 求从10到100中能被3或5整除的数的和 What is Python? What are the benefits of using Pytho ...

  3. SQL学习笔记:基础SQL语句

    目录 语句特点 进入数据库 基本查询语句 SELECT DISTINCT WHERE AND/OR/NOT :逻辑运算符 ORDER BY :排序 基本修改语句 INSERT:添加语句 UPDATE: ...

  4. 【Codeforces 1030D】Vasya and Triangle

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 参考这篇题解:https://blog.csdn.net/mitsuha_/article/details/82825862 为什么可以保证m ...

  5. BNUOJ 19792 Airport Express

    Airport Express Time Limit: 1000ms Memory Limit: 131072KB This problem will be judged on UVA. Origin ...

  6. HDU 1203 背包问题

    题目大意: 根据学校的申请费用,根据已有的钱得到最大的offer率 这里很明显就是一个价值为概率的背包问题 计算两个offer合并的概率 为a + b - a*b #include <cstdi ...

  7. CodeForces 367E Sereja and Intervals

    CodeForces 3 67E (109 + 7). Two ways are considered distinct if there is such j(1 ≤ j ≤ n), that the ...

  8. git巧妙命令行

    git cherry-pick c7081607cfd1bfa99b6e6c70c208e71fbd8767ae

  9. git远程上传文件

    [第一步]建立先仓库 第一步的话看一般的提示就知道了,在github新建一个repository(谷歌可以解决),都是可视化的界面操作,所以难度不大.或者看这里:https://help.github ...

  10. nginx,tornado,websocket,supervisord配置成型

    因为要上生产环境,所以配置还是专业一些比较好. nginx.conf upstream websocket_host { server 127.0.0.1:9527; } location /ws_l ...