首页 > 代码库 > FastCGI 介绍

FastCGI 介绍

LNMP 环境的基本请求流程 :当 LNMP 组合工作时,首先是用户通过浏览器输入域名请求 Nginx Web 服务,如果请求的是静态资源,则由 Nginx 解析返回给用户;如果是动态请求,那么 Nginx 就会把它通过 FastCGI 接口发送给 PHP 进行解析,如果这个动态请求要读取数据库数据,那么 PHP 就会继续向后请求 MySQL 数据库,以读取需要的数据,并最终通过 Nginx 服务吧获取的数据返回给用户,这就是 LNMP 环境的基本请求流程。

CGI 简介 :最早的 Web 服务器简单地响应浏览器发来的 HTTP 请求,并将存储在服务器上的 HTML 文件返回给浏览器,也就是静态 HTML。事物总是不断发展,网站也越来越复杂,所以出现动态技术,但是服务器并不能直接运行 php,asp 这样的文件,自己不能做,外包给别人吧,但是要与第三做个约定,我给你什么,然后你给我什么,就是我把请求参数发送给你,然后我接收你的处理结果给客户端,那这个约定就是 common gateway interface,公共网关接口,简称 CGI。简单来说就是由 CGI 去调用 php 或其他动态语言来执行 php,asp 这样的文件。

FastCGI 简介 :传统的 CGI 因为性能和安全性比较差,所以也就有了 FastCGI,FastCGI 将 CGI 解释器进程保持在内存中并因此获得较高的性能,在 Linux 上,FastCGI 接口即为 socket,这个 socket 可以是文件 socket 也可以是 IP socket 。FastCGI 的主要优点是把动态语言和 HTTP 服务器分离开来,使 Nginx 专门处理静态请求及向后转发的动态请求,而 PHP/PHP-FPM 服务器则专门解析 PHP 动态请求。php-fpm 是一个 PHP FastCGI 管理器,是只用于 PHP 的。php-fpm 其实是 PHP 源代码的一个补丁,旨在将 FastCGI 进程管理整合进 PHP 包中。

Nginx FastCGI 运行原理 :Nginx 不支持对外部动态程序的直接调用或者解析,所有的外部程序必须通过 FastCGI 接口来调用,FastCGI 接口在 Linux 下是 socket,为了调用 CGI 程序,还需要一个 FastCGI 的 wrapper(可以理解为用于启动一个程序的程序),这个 wrapper 绑定在某个固定的 socket 上,如端口或文件 socket,当 Nginx 将 CGI 请求发送给这个 socket 的时候,通过 FastCGI 接口,wrapper 接收到请求,然后派生出一个新的线程,这个线程调用解释器或外部程序处理脚本来读取返回的数据;接着,wrapper 再将返回的数据通过 FastCGI 接口,沿着固定的 socket 传递给 socket 传递给 Nginx;最后,Nginx 将返回的数据发送给客户端,这就是 Nginx + FastCGI 的整个运作过程。

技术分享

 

 

 

    

FastCGI 介绍