加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 金华站长网 (https://www.0579zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

深入剖析 Web 服务器与 PHP 应用的通信机制 - 掌握 CGI 和 FastCGI 协议的运行原理

发布时间:2018-12-08 00:28:48 所属栏目:业界 来源:Web开发
导读:副标题#e# 身为一名使用 PHP 语言开发后端服务的程序猿,我们每天都和 PHP 以及 Web 服务器产生无数次的亲密接触。得益于它们,我们才能够如此快速的构建出令人陶醉的 Web 产品。 尽管我们已经和 Web 服务器和 PHP 建立起深厚的友谊,但你知道它们之间为何

下面是官网中获取到的它所支持的特性:

  • 支持平滑停止 / 启动的高级进程管理功能;
  • 可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置);
  • stdout 和 stderr 日志记录;
  • 在发生意外情况的时候能够重新启动并缓存被破坏的 opcode;
  • 文件上传优化支持;
  • "慢日志" - 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以使用 ptrace 或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢;
  • fastcgifinishrequest() - 特殊功能:用于在请求完成和刷新数据后,继续在后台执行耗时的工作(录入视频转换、统计处理等);
  • 动态/静态子进程产生;
  • 基本 SAPI 运行状态信息(类似 Apache 的 mod_status);
  • 基于 php.ini 的配置文件。

那么 PHP-FPM 是如何工作的呢?

PHP-FPM 进程管理器有两种进程组成,一个 Master 进程和多个 Worker 进程。Master 进程负责监听端口,接收来自 Web 服务器的请求,然后指派具体的 Worker 进程处理请求;worker 进程则一般有多个 (依据配置决定进程数),每个进程内部都嵌入了一个 PHP 解释器,用来执行 PHP 代码。

Nginx 服务器如何与 FastCGI 协同工作

Nginx 服务器无法直接与 FastCGI 服务器进行通信,需要启用 ngx_http_fastcgi_module 模块进行代理配置,才能将请求发送给 FastCGI 服务。

其中,包括我们熟知的配置指令:

  • fastcgi_pass 用于设置 FastCGI 服务器的 IP 地址(TCT 套接字)或 UNIX 套接字。
  • fastcgi_param 设置传入 FastCGI 服务器的参数。

你可以到 PHP FastCGI 实例教程 (https://www.nginx.com/resources/wiki/start/topics/examples/phpfcgi/)学习一些基本使用。

总结

到这里我们基本就学习完 CGI、FastCGI、PHP-FPM以及 Nginx 服务器与 FastCGI 服务通信原理。一句话:

CGI 和 FastCGI 是一种协议和 HTTP 协议一样位于应用层,与语言无关;PHP-FPM 是一种 FastCGI 协议的实现,能够管理 FastCGI 进程。

【编辑推荐】

  1. 理解Java应用服务器的七种“武器”
  2. Web服务器安全设置,有效防护黑客攻击70%
  3. 从DNS根服务器的分布说起
  4. 后端须知:服务器Tomcat 的连接数与线程池详解
  5. 应用安全:Web攻击手段及防御之—网络层或漏洞
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0

(编辑:PHP编程网 - 金华站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!