美文网首页程序员
PHP-从输入网址到展示页面经历过程

PHP-从输入网址到展示页面经历过程

作者: kang_KK | 来源:发表于2020-03-24 12:51 被阅读0次

这个问题我想萌新应该也遇到过~ 百思不得其解~ 那就来介绍一下~

这个可以问题可以从技术角度上划分成 “nginx+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启动和工作原理
启动php-fpm时,会启动master进程,加载php.ini文件,初始化执行环境,并启动多个worker进程。每次请求来时会将请求传递给worker进程进行处理
php平滑重启原理
每次修改完php.ini配置并重启后,会启动新的worker进程加载新的配置,而之前已经存在的进程会在工作完成之后销毁,因此实现平滑重启
nginx工作原理
如果想弄明白nginx和php配合的原理,还需要先了解nginx的配置文件中的server部分
server {
    listen       80; #监听80端口,接收http请求
    server_name  www.itzishu.com; #一般存放网址,表示配置的哪个项目
    root /var/www/www.itzishu.com/; # 存放代码的根目录地址或代码启动入口
    index index.php index.html; #网站默认页面 从.php 到 .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进程。

OK 了解了以上的内容后,我们已经清楚了 80%了,但是还有一部分的内容我们不能忽略那就是网络层。

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

  1. 用户访问域名
  2. DNS解析(或者解析本地 hosts 文件) -到域名服务商递归查询 IP
  3. TCP连接-三次握手建立 TCP 连接
  4. 请求到对应服务器的 IP和端口上
  5. Nginx 监测到端口的请求
  6. Nginx 针对url 进行 location 的匹配
  7. 执行 location 的规则,转发请求到 php
  8. php-fpm的 master进程检测到Nginx 请求
  9. Master进程将请求分配一个闲置 worker进程
  10. Worker 进程执行请求
  11. Worker 进程将执行结果返回给 Nginx
  12. Nginx 返回结果给用户
  13. 用户看到了原始内容,然后浏览器开始渲染 从 html ->css -> js

这么几个流程。这还是最简单的请求流程~ 如果还要包含到 HTTPS,这种那可就更麻烦了~

需要了解更多 PHP或者更多稀奇古怪的东西可以阅览我的博客~ (博客里还有游戏哟~)
一个IT的自述博客

博客原文链接

相关文章

  • PHP-从输入网址到展示页面经历过程

    这个问题我想萌新应该也遇到过~ 百思不得其解~ 那就来介绍一下~ 这个可以问题可以从技术角度上划分成 “nginx...

  • 从 输入网址(URL)到页面展示的过程

    从输入网址到页面呈现这个过程大致可分为以下这几个部分: 网络通信 页面渲染 1.网络通信 1.1输入网址 当我们在...

  • 从 输入网址(URL)到页面展示的过程

    1.用户输入url网址(URL) 用户输入url(也就是我们说的网址,也是统一资源定义符,用于定义互联网资源) 比...

  • 从URL输入到页面展现

    学习分享(简析从浏览器输入网址到页面展现过程) 以baidu.com为例,当我们在浏览器输入网址到页面展现,整个过...

  • 题目

    1、从输入一个url到浏览器页面展示都经历了哪些过程? -One[https://www.jianshu.com/...

  • 无标题文章

    从url输入到页面展示发生了什么 举个例子,我们在浏览器上输入baidu.com输入,页面展示百度首页。整个过程发...

  • 从输入域名到页面展示的过程

    以于浏览器输入baidu.com为例,探讨从输入域名到页面展示之间发生了什么。 1.将baidu.com输入至浏览...

  • 从输入URL到页面展示的过程

    DNS解析 DNS解析的过程就是寻找哪台机器上有你需要资源的过程。当你在浏览器中输入一个地址时,例如www.bai...

  • 从输入URL到页面展示的过程

    # 在浏览器输入baidu.com到页面展示百度首页的过程 1.在浏览器输入URL baidu.com 2.浏览器...

  • 如何记录加载一个页面的时间

    如何记录加载一个页面的时间 页面加载 页面加载就是从你输入网址+enter开始,发生的一系列过程,最终到页面显示。...

网友评论

    本文标题:PHP-从输入网址到展示页面经历过程

    本文链接:https://www.haomeiwen.com/subject/nwroyhtx.html