# client和nginx简易交互过程

- step1:client发起http请求
- step2:dns服务器解析域名得到主机ip
- step3:默认端口为80,通过ip+port建立tcp/ip链接
- step4:建立连接的tcp/ip三次握手,建立成功发送数据包
- step5:nginx匹配请求

  - case .html: 静态内容,分发静态内容响应
  - case .php: php脚本,转发请求内容到php-fpm进程,分发php-fpm返回的内容响应

- step6:断开连接的tcp/ip四次握手,断开连接

# nginx和php简易交互过程

- 背景:web server和服务端语言交互依赖的是cgi(Common Gateway Interface)协议,由于cgi效率不高(每次请求都需要重新起一个php-cgi解析器进程,
        这中间会进行加载php.ini配置等一系列的操作)所以后期产生了fastcgi协议(一种常驻型的cgi协议),php-cgi实现了fastcgi,但是相比php-cgi,php-fpm提供
        了更好的PHP进程管理方式,可以有效控制内存和进程并可以平滑重载PHP配置
- 流程:

  - step1:nginx接收到一条http请求,会把环境变量,请求参数转变成php能懂的php变量

    ```
    // nginx 配置资料
    location ~ \.php$ {
        include snippets/fastcgi-php.conf; //step1
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
    ```

  - step2:nginx匹配到.php结尾的访问通过fastcgi_pass命令传递给php-fpm.sock文件,其实这里 的ngnix发挥的是反向代理的角色,把http协议请求转到fastcgi协议请求

    ```
    // nginx 配置资料
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;// step2
    }
    ```

  - step3:php-fpm.sock文件会被php-fpm的master进程所引用,这里nginx和php-fpm使用的是 linux的进程间通信方式unix domain socks,是一种基于文件而不是网络底册协议的通信方式

  - step4:php-fpm的master进程接收到请求后,会把请求分发到php-fpm的子进程,每个php-fpm 子进程都包含一个php解析器
  - step5:php-fpm进程处理完请求后返回给nginx

 # 附录

 - php-fpm进程管理的三种方式
    + static: 静态方式,php-fpm启动时及启动最大子进程数,优点是不需要额外的fork子进程过程,适合专门的服务器
        - 参数:
            - pm.max_children: 最大子进程数
    + dynamic: 动态方式,配置最大数和启动数,空闲数,实际使用过程fork进程,优点灵活节省内存,缺点fork过程有性能消耗
        - 参数:
            - pm.max_children: 最大进程数
            - pm.start_servers: 启动数,等于min_spare_servers + (max_spare_servers - min_spare_servers)/2
            - pm.min_spare_servers: 最小空闲进程数,如果空闲进程(idle)数小于该值,启动一个子进程
            - pm.max_spare_servers: 最大空闲进程数,如果空闲进程(idle)数大于该值,kill一个子进程
    + ondemand: 按需方式, 不启动子进程,按需fork,优点节省资源
        - 参数:
            - pm.max_children:
            - pm.process_idle_timeout: 子进程空闲多少秒后被kill

