当前位置: 首页 > news >正文

Nginx处理php的步骤 处理请求的流程

为什么80%的码农都做不了架构师?>>>   hot3.png

nginx配置文件

location ~ .*\.(php|php5)?$
    {
        #fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi.conf;
    }

以上配置是处理.php结尾的文件,也就是php文件。意思是所有以.php为结尾的文件,都送到本机9000端口由php-cgi来处理。

Nginx的模块有三种角色:

    * handlers 处理http请求并构造输出
    * filters 处理handler产生的输出
    * load-balancers 当有多于一个的后端服务器时,选择一台将http请求发送过去

    一个handler有三种返回方式:正常;错误;放弃处理转由默认的handler来处理(典型地如处理静态文件的时候)。

       如果handler的作用是把请求反向代理到后端服务器,那么就是刚才说的模块的第三种角色load-balancer了。load-balancer主 要是负责决定将请求发送给哪个后端服务器。Nginx目前支持两种load-balancer模块:round-robin(轮询,处理请求就像打扑克时 发牌那样)和IP hash(众多请求时,保证来自同一ip的请求被分发的同一个后端服务器)。

       如果handler返回(译者注:就是http响应,即filter的输入)正确无误,那么fileter就被调用了。每个location配置里都可以 添加多个filter,所以说(比如)响应可以被压缩和分块。多个filter的执行顺序是编译时就确定了的。filter采用了经典的“接力链表 (CHAIN OF RESPONSIBILITY)”模式:一个filter被调用并处理,接下来调用下一个filter,直到最后一个filter被调用完成,Nginx 才真正完成响应流程。

       最帅的部分是在 filter链中,每个filter不会等待之前的filter完全完工,它可以处理之前filter正在输出的内容,这有一点像Unix中的管道。 Filter的操作都基于buffers_,buffer通常情况下等于一个页的大小(4k),你也可以在nginx.conf里改变它的大小。这意味 着,比如说,模块可以在从后端服务器收到全部的响应之前,就开始压缩这个响应并流化(stream to)给客户端了。好牛逼啊~ 总结一下上面的内容,一个典型的周期应当是这样的:当nginx接收到一个客户端发送 HTTP request → Nginx基于location的配置选择一个合适的handler → (如果有) load-balancer选择一个后端服务器 → Handler处理请求并顺序将每一个响应buffer发送给第一个filter → 第一个filter讲输出交给第二个filter → 第二个给第三个 → 第三个给第四个 → 以此类推 → 最终响应发送给客户端

       这里如果是请求的php文件,location就会把请求送到本机9000端口由php-cgi来处理并构造输出buffer,再把buffer发送给第一个filter,一直传递到最后一个filter,最终响应发送给客户端。



转载于:https://my.oschina.net/cmcm/blog/196158

相关文章:

  • python 重试装饰器
  • JQuery和Servlet来实现跨域请求
  • 线程同步机制
  • PHP泛域名应用
  • keytool 用法总结
  • MediaPlayer视频播放
  • Android文本框实现搜索和清空效果
  • strongweak
  • powershell最常用的命令之(一)
  • 左固定右边自适应框架
  • logrotate工具的使用
  • ping,
  • php操作mysql数据库类代码
  • 恶补英语-1
  • 随机选择实现
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • ➹使用webpack配置多页面应用(MPA)
  • ERLANG 网工修炼笔记 ---- UDP
  • ES6语法详解(一)
  • JavaScript 基本功--面试宝典
  • Java知识点总结(JavaIO-打印流)
  • JS函数式编程 数组部分风格 ES6版
  • Swoft 源码剖析 - 代码自动更新机制
  • Unix命令
  • 聊聊sentinel的DegradeSlot
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 使用common-codec进行md5加密
  • 手写一个CommonJS打包工具(一)
  • 怎么把视频里的音乐提取出来
  • No resource identifier found for attribute,RxJava之zip操作符
  • Java性能优化之JVM GC(垃圾回收机制)
  • 容器镜像
  • ​如何在iOS手机上查看应用日志
  • ​学习一下,什么是预包装食品?​
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (0)Nginx 功能特性
  • (04)odoo视图操作
  • (2020)Java后端开发----(面试题和笔试题)
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C语言)字符分类函数
  • (三)模仿学习-Action数据的模仿
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (小白学Java)Java简介和基本配置
  • .Net Core 中间件验签
  • .NET Core中的去虚
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 受管制代码
  • .NET6 命令行启动及发布单个Exe文件
  • @test注解_Spring 自定义注解你了解过吗?
  • @vue/cli 3.x+引入jQuery
  • [ C++ ] STL---仿函数与priority_queue