详解nginx+php执行请求的工作原理

 更新时间:2019年02月25日 14:07:05   作者:xavier  
这篇文章主要介绍了详解nginx+php执行请求的工作原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

php工作原理

首先先了解下常听说的cgi,php-cgi,fastcgi,php-fpm到底是什么关系,帮助了解php的工作原理

cgi协议

cgi协议用来确定webserver(例如nginx),也就是内容分发服务器传递过来什么数据,什么样格式的数据

php-cgi进程解释器

php-cgi是php的cgi协议进程解释器,每次启动时,需要经历加载php.ini文件->初始化执行环境->处理请求->返回内容给webserver->php-cgi进程退出的流程

fastcgi协议

fastcgi协议是对cgi协议效率提升的补充,主要是针对每次请求过来时都需要启动一个cgi解释器进程的优化,不再需要cgi解释器进程每次收到webserver请求后都需要重新加载php.ini文件和初始化执行环境

php-fpm进程管理器

php-fpm是对fastcgi协议的实现,是进程管理器,启动时包括master和worker进程俩部分,master进程监听端口,接收来自webserver请求,worker进程一般具有多个,每个worker进程都有一个cgi进程解释器,用来执行php代码

php启动和工作原理

启动phpfpm时,会启动master进程,加载php.ini文件,初始化执行环境,并启动多个worker进程。每次请求来时会将请求传递给worker进程进行处理

php平滑重启原理

每次修改完php.ini配置并重启后,会启动新的worker进程加载新的配置,而之前已经存在的进程会在工作完成之后销毁,因此实现平滑重启

nginx工作原理

如果想弄明白nginx和php配合的原理,还需要先了解nginx的配置文件中的server部分

server {
  listen    80; #监听80端口,接收http请求
  server_name www.example.com; #一般存放网址,表示配置的哪个项目
  root /home/wwwroot/zensmall/public/; # 存放代码的根目录地址或代码启动入口
  index index.php index.html; #网站默认首页
  
  #当请求网站的url进行location的前缀匹配且最长匹配字符串是该配置项时,按顺序检查文件是否存在,并返回第一个找到的文件
  location / {
     #try_files,按顺序检查文件是否存在,返回第一个找到的文件
     #$uri代表不带请求参数的当前地址
     #$query_string代表请求携带的参数
     try_files  $uri $uri/ /index.php?$query_string; #按顺序检查$uri文件,$uri地址是否存在,如果存在,返回第一个找到的文件;如果都不存在,发起访问/index.php?$query_string的内部请求,该请求会重新匹配到下面的location请求
  }
  
   #当请求网站的php文件的时候,反向代理到php-fpm去处理
  location ~ \.php$ {
     include    fastcgi_params; #引入fastcgi的配置文件
     fastcgi_pass  127.0.0.1:9000; #设置php fastcgi进程监听的IP地址和端口
     fastcgi_index index.php; #设置首页文件
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #设置脚本文件请求的路径
  }
}

上面server配置的整体含义是:每次nginx监听到80端口的url请求,会对url进行location匹配。如果匹配到/规则时,会进行内部请求重定向,发起/index.php?$query_string的内部请求,而对应的location配置规则会将请求发送给监听9000端口的php-fpm的master进程

总结

下面总结下最简单的用户请求流程:

用户访问域名->域名进行DNS解析->请求到对应IP服务器和端口->nginx监听到对应端口的请求->nginx对url进行location匹配->执行匹配location下的规则->nginx转发请求给php->php-fpm的master进程监听到nginx请求->master进程将请求分配给其中一个闲置的worker进程->worker进程执行请求->worker进程返回执行结果给nginx->nginx返回结果给用户

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Nginx 如何限制访问频率,下载速率和并发连接数的方法

    Nginx 如何限制访问频率,下载速率和并发连接数的方法

    这篇文章主要介绍了Nginx 如何限制访问频率,下载速率和并发连接数的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Nginx配置负载均衡时访问地址无法生效的解决方法

    Nginx配置负载均衡时访问地址无法生效的解决方法

    本文主要介绍了Nginx配置负载均衡时访问地址无法生效的解决方法,例如负载均衡策略的设置是否正确、是否存在拼写错误等,下面就来详细的介绍一下,感兴趣的可以了解一下
    2023-09-09
  • Linux环境下安装nginx教程

    Linux环境下安装nginx教程

    大家好,本篇文章主要讲的是Linux环境下安装nginx教程,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Nginx路径匹配规则小结

    Nginx路径匹配规则小结

    本文主要介绍了Nginx路径匹配规则小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 详解阿里云LINUX服务器配置HTTPS(NGINX)

    详解阿里云LINUX服务器配置HTTPS(NGINX)

    本篇文章主要介绍了阿里云LINUX服务器配置HTTPS(NGINX) ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Nginx 配置 ModSecurity 网络应用防火墙实现

    Nginx 配置 ModSecurity 网络应用防火墙实现

    这篇文章主要介绍了Nginx 配置 ModSecurity 网络应用防火墙实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • upstream模块中常用options选项讲解

    upstream模块中常用options选项讲解

    这篇文章主要为大家介绍了upstream模块中常用options选项讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Nginx服务器作反向代理时的缓存配置要点解析

    Nginx服务器作反向代理时的缓存配置要点解析

    这篇文章主要介绍了Nginx服务器作反向代理时的缓存配置要点解析,需要的朋友可以参考下
    2016-04-04
  • Filebeat 采集 Nginx 日志的方法

    Filebeat 采集 Nginx 日志的方法

    这篇文章主要介绍了Filebeat 采集 Nginx 日志的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Nginx HTTPS实现原理及配置实践

    Nginx HTTPS实现原理及配置实践

    本文主要介绍了Nginx HTTPS实现原理及配置实践,详细的介绍了HTTPS原理,实现及其HTTPS单台配置实践,集群配置、优化等,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09

最新评论