client和nginx简易交互过程的更多相关文章

  1. Nginx与PHP交互过程 + Nginx与PHP通信的两种方式

    一.Nginx与PHP交互过程的7步走(用户对动态PHP网页访问过程) step1:用户将http请求发送给nginx服务器(用户和nginx服务器进行三次握手进行TCP连接) step2:nginx ...

  2. DHCP协议格式、DHCP服务搭建、DHCP协商交互过程入门学习

    相关学习资料 http://www.rfc-editor.org/rfc/rfc2131.txt http://baike.baidu.com/view/7992.htm?fromtitle=DHCP ...

  3. ASP.NET运行机制原理 ---浏览器与IIS的交互过程 自己学习 网上查了下别人写的总结的很好 就转过来了 和自己写的还好里嘻嘻

    一.浏览器和服务器的交互原理 (一).浏览器和服务器交互的简单描述: 1.通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去访问一台电脑上访问文件一样,只不过浏览器的访问请求是由被访问 ...

  4. SSL交互过程

    SSL交互过程 HTTPS将HTTP和SSL结合,即加了SSL隧道封装的HTTP,通过SSL对客户端身份和服务器进行验证,对传输的数据进行加密.不同情况下SSL的协商过程存在差异,本节以只验证服务器为 ...

  5. Nginx处理请求过程

    1. worker进程工作机制  现在我们了解了当我们在操作nginx的时候,nginx内部做的一些事情,那么worker进程又是如何处理请求的呢?   我们前面有提到,worker进程之间是平等的, ...

  6. Android Camera 通过V4L2与kernel driver的完整交互过程

    http://blog.chinaunix.net/uid-26215986-id-3552456.html 原文地址:Android Camera 通过V4L2与kernel driver的完整交互 ...

  7. JSP和Servlet及浏览器与tomcat交互过程

    JSP与SERVLET区别 JSP在本质上就是Servlet,但是两者的创建方式不一样. JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.因此在实际应用中采用Servlet来控制业务流程 ...

  8. 转:简单的RTSP消息交互过程

    简单的RTSP消息交互过程 C表示RTSP客户端,S表示RTSP服务端 1.   第一步:查询服务器端可用方法 1.C->S:OPTION request       //询问S有哪些方法可用 ...

  9. Ajax概述及浅谈其与服务器的交互过程

    概念: 首先AJAX不只是一个特定的客户端技术,更应算是一种技巧.Ajax技术的核心操作是用XmlHttpRequest(下称XHR)对象进行异步数据处理. 所谓异步,即通过 AJAX,JavaScr ...

随机推荐

  1. ADO.NET查询和操作数据库

    stringbuilder 类 stringbuilder类:用来定义可变字符串 stringbulider Append(string value)   在结尾追加 stringbuilder in ...

  2. Oracle相关知识做个总结

    一.创建用户: 以系统管理员登陆,右键点击Uers进行新建, 一般:默认空间选择USERS,临时表空间选择TEMP,概要文件选择DEFAULT. 对象权限:不做操作. 角色权限:1.connect 2 ...

  3. 实战经验分享之C#对象XML序列化

    .Net Framework提供了对应的System.Xml.Seriazliation.XmlSerializer负责把对象序列化到XML,和从XML中反序列化为对象.Serializer的使用比较 ...

  4. 小白的Python之路 day5 shutil模块

    shutil模块 一.主要用途 高级的文件.文件夹.压缩包 等处理模块 二.常用方法详解 1.shutil.copyfileobj(fsrc, fdst) 功能:把一个文件的内容拷贝到另外一个文件中, ...

  5. 【转】npm使用过程中的一些错误解决办法及npm常用命令

    原文 node,npm在前端开发流程中提供了非常完善的自动化工具链,但是同样由于其复杂性导致有很多奇奇怪怪的问题.本文将记录使用过程中出现的一些问题及其解决方法备案. 国内由于gfw问题,导致很多国外 ...

  6. MVC异步加载学习笔记

    一.普通的异步请求 1.View层 <input type="text" id="Name" value="" placeholder ...

  7. Watch time

    Stopwatch watch = new Stopwatch(); watch.Start(); ; i <= ; i++) { ; j <= ; j++) { ; k <= ; ...

  8. vmware 解决 authentication token manipulation error

    vmvare虚拟机长时间未使用,导致再次登录的时候密码忘了,无法登录. 启动时长按shift,进入root(recovery)模式, (recovery mode),进入"Recovery ...

  9. Centos上安装jdk版本出错的问题

    今天买了个阿里云的服务器,于是手动安装了一遍JavaWeb运行环境,首先安装jdk与配置jdk就遇到了问题. 我下载的是解压版的jdk-8u151-linux-i586.tar.gz.安装和配置到是蛮 ...

  10. windows 连接Linux

    服务器:阿里云 ecs 从 Windows 环境远程登录 Linux 实例 远程登录软件的用法大同小异.本文档以 Putty 为例,介绍如何远程登录实例.Putty 操作简单.免费.免安装, 下载地址 ...