php文件网络请求流程(基于Nginx)

(本文将通俗易懂地讲解一下一个PHP文件是怎么被解析并输出到浏览器的。详情可以参考http协议和nginx,或者在以后得博文中给大家讲解)

一次简单的网络请求就是客户端向服务器发送HTTP(现在都要求是https)请求,服务器会在HTTP响应中回送所有的请求数据。如下图所示:

这里写图片描述

咱们下面要讲的内容就是基于这张图,但肯定要详细一些。

  1. 由本地向服务器发起请求。
    比如我们要请求的PHP脚本的url是 http://xxx.xxx.xxx/hello.php
    首先浏览器根据http协议解析这个url,xxx.xxx.xxx就是服务器的地址,hello.php这个脚本文件就是要请求的资源。
    这就是我们通常说的request请求。

  2. Nginx解析PHP文件
    我们的浏览器是解析不出PHP文件,它必须通过http协议跟服务器通信,服务器把解析好的PHP文件(解析好后应该是一个静态页面,就像一个HTML文件一样)返回给浏览器,而这里的服务器就是我们通常说的服务器代理nginx、apache等,这里我们只讨论Nginx对PHP文件的解析。

    Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。

    PHP的FastCGI就是PHP-FMP

    FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。(也就是我们会看到nginx配置文件中,fastcgi_pass可以为127.0.0.1:9000(9000这是php-fpm的默认监听端口),或者是/tmp/php-cgi.sock文件)。
    说的简单点就是nginx通过一个socket跟fastcgi(php-fpm)通信。

    2.1 wrapper
    为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后Fork(派生)出一个新的线程,这个线程调用解释器(安装的PHP程序)或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;

    3.服务器返回请求:
    当Nignx后接收到解析后的PHP脚本后,再将其通过http协议返回给浏览器,这就是我们常说的response。

下面就以一张的流程图,来清晰的展示这个过程。

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值