Nginx、CGI、FastCGI、php-fpm关系
NGINX 和 PHP 是一对很好的搭档,那么 nginx 是如何与 php 结合实现 对外的网络访问呢? 首先 NGINX 作为一个 web 服务器只能处理静态请求,关于动态请求,是通过 CGI 具备的动态请求能力。 NGINX会将动态请求交给 CGI 处理,CGI 将处理结果返回给 NGINX,NGINX 再将请求的结果返给给浏览器 CGI 的作用 当在浏览器中输入一个动态地址时,如 /index.php, 通过 DNS 解析,最终请求会到 web 服务器上,当 NGINX 发现请求时动态请求。会交给 PHP 解释器处理此请求,那再给 NGINX 需要给 PHP 解释器传输哪些数据呢?请求地址,请求方法,请求参数这些东西总归是要有的,但是也不能仅仅是这些,像请求头和 cookie … 也应该包含其中。 那么怎么确定到底该传输哪些数据,以及以什么样的格式传输呢? CGI 就是解决这个问题而生的。 CGI 全程通用网关接口 (英语:Common Gateway Interface,CGI) 是为提供网络服务而执行控制台应用的程序,提供于服务器上实现动态网页的通用协议。通常情况下,一次请求对应一个CGI 脚本的执行,生成一个 HTML。 CGI 接口规定了 nginx 与动态解释器之前传输数据的参数和格式,为 nginx 和脚本解释器之间建立起了一个桥梁。 CGI 的存在使 web 服务器与动态语言之间的关系进行了解耦,使得 web 服务器可以处理的动态请求,但是 CGI 的设计使通过进程的方式来处理动态请求的,当动态请求过来后,CGI 会起一个进程进行处理,请求结束后关闭进程. 进程的频繁创建和销毁是存在开销的,这也就导致了 CGI 很难应对高并发的场景, FastCGI 的出现解决了这个问题....