• Nginx与PHP如何协同工作


    要说Nginx与PHP如何协同工作,首先得说CGI和FastCGI两个协议。

    CGI是Web Server与后台语言交互的协议,有了这个协议,开发者可以使用任何语言处理Web Server发来的请求,动态的生成内容。但CGI有个致命缺点,那就是每处理一个请求都需要fork一个全新的进程,这样低效的方式明显不能满足需求,这样FastCGI诞生了。FastCGI顾名思义为更快的CGI。它允许在一个进程内处理多个请求,而不是一个请求处理完毕就直接结束进程,性能上有了很大的提升。

    FPM就是FastCGI的实现,任何实现了FastCGI协议的Web Server都能够与之通信。

    FPM是一个PHP进程管理器,包含master进程和worker进程两种:master只有一个,负责监听端口,接收来自Web Server的请求,而worker则一般有多个,每个worker内部都嵌入一个PHP解释器,是PHP代码真正执行的地方。

    FPM接收到请求,到处理完毕,具体流程如下:
    1.FPM的master进程接收到请求
    2.master进程根据配置指派特定的worker进程进行请求处理,如果没有可用进程,返回错误,这也是配合Nginx遇到502错误的原因。
    3.worker进程处理请求,如果超时,返回504
    4.请求处理结束,返回结果。

    为了能使Nginx理解FastCGI协议,Nginx提供了FastCGI模块来将http请求映射为对应FastCGI请求。
    Nginx的FastCGI模块提供了fastcgi_param指令来主要处理这些映射关系,主要完成的工作是将Nginx中的变量翻译成PHP中能够理解的变量。
    除此之外,非常重要的就是fastcgi_pass指令了,用来指定FPM进程监听的地址,Nginx会把所有的PHP请求翻译成FastCGI请求后再发送到FPM地址  

  • 相关阅读:
    聚集索引和非聚集索引的区别有哪些
    材料管理框架:一个共通的viewModel搞定所有的分页查询
    常用到的Linux命令
    Mybatis的使用中的一些不太注意的技巧
    Maven使用yuicompressor-maven-plugin打包压缩css、js文件
    Redis实现Mybatis的二级缓存
    zookeeper分布式协调服务的使用一
    Redis Cluster集群
    Spring+Struts2+Hibernate的整合
    SpringMVC,采用的是SpringJDBC
  • 原文地址:https://www.cnblogs.com/caohongchang/p/11479581.html
Copyright © 2020-2023  润新知